Getting error on running a multi-module project in IntelliJ IDEA

Viewed 766

I am making a maven project in IntelliJ IDEA Ultimate edition 2020.2. It is a multi-module project. When I run a class from one of the module I get an error but it runs fine if I run from the packaged jar. Here is the Structure of application:

C:.
| pom.xml
|
+---DatabaseTier
|   |   pom.xml
|   |
|   +---src
|   |   \---main
|   |       +---java
|   |       |   |   module-info.java
|   |       |   |
|   |       |   \---org
|   |       |       \---Geek8080
|   |       |           |   DatabaseTest.java
|   |       |           |
|   |       |           \---service
|   |       |               \---database
|   |       |                   |   Database.java
|   |       |                   |
|   |       |                   \---entities
|   |       |                           JournalPage.java
|   |       |
|   |       \---resources
|   |               log4j2.xml
|   |               table.sql
|   |
|   \---target
|       +---classes
|       |   |   log4j2.xml
|       |   |   module-info.class
|       |   |   table.sql
|       |   |
|       |   \---org
|       |       \---Geek8080
|       |           |   DatabaseTest.class
|       |           |
|       |           \---service
|       |               \---database
|       |                   |   Database.class
|       |                   |
|       |                   \---entities
|       |                           JournalPage.class
|       |
|       \---generated-sources
|           \---annotations
\---Reports
    |   pom.xml
    |
    +---src
    |   +---main
    |   |   +---java
    |   |   |   |   module-info.java
    |   |   |   |
    |   |   |   \---org
    |   |   |       \---Geek8080
    |   |   |           |   ReportTest.java
    |   |   |           |
    |   |   |           \---service
    |   |   |               \---report
    |   |   |                       ExcelReports.java
    |   |   |                       PDFReports.java
    |   |   |
    |   |   \---resources
    |   |           log4j2.xml
    |   |           MTCORSVA.TTF
    |   |
    |   \---test
    |       \---java
    \---target
        +---classes
        |   |   log4j2.xml
        |   |   module-info.class
        |   |   MTCORSVA.TTF
        |   |
        |   \---org
        |       \---Geek8080
        |           |   ReportTest.class
        |           |
        |           \---service
        |               \---report
        |                       ExcelReports.class
        |                       PDFReports.class
        |
        \---generated-sources
            \---annotations

This is the main pom.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>org.Geek8080</groupId>
        <artifactId>Journal</artifactId>
        <packaging>pom</packaging>
        <version>1.0</version>
    
        <modules>
            <module>DatabaseTier</module>
            <module>Reports</module>
        </modules>
    
        <name>Journal Daily</name>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>11</maven.compiler.source>
            <maven.compiler.target>11</maven.compiler.target>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-api</artifactId>
                <version>2.13.3</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
                <version>2.13.3</version>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.0</version>
                    <configuration>
                        <source>11</source>
                        <target>11</target>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <version>3.1.1</version>
                    <executions>
                        <execution>
                            <id>copy-dependencies</id>
                            <phase>package</phase>
                            <goals>
                                <goal>copy-dependencies</goal>
                            </goals>
                            <configuration>
                                <outputDirectory>${project.build.directory}/lib</outputDirectory>
                                <overWriteReleases>false</overWriteReleases>
                                <overWriteSnapshots>false</overWriteSnapshots>
                                <overWriteIfNewer>true</overWriteIfNewer>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </project>

The pom.xml in DatabaseTier module:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>Journal</artifactId>
        <groupId>org.Geek8080</groupId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>DatabaseTier</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derby</artifactId>
            <version>10.15.2.0</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>org.Geek8080.DatabaseTest</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id> <!-- this is used for inheritance merges -->
                        <phase>package</phase> <!-- bind to the packaging phase -->
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>


</project>

The pom.xml in Reports module:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>Journal</artifactId>
        <groupId>org.Geek8080</groupId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>Reports</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.Geek8080</groupId>
            <artifactId>DatabaseTier</artifactId>
            <version>1.0</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.21</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>org.Geek8080.ReportTest</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id> <!-- this is used for inheritance merges -->
                        <phase>package</phase> <!-- bind to the packaging phase -->
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

This is the error I am getting:

Error occurred during initialization of boot layer java.lang.LayerInstantiationException: Package org.Geek8080 in both module Reports and module DatabaseTier

Process finished with exit code 1

1 Answers

It speaks for itself pretty much

Package org.Geek8080 in both module Reports and module DatabaseTier

such that with the module system in place and explicit modules on the modulepath, no two modules can export the same package. This change was brought in the light of moving towards reliable configuration and better accessibility. More to read about those concepts could be found in The State of the Module System.

As a solution, you can rename the packages to org.report.Geek8080 and org.database.Geek8080 respectively in those modules.

Related