Maven配置:如何将Java SE项目直接作为依赖引入Maven项目
根因说明
Eclipse中手动配置的Build Path是IDE层面的私有配置,Maven执行命令行构建时不会读取这部分规则,因此会出现IDE内运行正常、执行mvn test-compile时报[ERROR] package foo does not exist的问题。以下两种方案都不需要提前将Project1打包为jar,配置完成后可以直接删掉Eclipse里手动加的构建路径依赖,IDE和命令行构建都能正常识别Project1的类。
方案1:直接引入Project1源码目录(零修改Project1)
不需要改动Project1的任何结构,只需要在Project2的pom.xml中添加构建辅助插件,将Project1的源码目录加入Maven编译的源码扫描路径,编译时会直接把Project1的类和Project2的代码一起编译,完全不需要提前打包。
在Project2的pom.xml的<build><plugins>节点下添加如下配置:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>3.5.0</version> <executions> <execution> <id>add-external-project-source</id> <phase>generate-sources</phase> <goals> <goal>add-source</goal> </goals> <configuration> <sources> <!-- 路径为Project1的src目录相对Project2 pom.xml的路径,平级项目直接写下方值即可 --> <source>../Project1/src</source> </sources> </configuration> </execution> </executions> </plugin>
配置完成后在Eclipse中右键Project2 -> Maven -> Update Project刷新配置即可,执行mvn test-compile时会自动扫描Project1的源码,不会再报类找不到的错误。
方案2:转为Maven多模块依赖(适合长期关联维护的项目)
如果两个项目是长期关联迭代的,更推荐用Maven原生的模块依赖机制,不需要额外引入插件:
- 给Project1根目录添加一个最小化的pom.xml,将Project1声明为普通Maven项目,打包类型设为
jar即可,不需要手动执行打包命令 - 在Project2的pom.xml中添加Project1的普通Maven依赖,groupId、artifactId、version和Project1的pom中配置保持一致,在依赖的
<relativePath>节点指定Project1的pom.xml路径(平级项目填../Project1/pom.xml即可) - 配置完成后Maven会自动识别两个项目的依赖关系,构建Project2时会自动先编译Project1的最新源码,不需要提前将Project1安装到本地仓库,Eclipse导入后也会自动识别项目依赖,不需要手动配置构建路径。
注意事项
- 不要使用
system作用域的依赖,该方式必须指定已存在的本地jar包路径,不符合不打包Project1的需求,且已经被Maven官方标记为废弃。 - 配置路径时注意相对路径是相对于Project2的pom.xml所在目录计算的,根据自己的实际目录结构调整即可。
内容的提问来源于stack exchange,提问作者user14925447
相关产品推荐
相关产品推荐

