I have a project structure like below:
- app
- app-repo
- app-service
- app-controller
- lib (custom jar placed here)
- pom.xml (parent pom)
My parent pom include the submodules and a repository location to get jar from lib folder
<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>
My maven build order:
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] app [pom]
[INFO] app-repo [jar]
[INFO] app-service [jar]
[INFO] app-controller [jar]
and it failed with error when building app-repo:
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
What I found is maven inherits the <repositories>
from parent pom during the submodules build, so <url>file://${main.basedir}/lib</url>
is causing maven to look for app-repo/lib and hit the error.
So I would like to know what is the best practice to handle this scenario?
- How to make sure maven will always get the jar from the lib folder and ignore for the submodules ?
- What is the correct/best configuration for the parent pom.xml ?
I tried to add <url>file://${project.parent.basedir}/lib</url>
into the child pom.xml in app-repo like below:
<repositories>
<repository>
<id>in-project</id>
<name>In Project Repo</name>
<url>file://${project.parent.basedir}/lib</url>
</repository>
</repositories>
or
<properties>
<main.basedir>${project.parent.basedir}</main.basedir>
</properties>
but both also seem like not able to refer to parent folder and hit below error
Failure to find com.custom:custom-core:jar:1.7 in
file://${project.parent.basedir}/lib was cached in the local repository