maven插件作为模块

时间:2013-02-23 12:38:22

标签: maven maven-plugin

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

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

root-project
    |---pom.xml
    |---my-library
    |       \---pom.xml
    |---my-maven-plugin
    |       \---pom.xml
    \---my-project
            \---pom.xml

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

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

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

1 个答案:

答案 0 :(得分:3)

我建议在你的情况下使用配置文件。您可以在 root-project 的pom.xml中考虑两个配置文件: build-plugin build-project 。模块聚合(&lt; modules&gt; list)将移动到这些配置文件。例如。 build-plugin 配置文件将包含:

<modules>
   <module>my-library</module> 
   <!-- + any other "internal" dependencies needed to build the plugin -->
   <module>my-maven-plugin</module>
</modules>

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

mvn clean install -P build-plugin

mvn clean package -P build-project

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