Maven插件作为多模块项目中的依赖项

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Maven插件作为多模块项目中的依赖项相关的知识,希望对你有一定的参考价值。

我遇到a multi-module project的问题,其中一个模块是基于注释的maven-plugin:https://github.com/fommil/netlib-java/

基本上,mvn compile第一次失败,然后当我做第二次mvn compile时成功。

如果我这样做,它也可以正常工作

mvn -pl generator compile
mvn compile

我希望构建能够一次成功,这样我就可以构建和发布所有模块。

答案

我快速浏览了一下你的项目并发现,“generator”插件是multimodule项目的一部分,它在这个项目中被使用(具有相同的版本)。这不是合法用途!您必须从反应堆外部提供所有必需的插件!

原因是,maven试图填充反应堆并事先确定所有必需的插件。然后它开始构建。如果生成器插件是项目的一部分,Maven无法执行此操作。

Stephen Connolly在博客文章中写到:Maven and the "Install" Hack

心连心, - 马丁

另一答案

(我将此作为答案,因为它不适合评论区域)

好吧,我从Github下载了11fe0f5版本,并在父/根文件夹上尝试了mvn clean install,看看会发生什么,我收到了这个错误:

[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 6.444s
[INFO] Finished at: Mon Jun 24 20:00:30 BRT 2013
[INFO] Final Memory: 20M/350M
[INFO] ------------------------------------------------------------------------
[ERROR] Could not find goal 'interface' in plugin org.netlib:generator:1.0-SNAPSHOT among available goals -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoNotFoundException

这让我质疑接口目标是否真的存在于生成器插件中,以及是否正在生成目标描述符。所以看一下生成器模块pom.xml我找不到任何maven-plugin配置来生成插件模块,所以我将你的maven-plugin-plugin配置更改为:

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-plugin-plugin</artifactId>
            <version>3.2</version>
            <configuration>
                <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
            </configuration>
            <executions>
                <execution>
                    <id>mojo-descriptor</id>
                    <phase>process-classes</phase>
                    <goals>
                        <goal>descriptor</goal>
                    </goals>
                </execution>
            </executions>
</plugin>

并且它将接口目标添加到生成器插件中,我现在能够从根文件夹安装就好了。

mvn clean install部分输出:

Tests run: 4, Failures: 0, Errors: 0, Skipped: 0

[INFO]
[INFO] --- maven-jar-plugin:2.3.2:jar (default-jar) @ netlib ---
[INFO] Building jar: C:ebook
etlib-java-11fe0f502496276be5536003eaacbde363317c
b1
etlib	arget
etlib-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ netlib ---
[INFO] Installing C:ebook
etlib-java-11fe0f502496276be5536003eaacbde363317cb1
netlib	arget
etlib-1.0-SNAPSHOT.jar to C:Usersoltra01.m2
epositoryorg
et
lib
etlib1.0-SNAPSHOT
etlib-1.0-SNAPSHOT.jar
[INFO] Installing C:ebook
etlib-java-11fe0f502496276be5536003eaacbde363317cb1
netlibpom.xml to C:Usersoltra01.m2
epositoryorg
etlib
etlib1.0-SNAPSHOT

etlib-1.0-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] parent ............................................ SUCCESS [0.478s]
[INFO] generator ......................................... SUCCESS [6.172s]
[INFO] netlib ............................................ SUCCESS [1:05.310s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1:12.105s
[INFO] Finished at: Mon Jun 24 19:55:08 BRT 2013
[INFO] Final Memory: 27M/491M
[INFO] ------------------------------------------------------------------------

您使用什么maven命令/目标来解决问题中的错误?您是否尝试删除整个存储库? (也许你已经安装了一个混乱的发电机版本)

以上是关于Maven插件作为多模块项目中的依赖项的主要内容,如果未能解决你的问题,请参考以下文章

Maven SonarQube多模块

Intellij IDEA Maven 插件 - 管理依赖项

在多模块 maven 项目中的模块之间共享 src/test 类

多模块本地 jar 依赖项 - Jenkins Pipeline

如何在不使用任何插件的情况下将非 maven 依赖项安装到您的 maven 项目中? [复制]

Maven 遮罩插件不会遮蔽工件中的依赖项