问题场景
这是一则关于我恶臭同事踩的坑:
风控需要启用新的项目来适配最新框架,依赖从JDemo中迁移。而JDemo结构如下:
│ pom.xml
│
├─jdemo-api
│ │ pom.xml
│ │
│ └─src.main.java.cn.taqu.demo.api // 空模板
│
└─jdemo-provider
│ pom.xml
│
├─src.main.java.cn.taqu.demo // 具体Demo样例
│ │ │
│ │ └─resources
│ │ │ application-dev.yml
│ │ │ application-prod.yml
│ │ │ application-test.yml
│ │ │ application.yml
│ │ │ logback-spring.xml
│ │ │
│ │ ├─mapper
│ │ │
│ │ └─templates
│ │ ├─common
│ │ ├─error
│ │ ├─index
│ │ └─jpa
│ │
│ └─test.java.cn.taqu.demo // 测试Demo
│
└─target
<project ...>
<parent>
<groupId>cn.taqu</groupId>
<artifactId>xy-framework</artifactId>
<version>3.0.14-SNAPSHOT</version>
</parent>
<artifactId>jdemo</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modelVersion>4.0.0</modelVersion>
<modules>
<module>jdemo-api</module>
<module>jdemo-provider</module>
</modules>
<properties>
<java.version>1.8</java.version>
<project.encoding>UTF-8</project.encoding>
<kafka.version>2.3.0</kafka.version>
<xy.framework.version>3.0.14-SNAPSHOT</xy.framework.version>
</properties>
<dependencyManagement>
<dependencies>
...
</dependencies>
</dependencyManagement>
<build>
<plugins>
...
</plugins>
</build>
</project>
<project ...>
<parent>
<groupId>cn.taqu</groupId>
<artifactId>jdemo</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>jdemo-provider</artifactId>
<modelVersion>4.0.0</modelVersion>
<dependencies>
...
</dependencies>
<build>
<finalName>jdemo</finalName>
<plugins>
...
</plugins>
</build>
</project>
其中最外围的pom.xml
作为父工程(或者叫聚合工程)打包成pom
类型并定义了项目中需要的依赖和版本,用来做jar包的版本控制。而具体项目的开发和运行只是其jdemo-provider
子模块,它所使用的正是父工程这个‘jar
’。
子模块没有定义packaging
所以默认为jar
形式,因而recourses
静态资源也能被打包。(注意这里的target是在jdemo-provider
模块下)
而新项目则没有做模块化,所以直接copy了这两份pom.xml
带上了pom
的打包类型,所以recourses
下的所有静态资源都没有被打包,导致启动失败。
解决方案
<packaging>jar</packaging>
原理分析
pom工程
:用在父级工程或聚合工程中。用来做jar包的版本控制。war工程
:将会打包成war,发布在服务器上的工程,如网站或服务。所以service通常打包成war包。jar工程
:将会打包成jar用作jar包使用。maven通过install将本地工程打包成jar包,放入到本地仓库中,再通过pom.xml配置依赖引入到当前工程。
具体看这里:maven的三种工程pom、jar、war的区别
One comment
还真有人蠢到家了(╯‵□′)╯︵┴─┴