我可以创建一个可以作为依赖项包含在内的maven项目(引用内部的Java类)并作为插件执行吗?
我正在开发一个库来帮助在LAMP堆栈上托管GWT。对于有人使用它,他们需要扩展一些Java类(因此它必须是依赖项)并且他们需要调用maven插件(因此它需要是一个插件)。插件代码引用相同的Java类,因此如果它们是单独的项目,那么插件必须依赖于库。
按原样,我将库作为普通的maven项目,并将插件作为依赖于库的maven插件。这意味着要进行发布,我必须发布两个不同的工件,并且依赖项目必须更新两个工件的两个版本号。有一个项目真好。
答案 0 :(得分:1)
如果你创建一个maven插件,它仍然有一个artifactId / groupId / version。没有理由不能在您的部分和您的部分中引用它们。另一方面,如果这很难看,为什么不只是使用您的主项目和maven插件项目所依赖的公共代码创建一个库?
编辑:
对不起,第二部分不清楚。查看复合maven项目,其中有一个顶级pom定义了许多子模块。在这种情况下,maven插件和公共库代码可以是生成单独工件的独立子代,但是您只需要从顶级执行一个版本号和一个释放命令。我没有这样做,但有许多开源项目。它通常用作将测试代码放入单个模块中的习惯用法,可以被所有其他模块引用,而不会在任何可分发的jar中出现。
答案 1 :(得分:1)
通过以下方式做得更好
目录结构如下所示
\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。