如何在同一个项目中组合库代码和maven插件?

时间:2009-05-20 19:02:13

标签: maven-2 maven-plugin

我可以创建一个可以作为依赖项包含在内的maven项目(引用内部的Java类)并作为插件执行吗?

我正在开发一个库来帮助在LAMP堆栈上托管GWT。对于有人使用它,他们需要扩展一些Java类(因此它必须是依赖项)并且他们需要调用maven插件(因此它需要是一个插件)。插件代码引用相同的Java类,因此如果它们是单独的项目,那么插件必须依赖于库。

按原样,我将库作为普通的maven项目,并将插件作为依赖于库的maven插件。这意味着要进行发布,我必须发布两个不同的工件,并且依赖项目必须更新两个工件的两个版本号。有一个项目真好。

3 个答案:

答案 0 :(得分:1)

如果你创建一个maven插件,它仍然有一个artifactId / groupId / version。没有理由不能在您的部分和您的部分中引用它们。另一方面,如果这很难看,为什么不只是使用您的主项目和maven插件项目所依赖的公共代码创建一个库?

编辑:

对不起,第二部分不清楚。查看复合maven项目,其中有一个顶级pom定义了许多子模块。在这种情况下,maven插件和公共库代码可以是生成单独工件的独立子代,但是您只需要从顶级执行一个版本号和一个释放命令。我没有这样做,但有许多开源项目。它通常用作将测试代码放入单个模块中的习惯用法,可以被所有其他模块引用,而不会在任何可分发的jar中出现。

答案 1 :(得分:1)

通过以下方式做得更好

  1. jar的项目,Foo:Foo.jar
  2. 使用Foo的项目:Foo.jar作为 构建插件的依赖
  3. Maven parent project那个 建立1& 2
  4. 目录结构如下所示

    \project\pom.xml
    \project\foo\pom.xml
    \project\foo\src\main\java\foo.java
    \project\plugin\pom.xml
    \project\plugin\src\main\resources
    \project\plugin\src\main\java
    

    从\ project,你可以mvn clean package建立\project\foo\target\foo.jar\project\plugin\target\plugin.jar

    希望这有帮助。

答案 2 :(得分:0)

最佳做法是不做你的建议。这方面的例子包括PMD,BND,JUnit / TestNG等等 - 没有严肃的项目似乎将maven插件与适当的库打包在一起。

获得两种替代方法的一种方法是使用maven程序集为每个库和插件创建两个单独的maven项目,然后单独打包作为包含两者类的jar。