在多模块项目中找不到工件

Has*_*ral 3 java spring maven spring-boot spring-boot-maven-plugin

所以基本上,我有一个多模块项目,例如

- ProjectA
  |- Module1
  |- Module2
Run Code Online (Sandbox Code Playgroud)

相关部分(我相信)pom.xmlProjectA方法是:

<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>
Run Code Online (Sandbox Code Playgroud)

pom.xml对于模块1是:

<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>
Run Code Online (Sandbox Code Playgroud)

pom.xml依赖于Module1的Module2的如下所示:

<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>
Run Code Online (Sandbox Code Playgroud)

我可以很好地构建和安装Module1。我可以在Module2中从中导入类,但是不能使用以下命令编译Module2:Could not find artifact com.companyName:ProjectA:pom:0.0.1-SNAPSHOT

同样,我正在构建另一个项目ProjectB,它将具有Module3。在Module3中pom.xml

<dependency>
    <groupId>com.companyName.ProjectA</groupId>
    <artifactId>Module1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

但是,由于com.companyName.ProjectA不可用,我无法将其导入到我的.java文件中,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...
Run Code Online (Sandbox Code Playgroud)

更新: 有趣的是,删除:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

来自父项目(ProjectA)的项目使该项目可再次构建。但是,我需要它(出于明显的原因)是否有解决方法?谢谢!

M. *_*num 5

两个(或全部)项目都是Spring Boot项目。不是常规jar,而是具有不同结构的可执行jar。您不应在另一个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>
Run Code Online (Sandbox Code Playgroud)

或者,如果Module1甚至不是可执行应用程序,而只是一个库,则不要为此使用Spring Boot Maven插件。