How to make one module depend on another module artifact?
Solution 1
Looks like it should work to me. But you might try mvn install
instead of mvn package
.
Solution 2
Try ${project.version}
e.g.
<dependency>
<groupId>AAA</groupId>
<artifactId>B</artifactId>
<version>${project.version}</version>
</dependency>
Solution 3
My question is how I can solve this problem?
Dependency resolution is done through the local repository so the canonical way to "solve" the problem is to run install
from A so that modules will get installed in the local repository.
Now, regarding the following comment
But if I go with install then c war file will also be installed. That one is not accepted in my current project".
Sure, I'm not on your project, I don't know all constraints and rules. But if you decide to use Maven, this is a totally ridiculous policy (seriously, WTF?) and using a system
scoped dependency is certainly not a good solution (more troubles later guaranteed). If this policy is real, better not use Maven in that case.
Solution 4
i have a solution: using the dependency with the scope=system
in C pom.xml
<dependency>
<groupId>AAA</groupId>
<artifactId>B</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>system</scope>
<systemPath>${basedir}\..\B\target\jars\b.jar</systemPath>
</dependency>
and in A pom.xml, put module B on the top like this
<modules>
<module>B</module>
<module>C</module>
</modules>
Solution 5
Doing mvn install only places the artifact into the local .m2 repository of the machine you're running the command on. How can that not be acceptable? I agree with Pascal. If you building A, there should be no reason that a the war is placed there.
On the other hand, if you're using Maven 2.2.x, take a look at the maven reactor plugin? This should help the crazy unacceptable cannot install C.war into your local .m2 repository policy for the current project.
David
Updated on July 05, 2022Comments
-
David almost 2 years
I have maven multiple-module project.
A: parent. B: child1. C: child2.
B will be packaged to get jar file and then c will use this jar file to compile the code.
In B, if I run
mvn package
, it will createb.jar
(stays inB/target/jars
not inB/target
-for another purpose).In C, I need to use that
b.jar
to compile the code.Now, from A, when I run:
mvn package
. First, I am successful to createb.jar
file for B.But when it come to C's compilation phase, it looks like C doesn't recognize
b.jar
in the classpath (the compilation gets errors because C's code can not import the class file from B).My question is: How can I solve this problem?
----------
Below
are the pom filesA: pom.xml <groupId>AAA</groupId> <artifactId>A</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>C</module> <module>B</module> </modules> B: pom.xml <groupId>AAA</groupId> <artifactId>B</artifactId> <packaging>jar</packaging> <version>0.0.1-SNAPSHOT</version> <parent> <artifactId>A</artifactId> <groupId>AAA</groupId> <version>0.0.1-SNAPSHOT</version> </parent> C: pom.xml <parent> <artifactId>A</artifactId> <groupId>AAA</groupId> <version>0.0.1-SNAPSHOT</version> </parent> <groupId>AAA</groupId> <artifactId>C</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>AAA</groupId> <artifactId>B</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> ....