Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Maven doesn't recognize sibling modules when running mvn dependency:tree

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...

like image 665
Steven Schlansker Avatar asked Nov 04 '09 23:11

Steven Schlansker


People also ask

How do I run a Maven dependency tree?

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.

What will the mvn dependency tree command do?

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.


1 Answers

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.

like image 141
Don Willis Avatar answered Sep 20 '22 03:09

Don Willis