java - 在 IntelliJ IDEA 中运行多模块项目时出错
问题描述
我正在 IntelliJ IDEA Ultimate edition 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 初始化期间发生错误:模块 Reports 和模块 DatabaseTier 中的 Package org.Geek8080
进程以退出代码 1 结束
解决方案
它不言自明
org.Geek8080
在模块Reports
和模块中打包DatabaseTier
这样,有了适当的模块系统和模块路径上的显式模块,没有两个模块可以导出同一个包。这一变化是为了向可靠配置和更好的可访问性迈进。更多关于这些概念的信息可以在模块系统的状态中找到。
作为一种解决方案,您可以将这些包org.report.Geek8080
分别重命名org.database.Geek8080
为这些模块。
推荐阅读
- java - 具有 2 个过滤条件的 java 流
- python - 从其他函数调用函数
- ruby - 为什么'p'打印最后一个变量的值?
- c# - EF 通用存储库模式 - 插入带有子实体的根实体时出现插入/创建方法问题
- reactjs - 反应 HTML 表格
- image-processing - 反向转换 ImageDataGenerator Keras
- android - 更改 Camera.Parameter 时颜色的随机变化
- java - 如何在文本字符串中验证卡 PAN?
- android - Firebase 数据库查询:返回最新添加的对象,其中子对象具有值
- php - PHP mysql查询中的错误