Can't use classes from different Maven modules

18,375

Your parent pom has packaging type pom, this is not jar. This is special aggregator module. All java code should be located in jar modules.

Module with packaging type pom cant generate artifacts like jar, war or ear.

Maven by Example - The Simple Parent Project

The parent project doesn’t create a JAR or a WAR like our previous projects; instead, it is simply a POM that refers to other Maven projects.

To use Classes from one module in other module use maven dependency.

Typical project looks like this:

* administration project (pom)
   * registration (jar)
   * portal (war)
Share:
18,375
amenoire
Author by

amenoire

Updated on June 23, 2022

Comments

  • amenoire
    amenoire almost 2 years

    Need to create a multi module maven project which consist of a registration module and main project. The problem is that it's impossible to use classes declared in different modules.

    e.g.: I have a ParentClaz in my parent's src/main/java dir and ChildClaz in child's src/main/java dir. Right now it's not possible to use neither ParentClaz in ChildClaz nor vice versa.

    The project's structure looks like this:

    +-- AdminPortal     <- parent root
       +-- registration <- child root
           -- pom.xml   <- child pom
       -- pom.xml       <- parent pom
    

    my AdminPortal POM:

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>AdminPortal</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>AdminPortal</name>
    <url>http://maven.apache.org</url>
    
    <modules>
        <module>registration</module>
    </modules>
    

    Here's child POM:

    <modelVersion>4.0.0</modelVersion>
    
    <parent>
        <groupId>com.example</groupId>
        <artifactId>AdminPortal</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    
    <groupId>com.example.AdminPortal</groupId>
    <artifactId>registration</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>registration</name>
    <url>http://maven.apache.org</url>
    

    How can this problem be solved?

  • amenoire
    amenoire over 10 years
    So you mean I should declare my main project as jar/war and make some AdminPortal-parent module, which includes AdminPortal and registration module?
  • MariuszS
    MariuszS over 10 years
    yes, your parent pom can have many modules like jar and war. All your source code should be located in modules
  • amenoire
    amenoire over 10 years
    Thank you, I'll give it a try.
  • MariuszS
    MariuszS over 10 years
    The problem is code located inside parent pom module :) You cant attach source code from pom to jar module.
  • amenoire
    amenoire over 10 years
    Sure, I will mark it as a solution some minutes later (system doesn't let to choose the right answer faster then 10-15 minutes)
  • MariuszS
    MariuszS over 10 years
    You can put code in parent as OP, but this is useless ofcours :) Read the question: I have a ParentClaz in my parent's src/main/java dir and ChildClaz in child's src/main/java dir.