我遇到了一个多模块Maven项目的问题。当我在IntelliJ IDEA中运行应用程序时,一切都编译并顺利运行。但是,当我试图使用Maven Package 器从终端使用命令./mvnw clean install -DskipTests构建项目时,我遇到了一个编译错误,表明没有一个包含在公共模块中的类可以找到。下面是错误输出的一部分:
x1c 0d1x的数据
[INFO] Reactor Summary for event_driven_design_eshop 0.0.1-SNAPSHOT:
[INFO]
[INFO] event_driven_design_eshop .......................... SUCCESS [ 1.136 s]
[INFO] api_gateway ........................................ SUCCESS [ 2.227 s]
[INFO] common ............................................. SUCCESS [ 1.174 s]
[INFO] eshop-core ......................................... SUCCESS [ 0.173 s]
[INFO] order_service ...................................... FAILURE [ 0.708 s]
[INFO] product_service .................................... SKIPPED
[INFO] user-service ....................................... SKIPPED
[INFO] payment-service .................................... SKIPPED
[INFO] shipping-service ................................... SKIPPED
[INFO] discovery_server ................................... SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.855 s
[INFO] Finished at: 2023-11-13T19:32:08+01:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.11.0:compile (default-compile) on project order_service: Compilation failure: Compilation failure:
[ERROR] /Users/jchaaban/IdeaProjects/event_driven_design_eshop/eshop_core/order_service/src/main/java/com/jchaaban/orders_service/handler/query/OrderFetchingHandler.java:[3,33] package com.jchaaban.common.query does not exist
[ERROR] /Users/jchaaban/IdeaProjects/event_driven_design_eshop/eshop_core/order_service/src/main/java/com/jchaaban/orders_service/repository/OrderEntity.java:[3,33] package com.jchaaban.common.model does not exist
[ERROR] /Users/jchaaban/IdeaProjects/event_driven_design_eshop/eshop_core/order_service/src/main/java/com/jchaaban/orders_service/handler/query/OrderFetchingHandler.java:[26,36] cannot find symbol
....
字符串
所以在通用模块中的所有类都找不到。
在此之后,如果我尝试在IDE中运行应用程序,我会收到一个错误,指出在eshop_module的子模块列表中找不到第一个模块的主类。
假设这是eshop_module/pom. xml文件中的模块列表,
<modules>
<module>order_service</module>
<module>product_service</module>
<module>user_service</module>
<module>payment_service</module>
<module>shipping_service</module>
</modules>
型
在运行IntelliJ中的服务后,无法找到order_service的主类。如果我重新排列模块顺序,使product_service首先列出,product_service主类也会出现同样的问题。
作为一个临时解决方案,我发现更改根包名称(在遇到问题的服务中,例如order_service)可以让我再次在IDE中运行项目。但是,如果我随后尝试在终端中使用Maven运行它,错误就会再次出现,需要重复相同的过程来恢复IntelliJ中的功能。
此问题在每个服务中持续存在,具体取决于通用模块。
这是根项目的pom文件:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.jchaaban</groupId>
<artifactId>event_driven_design_eshop</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>event_driven_design_eshop</name>
<description>event_driven_design_eshop</description>
<properties>
<java.version>17</java.version>
</properties>
<modules>
<module>api_gateway</module>
<module>eshop_core</module>
<module>discovery_server</module>
<module>common</module>
</modules>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
型
这是公共模块的pom.xml文件,它是eshop_core的依赖项,因此它将是eshop_core的每个子模块的依赖项:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.jchaaban</groupId>
<artifactId>event_driven_design_eshop</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>common</name>
<description>common</description>
<dependencies>
<dependency>
<groupId>org.axonframework</groupId>
<artifactId>axon-spring-boot-starter</artifactId>
<version>4.9.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
型
这是eshop_core的pom文件,它是根项目的子模块,也是所有其他模块的父模块:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.jchaaban</groupId>
<artifactId>event_driven_design_eshop</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modules>
<module>order_service</module>
<module>product_service</module>
<module>user_service</module>
<module>payment_service</module>
<module>shipping_service</module>
</modules>
<artifactId>eshop_core</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eshop-core</name>
<description>eshop-core</description>
<packaging>pom</packaging>
<properties>
<java.version>17</java.version>
<spring-cloud.version>2022.0.4</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.axonframework</groupId>
<artifactId>axon-spring-boot-starter</artifactId>
<version>4.9.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>32.1.3-jre</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.6.0</version>
</dependency>
<dependency>
<groupId>com.jchaaban</groupId>
<artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
型
现在eshop_core、order_service的子模块:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.jchaaban</groupId>
<artifactId>eshop_core</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>order_service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>order_service</name>
<description>order_service</description>
<dependencies>
<dependency>
<groupId>org.hdrhistogram</groupId>
<artifactId>HdrHistogram</artifactId>
<version>2.1.12</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
型
payment_service:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.jchaaban</groupId>
<artifactId>eshop_core</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>payment_service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>payment-service</name>
<description>payment-service</description>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
型
产品服务:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.jchaaban</groupId>
<artifactId>eshop_core</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>product_service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>product_service</name>
<description>product_service</description>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
型
shipping_service:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.jchaaban</groupId>
<artifactId>eshop_core</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.example</groupId>
<artifactId>shipping_service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>shipping-service</name>
<description>shipping-service</description>
<properties>
<java.version>17</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
型
用户服务:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.jchaaban</groupId>
<artifactId>eshop_core</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>user_service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>user-service</name>
<description>user-service</description>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
型
这个错误有什么具体原因吗?
1条答案
按热度按时间qf9go6mv1#
我不确定,但是如果你像库项目一样使用这个模块,你必须告诉构建系统不要试图为这些项目(order_service和product_service)构建一个可执行的jar。为此,你必须从这些模块(pom)中删除以下块:
字符串
参考:https://spring.io/guides/gs/multi-module/