英文:
Getting error on running a multi-module project in IntelliJ IDEA
问题
我正在IntelliJ IDEA Ultimate 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>
<!-- ... 其他配置 ... -->
</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>
<!-- ... 其他依赖 ... -->
<!-- ... 构建配置 ... -->
</project>
Reports模块中的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>
<!-- ... 其他依赖 ... -->
<!-- ... 构建配置 ... -->
</project>
错误信息:
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
英文:
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
得分: 1
"它几乎是不言而喻的
> 在模块Reports
和模块DatabaseTier
中都有org.Geek8080
包
这样,有了模块系统并且在模块路径上有明确的模块,就不允许两个模块导出相同的包。这个改变是为了朝着可靠的配置和更好的可访问性方向迈进的。关于这些概念的更多信息可以在模块系统的状态中找到。
作为解决方案,您可以在这些模块中分别将包重命名为org.report.Geek8080
和org.database.Geek8080
。"
英文:
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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论