Intellij Idea 在多模块Maven项目中公共依赖模块导致找不到主类错误”

cigdeys3  于 2024-01-05  发布在  Maven
关注(0)|答案(1)|浏览(234)

我遇到了一个多模块Maven项目的问题。当我在IntelliJ IDEA中运行应用程序时,一切都编译并顺利运行。但是,当我试图使用Maven Package 器从终端使用命令./mvnw clean install -DskipTests构建项目时,我遇到了一个编译错误,表明没有一个包含在公共模块中的类可以找到。下面是错误输出的一部分:
x1c 0d1x的数据

  1. [INFO] Reactor Summary for event_driven_design_eshop 0.0.1-SNAPSHOT:
  2. [INFO]
  3. [INFO] event_driven_design_eshop .......................... SUCCESS [ 1.136 s]
  4. [INFO] api_gateway ........................................ SUCCESS [ 2.227 s]
  5. [INFO] common ............................................. SUCCESS [ 1.174 s]
  6. [INFO] eshop-core ......................................... SUCCESS [ 0.173 s]
  7. [INFO] order_service ...................................... FAILURE [ 0.708 s]
  8. [INFO] product_service .................................... SKIPPED
  9. [INFO] user-service ....................................... SKIPPED
  10. [INFO] payment-service .................................... SKIPPED
  11. [INFO] shipping-service ................................... SKIPPED
  12. [INFO] discovery_server ................................... SKIPPED
  13. [INFO] ------------------------------------------------------------------------
  14. [INFO] BUILD FAILURE
  15. [INFO] ------------------------------------------------------------------------
  16. [INFO] Total time: 5.855 s
  17. [INFO] Finished at: 2023-11-13T19:32:08+01:00
  18. [INFO] ------------------------------------------------------------------------
  19. [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:
  20. [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
  21. [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
  22. [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
  23. ....

字符串
所以在通用模块中的所有类都找不到。
在此之后,如果我尝试在IDE中运行应用程序,我会收到一个错误,指出在eshop_module的子模块列表中找不到第一个模块的主类。
假设这是eshop_module/pom. xml文件中的模块列表,

  1. <modules>
  2. <module>order_service</module>
  3. <module>product_service</module>
  4. <module>user_service</module>
  5. <module>payment_service</module>
  6. <module>shipping_service</module>
  7. </modules>


在运行IntelliJ中的服务后,无法找到order_service的主类。如果我重新排列模块顺序,使product_service首先列出,product_service主类也会出现同样的问题。
作为一个临时解决方案,我发现更改根包名称(在遇到问题的服务中,例如order_service)可以让我再次在IDE中运行项目。但是,如果我随后尝试在终端中使用Maven运行它,错误就会再次出现,需要重复相同的过程来恢复IntelliJ中的功能。
此问题在每个服务中持续存在,具体取决于通用模块。
这是根项目的pom文件:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>3.1.4</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.jchaaban</groupId>
  12. <artifactId>event_driven_design_eshop</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <packaging>pom</packaging>
  15. <name>event_driven_design_eshop</name>
  16. <description>event_driven_design_eshop</description>
  17. <properties>
  18. <java.version>17</java.version>
  19. </properties>
  20. <modules>
  21. <module>api_gateway</module>
  22. <module>eshop_core</module>
  23. <module>discovery_server</module>
  24. <module>common</module>
  25. </modules>
  26. <dependencies>
  27. <dependency>
  28. <groupId>org.springframework.boot</groupId>
  29. <artifactId>spring-boot-starter-web</artifactId>
  30. </dependency>
  31. <dependency>
  32. <groupId>org.projectlombok</groupId>
  33. <artifactId>lombok</artifactId>
  34. <optional>true</optional>
  35. </dependency>
  36. <dependency>
  37. <groupId>org.springframework.boot</groupId>
  38. <artifactId>spring-boot-starter-test</artifactId>
  39. <scope>test</scope>
  40. </dependency>
  41. </dependencies>
  42. <build>
  43. <plugins>
  44. <plugin>
  45. <groupId>org.springframework.boot</groupId>
  46. <artifactId>spring-boot-maven-plugin</artifactId>
  47. <configuration>
  48. <excludes>
  49. <exclude>
  50. <groupId>org.projectlombok</groupId>
  51. <artifactId>lombok</artifactId>
  52. </exclude>
  53. </excludes>
  54. </configuration>
  55. </plugin>
  56. </plugins>
  57. </build>
  58. </project>


这是公共模块的pom.xml文件,它是eshop_core的依赖项,因此它将是eshop_core的每个子模块的依赖项:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>com.jchaaban</groupId>
  7. <artifactId>event_driven_design_eshop</artifactId>
  8. <version>0.0.1-SNAPSHOT</version>
  9. </parent>
  10. <artifactId>common</artifactId>
  11. <version>0.0.1-SNAPSHOT</version>
  12. <name>common</name>
  13. <description>common</description>
  14. <dependencies>
  15. <dependency>
  16. <groupId>org.axonframework</groupId>
  17. <artifactId>axon-spring-boot-starter</artifactId>
  18. <version>4.9.0</version>
  19. </dependency>
  20. </dependencies>
  21. <build>
  22. <plugins>
  23. <plugin>
  24. <groupId>org.springframework.boot</groupId>
  25. <artifactId>spring-boot-maven-plugin</artifactId>
  26. </plugin>
  27. </plugins>
  28. </build>
  29. </project>


这是eshop_core的pom文件,它是根项目的子模块,也是所有其他模块的父模块:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>com.jchaaban</groupId>
  7. <artifactId>event_driven_design_eshop</artifactId>
  8. <version>0.0.1-SNAPSHOT</version>
  9. </parent>
  10. <modules>
  11. <module>order_service</module>
  12. <module>product_service</module>
  13. <module>user_service</module>
  14. <module>payment_service</module>
  15. <module>shipping_service</module>
  16. </modules>
  17. <artifactId>eshop_core</artifactId>
  18. <version>0.0.1-SNAPSHOT</version>
  19. <name>eshop-core</name>
  20. <description>eshop-core</description>
  21. <packaging>pom</packaging>
  22. <properties>
  23. <java.version>17</java.version>
  24. <spring-cloud.version>2022.0.4</spring-cloud.version>
  25. </properties>
  26. <dependencies>
  27. <dependency>
  28. <groupId>org.springframework.cloud</groupId>
  29. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  30. </dependency>
  31. <dependency>
  32. <groupId>org.axonframework</groupId>
  33. <artifactId>axon-spring-boot-starter</artifactId>
  34. <version>4.9.0</version>
  35. </dependency>
  36. <dependency>
  37. <groupId>org.springframework.boot</groupId>
  38. <artifactId>spring-boot-starter-data-jpa</artifactId>
  39. </dependency>
  40. <dependency>
  41. <groupId>com.google.guava</groupId>
  42. <artifactId>guava</artifactId>
  43. <version>32.1.3-jre</version>
  44. </dependency>
  45. <dependency>
  46. <groupId>org.postgresql</groupId>
  47. <artifactId>postgresql</artifactId>
  48. <version>42.6.0</version>
  49. </dependency>
  50. <dependency>
  51. <groupId>com.jchaaban</groupId>
  52. <artifactId>common</artifactId>
  53. <version>0.0.1-SNAPSHOT</version>
  54. </dependency>
  55. </dependencies>
  56. <dependencyManagement>
  57. <dependencies>
  58. <dependency>
  59. <groupId>org.springframework.cloud</groupId>
  60. <artifactId>spring-cloud-dependencies</artifactId>
  61. <version>${spring-cloud.version}</version>
  62. <type>pom</type>
  63. <scope>import</scope>
  64. </dependency>
  65. </dependencies>
  66. </dependencyManagement>
  67. <build>
  68. <plugins>
  69. <plugin>
  70. <groupId>org.springframework.boot</groupId>
  71. <artifactId>spring-boot-maven-plugin</artifactId>
  72. </plugin>
  73. </plugins>
  74. </build>
  75. </project>


现在eshop_core、order_service的子模块:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>com.jchaaban</groupId>
  7. <artifactId>eshop_core</artifactId>
  8. <version>0.0.1-SNAPSHOT</version>
  9. </parent>
  10. <artifactId>order_service</artifactId>
  11. <version>0.0.1-SNAPSHOT</version>
  12. <name>order_service</name>
  13. <description>order_service</description>
  14. <dependencies>
  15. <dependency>
  16. <groupId>org.hdrhistogram</groupId>
  17. <artifactId>HdrHistogram</artifactId>
  18. <version>2.1.12</version>
  19. <scope>compile</scope>
  20. </dependency>
  21. </dependencies>
  22. <build>
  23. <plugins>
  24. <plugin>
  25. <groupId>org.springframework.boot</groupId>
  26. <artifactId>spring-boot-maven-plugin</artifactId>
  27. </plugin>
  28. </plugins>
  29. </build>
  30. </project>


payment_service:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>com.jchaaban</groupId>
  7. <artifactId>eshop_core</artifactId>
  8. <version>0.0.1-SNAPSHOT</version>
  9. </parent>
  10. <artifactId>payment_service</artifactId>
  11. <version>0.0.1-SNAPSHOT</version>
  12. <name>payment-service</name>
  13. <description>payment-service</description>
  14. <build>
  15. <plugins>
  16. <plugin>
  17. <groupId>org.springframework.boot</groupId>
  18. <artifactId>spring-boot-maven-plugin</artifactId>
  19. </plugin>
  20. </plugins>
  21. </build>
  22. </project>


产品服务:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>com.jchaaban</groupId>
  7. <artifactId>eshop_core</artifactId>
  8. <version>0.0.1-SNAPSHOT</version>
  9. </parent>
  10. <artifactId>product_service</artifactId>
  11. <version>0.0.1-SNAPSHOT</version>
  12. <name>product_service</name>
  13. <description>product_service</description>
  14. <build>
  15. <plugins>
  16. <plugin>
  17. <groupId>org.springframework.boot</groupId>
  18. <artifactId>spring-boot-maven-plugin</artifactId>
  19. </plugin>
  20. </plugins>
  21. </build>
  22. </project>


shipping_service:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>com.jchaaban</groupId>
  7. <artifactId>eshop_core</artifactId>
  8. <version>0.0.1-SNAPSHOT</version>
  9. </parent>
  10. <groupId>com.example</groupId>
  11. <artifactId>shipping_service</artifactId>
  12. <version>0.0.1-SNAPSHOT</version>
  13. <name>shipping-service</name>
  14. <description>shipping-service</description>
  15. <properties>
  16. <java.version>17</java.version>
  17. </properties>
  18. <build>
  19. <plugins>
  20. <plugin>
  21. <groupId>org.springframework.boot</groupId>
  22. <artifactId>spring-boot-maven-plugin</artifactId>
  23. </plugin>
  24. </plugins>
  25. </build>
  26. </project>


用户服务:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>com.jchaaban</groupId>
  7. <artifactId>eshop_core</artifactId>
  8. <version>0.0.1-SNAPSHOT</version>
  9. </parent>
  10. <artifactId>user_service</artifactId>
  11. <version>0.0.1-SNAPSHOT</version>
  12. <name>user-service</name>
  13. <description>user-service</description>
  14. <build>
  15. <plugins>
  16. <plugin>
  17. <groupId>org.springframework.boot</groupId>
  18. <artifactId>spring-boot-maven-plugin</artifactId>
  19. </plugin>
  20. </plugins>
  21. </build>
  22. </project>


这个错误有什么具体原因吗?

qf9go6mv

qf9go6mv1#

我不确定,但是如果你像库项目一样使用这个模块,你必须告诉构建系统不要试图为这些项目(order_service和product_service)构建一个可执行的jar。为此,你必须从这些模块(pom)中删除以下块:

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.springframework.boot</groupId>
  5. <artifactId>spring-boot-maven-plugin</artifactId>
  6. </plugin>
  7. </plugins>
  8. </build>

字符串
参考:https://spring.io/guides/gs/multi-module/

相关问题