Loading... ## 问题场景 这是一则关于我恶臭同事踩的坑: 风控需要启用新的项目来适配最新框架,依赖从JDemo中迁移。而JDemo结构如下: ```cmd │ 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 ``` ```xml <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> ``` ```xml <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>` ## 原理分析 1. `pom工程`:用在父级工程或聚合工程中。用来做jar包的版本控制。 2. `war工程`:将会打包成war,发布在服务器上的工程,如网站或服务。所以service通常打包成war包。 3. `jar工程`:将会打包成jar用作jar包使用。maven通过install将本地工程打包成jar包,放入到本地仓库中,再通过pom.xml配置依赖引入到当前工程。 具体看这里:[maven的三种工程pom、jar、war的区别](https://blog.csdn.net/xldmx/article/details/95196139) Last modification:August 22, 2022 © Allow specification reprint Like 0 喵ฅฅ
One comment
还真有人蠢到家了(╯‵□′)╯︵┴─┴