问题描述
我的项目结构如下:
- app
- app-repo
- app-service
- app-controller
- lib (custom jar placed here)
- pom.xml (parent pom)
我的父pom包括子模块和存储库位置,以从 lib 文件夹中获取jar
<repositories>
<repository>
<id>in-project</id>
<name>In Project Repo</name>
<url>file://${main.basedir}/lib</url>
</repository>
</repositories>
<modules>
<module>app-repo</module>
<module>app-service</module>
<module>app-controller</module>
</modules>
<properties>
<main.basedir>${project.basedir}</main.basedir>
<jar.version>1.7</jar.version>
<release.version>1.0-SNAPSHOT</release.version>
</properties>
<dependencies>
<dependency> <!-- jar file located in lib folder -->
<groupId>com.custom</groupId>
<artifactId>custom-core</artifactId>
<version>${jar.version}</version>
<scope>compile</scope>
</dependency>
</dependencies>
我的Maven构建顺序:
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] app [pom]
[INFO] app-repo [jar]
[INFO] app-service [jar]
[INFO] app-controller [jar]
Failure to find com.custom:custom-core:jar:1.7 in
file://C:\Windows\System32\config\systemprofile\AppData\Local\Jenkins\.jenkins\workspace\My_APP\app-repo/lib was cached in the local repository
我发现maven在子模块构建期间从父pom继承了 <repositories>
,因此 <url>file://${main.basedir}/lib</url>
导致maven查找应用-repo / lib并遇到错误。
所以我想知道处理这种情况的最佳实践是什么?
我尝试将<url>file://${project.parent.basedir}/lib</url>
添加到app-repo中的子pom.xml中,如下所示:
<repositories>
<repository>
<id>in-project</id>
<name>In Project Repo</name>
<url>file://${project.parent.basedir}/lib</url>
</repository>
</repositories>
或
<properties>
<main.basedir>${project.parent.basedir}</main.basedir>
</properties>
Failure to find com.custom:custom-core:jar:1.7 in
file://${project.parent.basedir}/lib was cached in the local repository
解决方法
从伍德卓克(J Woodchuck)得到提示后,我可以从here找到答案
从3.0.4版本开始,${parent.basedir}
不再可用,因此子级中的pom.xml需要像这样才能使其能够引用父项目目录:
<main.basedir>${project.basedir}${file.separator}..</main.basedir>