所以基本上,我有一个多模块项目,例如
- ProjectA
|- Module1
|- Module2
ProjectA
的相关部分(我相信)pom.xml
是:
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyName</groupId>
<artifactId>ProjectA</artifactId>
<packaging>pom</packaging>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.1.RELEASE</version>
</parent>
<modules>
<module>Module1</module>
<module>Module2</module>
</modules>
模块 1 的pom.xml
是:
<parent>
<groupId>com.companyName</groupId>
<artifactId>ProjectA</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>Module1</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
依赖于模块 1 的模块 2 的pom.xml
如下:
<parent>
<groupId>com.companyName</groupId>
<artifactId>ProjectA</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>Module2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.companyName</groupId>
<artifactId>Module1</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
...
</dependencies>
我可以很好地构建和安装 Module1。我可以在模块 2 中从中导入类,但我无法使用以下命令编译模块 2:Could not find artifact com.companyName:ProjectA:pom:0.0.1-SNAPSHOT
同样,我正在构建另一个项目,项目B,它将具有模块3。在模块 3pom.xml
中:
<dependency>
<groupId>com.companyName.ProjectA</groupId>
<artifactId>Module1</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
但是,我无法将其导入我的.java文件中,因为com.companyName.ProjectA不可用,IntelliJ警告我。我做错了什么?我已经尝试了相关多模块项目问题中的几乎所有配置。谢谢!
更新:控制台输出已更改为:
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /Users/user/workspace/project-name/Module2/src/main/java/com/companyName/ProjectA/Module2/users/UsersDAO.java:[3,39] package com.companyName.ProjectA.Module1 does not exist
[ERROR] /Users/user/workspace/project-name/Module2/src/main/java/com/companyName/ProjectA/Module2/users/UsersDAO.java:[9,6] cannot find symbol...
更新:有趣的是,删除:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
从父项目 (ProjectA
) 使项目再次可构建。但是,我需要它(出于显而易见的原因)是否有解决方法?谢谢!
两个(或所有)项目都是 Spring Boot 项目。这不是常规的罐子,而是具有不同结构的可执行罐子。你不应该在另一个Spring Boot jar中包含Spring Boot jar。
如何应对此问题在参考指南的一节中进行了说明。
基本上,您需要为Module1显式配置 2 个工件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<classifier>exec</classifier>
</configuration>
</plugin>
</plugins>
</build>
或者,如果Module1甚至不是一个可执行应用程序,而只是一个库,请不要为此使用 Spring Boot Maven 插件。