1

我可以制作一个可以作为依赖项包含(以引用其中的 Java 类)并作为插件执行的单个 maven 项目吗?

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

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

4

3 回答 3

1

您最好执行以下操作

  1. jar 的项目,Foo:Foo.jar
  2. 使用 Foo:Foo.jar 作为构建插件的依赖项的项目
  3. 构建1&2的Maven父项目

目录结构看起来像这样

\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

希望这可以帮助。

于 2009-05-21T19:18:54.000 回答
1

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

编辑:

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

于 2009-05-20T19:08:11.717 回答
0

最好的做法是不要按照你的建议去做。这方面的示例包括 PMD、BND、JUnit/TestNG 等 - 似乎没有严肃的项目将 maven 插件与库本身打包在一起。

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

于 2009-05-24T05:54:07.673 回答