问题场景
这是一则关于我恶臭同事踩的坑:
风控需要启用新的项目来适配最新框架,依赖从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
还真有人蠢到家了(╯‵□′)╯︵┴─┴