在intellij idea中运行多模块项目时出错

bvn4nwqk  于 2021-07-05  发布在  Java
关注(0)|答案(1)|浏览(414)

我正在intellij idea终极版2020.2中做一个maven项目。这是一个多模块的项目。当我从一个模块运行一个类时,我得到一个错误,但是如果我从打包的jar运行,它运行良好。以下是应用程序的结构:

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

这是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>

databasetier模块中的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">
    <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>

“报告中的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">
    <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>

这是我得到的错误:
初始化引导层java.lang.layerinstantiationexception时出错:模块报告和模块databasetier中的包org.geek8080
进程已完成,退出代码为1

gzszwxb4

gzszwxb41#

这很能说明问题
包裹 org.Geek8080 在两个模块中 Reports 和模块 DatabaseTier 这样,当模块系统就位并且模块路径上有显式模块时,没有两个模块可以导出同一个包。这一变化是在朝着可靠的配置和更好的可访问性方向发展的情况下产生的。更多关于这些概念的阅读可以在模块系统的状态中找到。
作为解决方案,您可以将包重命名为 org.report.Geek8080 以及 org.database.Geek8080 分别在这些模块中。

相关问题