How to make one module depend on another module artifact?

88,276

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.

Share:
88,276
David
Author by

David

Updated on July 05, 2022

Comments

  • David
    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 create b.jar (stays in B/target/jars not in B/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 create b.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 files

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