maven插件作为模块

Mar*_*ski 5 maven-plugin maven

我的项目需要使用自定义Maven插件,我正在寻找简单的方法来构建它,最好不要弄乱本地存储库.

让我们考虑简单的项目树:

root-project
    |---pom.xml
    |---my-library
    |       \---pom.xml
    |---my-maven-plugin
    |       \---pom.xml
    \---my-project
            \---pom.xml
Run Code Online (Sandbox Code Playgroud)

root-project有三个子项目列在<modules>里面.最主要的是,my-project使用my-maven-plugin过程中它的建造过程,因此该插件必须先建.

我想做的是简单地运行:

root-project $ mvn package

这应my-maven-plugin首先构建并在构建期间使用它my-project.

不幸的是,这不起作用.Maven在"扫描项目......"阶段停止工作,并显示错误消息:

Unresolveable build extension: Plugin test:my-maven-plugin:1.0 or one of its dependencies could not be resolved: Could not find artifact test:my-maven-plugin:jar:1.0

如果我先做的话,它可以工作

$ cd my-maven-plugin
$ mvn install
$ cd ..
$ mvn package
Run Code Online (Sandbox Code Playgroud)

它看起来不太好.但是,真正的问题是插件依赖于它my-library(这是root的另一个子模块).因此,在构建插件之前,我必须输入库目录并进行安装.随着我添加到插件中的每个"内部"依赖性,事情变得越来越糟.结果是本地存储库中的混乱以及重建项目所需的许多手动步骤.

有没有办法说Maven它应该首先构建插件(使用deps),然后在我的项目构建期间使用它?

小智 3

我建议根据您的情况使用配置文件。您可以考虑root-project的 pom.xml 中的两个配置文件:build-pluginbuild-project。模块聚合(<modules>列表)将被移动到这些配置文件中。例如,构建插件配置文件将包含:

<modules>
   <module>my-library</module> 
   <!-- + any other "internal" dependencies needed to build the plugin -->
   <module>my-maven-plugin</module>
</modules>
Run Code Online (Sandbox Code Playgroud)

同样, build-project配置文件将包含构建my-project所需的模块列表。然后,

mvn clean install -P 构建插件

mvn clean package -P 构建项目

您的命令将分别调用my-maven-pluginmy-project的构建。这两个命令都将从root-project的目录执行。如果大多数时候您需要按顺序运行它们,一个简单的 shell 脚本就可以完成这项工作...