【问题标题】:How do I combine library code and a maven plugin in same project?如何在同一个项目中结合库代码和 maven 插件?
【发布时间】:2009-05-20 19:02:12
【问题描述】:

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

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

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

【问题讨论】:

    标签: maven-2 maven-plugin


    【解决方案1】:

    你最好做到以下几点

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

    目录结构如下所示

    \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】:

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

      编辑:

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

      【讨论】:

      • 我同意将通用代码放在单独的项目中,而不是丑陋的构建/自我引用。一方面,它保证您将始终拥有循环引用。
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2011-10-22
        • 1970-01-01
        • 2014-07-10
        • 2015-02-06
        • 1970-01-01
        • 2016-02-23
        • 2019-07-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多