我的项目需要使用自定义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),然后在我的项目构建期间使用它?
答案 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脚本就可以完成这项工作......