2013-02-23 110 views
3

我的项目需要使用自定义的Maven插件,我正在寻找简单的方式来构建它,最好不要搞乱本地存储库。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),并在以后在项目构建过程中使用它?

回答

2

我会建议在您的情况下使用配置文件。您可以考虑根项目的pom.xml中的两个配置文件:构建插件构建项目。模块聚合(<模块>列表)将移动到这些配置文件。例如。在集结插件轮廓将包含:

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

同样,建设项目轮廓将包含建立我的项目所需的模块列表。然后,

MVN全新安装-P集结插件

MVN清洁套装-P建设项目

将是你的命令调用的我,Maven的插件构建my-project。这两个命令将从根项目的目录执行。如果你需要在大部分时间顺序运行它们,一个简单的shell脚本可以完成这项工作......

+0

刚看了一下项目,我有这个问题和......宾果,这正是我最终决定解决问题的方式:)我希望更多的自动解决方案,但缺乏其他答案证明这是最好的方法 - 所以我接受你的回答:) – 2013-03-27 20:13:59