I'm trying to set up a multi-module Maven project, and the inter-module dependencies are apparently not being set up correctly.
I have:
<modules> <module>commons</module> <module>storage</module> </modules>
in the parent POM (which has a packaging-type pom) and then subdirectories commons/
and storage/
which define JAR poms with the same name.
Storage depends on Commons.
In the main (master) directory, I run mvn dependency:tree
and see:
[INFO] Building system [INFO] task-segment: [dependency:tree] [INFO] ------------------------------------------------------------------------ [INFO] [dependency:tree {execution: default-cli}] [INFO] domain:system:pom:1.0-SNAPSHOT [INFO] \- junit:junit:jar:3.8.1:test [INFO] ------------------------------------------------------------------------ [INFO] Building commons [INFO] task-segment: [dependency:tree] [INFO] ------------------------------------------------------------------------ [INFO] [dependency:tree {execution: default-cli}] ...correct tree... [INFO] ------------------------------------------------------------------------ [INFO] Building storage [INFO] task-segment: [dependency:tree] [INFO] ------------------------------------------------------------------------ Downloading: http://my.repo/artifactory/repo/domain/commons/1.0-SNAPSHOT/commons-1.0-SNAPSHOT.jar [INFO] Unable to find resource 'domain:commons:jar:1.0-SNAPSHOT' in repository my.repo (http://my.repo/artifactory/repo) [INFO] ------------------------------------------------------------------------ [ERROR] BUILD ERROR [INFO] ------------------------------------------------------------------------ [INFO] Failed to resolve artifact. Missing: ---------- 1) domain:commons:jar:1.0-SNAPSHOT
Why does the dependency on "commons" fail, even though the reactor has obviously seen it because it successfully processes its dependency tree? It should definitely not be going to the 'net to find it as it's right there...
The pom for storage:
<?xml version="1.0" encoding="UTF-8"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <packaging>jar</packaging> <parent> <artifactId>system</artifactId> <groupId>domain</groupId> <version>1.0-SNAPSHOT</version> </parent> <groupId>domain</groupId> <artifactId>storage</artifactId> <name>storage</name> <url>http://maven.apache.org</url> <dependencies> <!-- module dependencies --> <dependency> <groupId>domain</groupId> <artifactId>commons</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!-- other dependencies --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
Thanks for any suggestions!
(Edit)
To clarify, what I am looking for here is this: I don't want to have to install module X to build module Y which depends on X, given that both are modules referenced from the same parent POM. This makes intuitive sense to me that if I have two things in the same source tree, I shouldn't have to install intermediate products to continue the build. Hopefully my thinking makes some sense here...
How to get the Maven Dependency Tree of a Project. We can run mvn dependency:tree command in the terminal to print the project dependency tree. For our example, I will be using the Mockito Tutorial project. You can download the project from the GitHub repository.
A project's dependency tree can be filtered to locate specific dependencies. For example, to find out why Velocity is being used by the Maven Dependency Plugin, we can execute the following in the project's directory: mvn dependency:tree -Dincludes=velocity:velocity.
As discussed in this maven mailing list thread, the dependency:tree goal by itself will look things up in the repository rather than the reactor. You can work around this by mvn installing, as previously suggested, or doing something less onerous that invokes the reactor, such as
mvn compile dependency:tree
Works for me.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With