Java Maven mulit模块依赖项,-包不存在(Maven插件类加载器)

Java Maven mulit模块依赖项,-包不存在(Maven插件类加载器),java,maven,multi-module,Java,Maven,Multi Module,我有一个具有以下设置的多模块maven项目 /root/pom.xml /root/core/proj1/pom.xml /root/core/proj2/pom.xml /root/support /root/support/proj3/pom.xml 母pom如下所示,仅包括相关部分 <groupId>com.mycompany.abc</groupId> <artifactId>platform</artifactId> <versi

我有一个具有以下设置的多模块maven项目

/root/pom.xml
/root/core/proj1/pom.xml
/root/core/proj2/pom.xml
/root/support
/root/support/proj3/pom.xml
母pom如下所示,仅包括相关部分

<groupId>com.mycompany.abc</groupId>
<artifactId>platform</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<name>platform-parent</name>

<modules>
    <module>support/proj3-service</module>
    <module>core/proj1-service</module>
    <module>core/proj2-service</module>
</modules>
proj1/pom.xml如下:

<artifactId>proj1</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<parent>
    <groupId>com.mycompany.abc</groupId>
    <artifactId>platform</artifactId>
    <version>1.0</version>
    <relativePath>../../pom.xml</relativePath>
</parent>
proj2/pom.xml如下所示:

<artifactId>proj2</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<parent>
    <groupId>com.mycompany.abc</groupId>
    <artifactId>platform</artifactId>
    <version>1.0</version>
    <relativePath>../../pom.xml</relativePath>
</parent>
现在,在proj3/pom.xml中,我添加了proj1和proj2作为依赖项

<artifactId>proj3</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<parent>
    <groupId>com.mycompany.abc</groupId>
    <artifactId>platform</artifactId>
    <version>1.0</version>
    <relativePath>../../pom.xml</relativePath>
</parent>
<dependencies>
    <dependency>
        <groupId>com.mycompany.abc</groupId>
        <artifactId>proj1</artifactId>
        <version>1.0</version>
     </dependency>
    <dependency>
        <groupId>com.mycompany.abc</groupId>
        <artifactId>proj2</artifactId>
        <version>1.0</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
       <plugin>
       ...
       </plugin>
     </plugins>
  </build>
项目3中的插件希望查询属于proj1和proj2的类

根据插件类加载器文档, 请注意,插件类加载器既不包含当前项目的依赖项,也不包含其生成输出。 执行构建插件时,线程的上下文类加载器设置为插件类加载器

有没有办法让插件类加载器知道其他模块

问题出在父pom的modules标记中。 而不是:

<modules>
    <module>support/proj3-service</module>
    <module>core/proj1-service</module>
    <module>core/proj2-service</module>
</modules>
应该是:

<modules>
    <module>support/proj3</module>
    <module>core/proj1</module>
    <module>core/proj2</module>
</modules>
问题出在父pom的modules标记中。 而不是:

<modules>
    <module>support/proj3-service</module>
    <module>core/proj1-service</module>
    <module>core/proj2-service</module>
</modules>
应该是:

<modules>
    <module>support/proj3</module>
    <module>core/proj1</module>
    <module>core/proj2</module>
</modules>

如果您想为maven插件添加其他要使用/查看的.jar,可以向插件添加依赖项

诸如此类:

<build><plugins><plugin>
<!-- other plugin option -->
<dependencies>
  <dependency>
    <groupId>com.mycompany.abc</groupId>
    <artifactId>proj1</artifactId>
    <version>1.0</version>
 </dependency>
 <dependency>
    <groupId>com.mycompany.abc</groupId>
    <artifactId>proj2</artifactId>
    <version>1.0</version>
 </dependency>
</dependencies>
</plugin></plugins></build>

如果您想为maven插件添加其他要使用/查看的.jar,可以向插件添加依赖项

诸如此类:

<build><plugins><plugin>
<!-- other plugin option -->
<dependencies>
  <dependency>
    <groupId>com.mycompany.abc</groupId>
    <artifactId>proj1</artifactId>
    <version>1.0</version>
 </dependency>
 <dependency>
    <groupId>com.mycompany.abc</groupId>
    <artifactId>proj2</artifactId>
    <version>1.0</version>
 </dependency>
</dependencies>
</plugin></plugins></build>


你能发布完整的错误输出吗?@khmarbaise edited你应该深入研究错误消息中提到的模块:on project docs generation:org.apache.maven.lifecycle.internal.MojoExecutor.executeMojoExecutor.java:212…除此之外。这不是完整的错误输出…还有更多…提供了很好的提示。@khmarbaise感谢这里的提示。我非常专注于我建立一个多模块项目的方式。我已经更新了问题。要么你因为误解了你真正的问题而问不清楚你的问题?和/或我错过了一些东西,但在maven中,您试图实现的似乎是最基本的一个maven项目,包含多个模块,其中一个模块依赖于其他模块。而且我不明白你为什么在模块中添加后缀服务,这对我来说没有多大意义,可能是根本原因之一。你能发布完整的错误输出吗…@khmarbaise edited你应该深入研究错误消息中提到的模块:on project docs generation:编译失败org.apache.maven.lifecycle.internal.MojoExecutor.executeMojoExecutor.java:212…除此之外。这不是完整的错误输出…还有更多…提供了很好的提示。@khmarbaise感谢这里的提示。我非常专注于我建立一个多模块项目的方式。我已经更新了问题。要么你因为误解了你真正的问题而问不清楚你的问题?和/或我错过了一些东西,但在maven中,您试图实现的似乎是最基本的一个maven项目,包含多个模块,其中一个模块依赖于其他模块。此外,我不明白为什么要在模块中添加后缀服务,这对我来说没有多大意义,可能是根本原因之一。看看maven反应堆的机制。它是maven core的一部分。你至少试过我的建议了吗?maven reactor负责通过确定模块之间的依赖关系来确定构建顺序,但首先必须正确指定在何处找到模块。根据您在问题中提到的目录结构,没有名为proj3服务、proj2服务等的文件夹。因此,maven reactor将无法找到您的模块,构建将失败。如果还没有,试一下我的建议,让我们知道结果。我已经做了。问题在于plugin classloader无法查询Dependencies jars.Ok。您能否在第三个项目的pom.xml中提供错误日志和插件代码。插件类加载器无法从项目依赖项加载类。看看maven是如何在不同的maven组件之间抽象类加载器任务的。马文明白了。看看maven反应堆的机制。它是maven core的一部分。你至少试过我的建议了吗?maven reactor负责通过确定模块之间的依赖关系来确定构建顺序,但首先必须正确指定在何处找到模块。根据您在问题中提到的目录结构,没有名为proj3服务、proj2服务等的文件夹。因此,maven reactor将无法找到您的模块,构建将失败。如果还没有,试一下我的建议,让我们知道结果。我已经做了。问题在于plugin classloader无法查询Dependencies jars.Ok。您能否在第三个项目的pom.xml中提供错误日志和插件代码。插件类加载器无法从项目依赖项加载类。看看maven是如何抽象类加载器任务的 在不同的maven组件之间。