5

我的项目需要使用自定义 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(这是根的另一个子模块)。因此,在构建插件之前,我必须进入库目录并安装它。随着我添加到插件中的每个“内部”依赖项,事情变得越来越糟。结果是本地存储库中的混乱和重建项目需要很多手动步骤。

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

4

1 回答 1

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>

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

mvn clean install -P build-plugin

mvn clean package -P build-project

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

于 2013-03-26T05:42:52.890 回答