【问题标题】:Building a maven war overlay project with gradle使用 gradle 构建一个 Maven 战争覆盖项目
【发布时间】:2015-04-10 05:12:20
【问题描述】:

我想将一个 maven 项目集成到我的 gradle 构建过程中。尽管我成功地将 maven 项目(这是一个战争覆盖项目)转换为 gradle 项目,但这样做有几个缺点。首先,maven tomcat 插件可以轻松创建一个带有嵌入式 tomcat 实例的可运行 jar。我找不到可以完成这项工作的 gradle 插件。 为了解决这个问题,我看到了四种不同的方法,我想知道哪种方法最好,或者是否还有另一种可能性。

  1. 将 maven 项目转换为 gradle。如前所述,这可行,但我找不到使用这种方法创建带有嵌入式 tomcat 的 jar 的方法。
  2. maven 项目将有一个额外的 build.gradle,其中包含执行 maven 目标的任务(例如 ant.exec)
  3. 我的所有项目都使用 maven(对我来说不是一个真正的选择)
  4. 使用 maven 作为根项目并从 maven 执行 gradle 任务

还有其他想法或建议吗?

【问题讨论】:

    标签: maven gradle war embedded-tomcat-7


    【解决方案1】:

    你可以:

    1. 使用tomcat embedded 创建一个java 应用程序
    2. 使用 gradle shadow plugin 为 java 应用程序创建一个可执行的 über jar

    【讨论】:

    • 结合使用 org.scaldingspoon.gradle:gradle-waroverlay-plugin 和 gretty 插件找到了一个更简单的解决方案。现在我可以使用 gradle 构建我的 war-overlay 并创建一个包含 tomcat 服务器、war 文件和启动/停止脚本的存档。它不会生成可运行的 jar,但使用脚本很容易管理。
    【解决方案2】:

    经过一段时间的调查,我想自己回答这个问题。我认为在这种特殊情况下将 maven 项目转换为 gradle 项目并不是最好的方法。我决定使用第二种方法:

    war-overlay 项目仍然是一个 maven 项目,但我还在项目中添加了一个 gradle.build 文件。构建脚本如下所示:

    task mvnPackage(type:Exec) {
        commandLine "${mavenHome}/mvn", 'package'
    }
    
    task mvnClean(type: Exec) {
        commandLine "${mavenHome}/mvn", 'clean'
    }
    
    clean.dependsOn mvnClean
    
    assemble.dependsOn mvnPackage
    

    所以如果我使用 gradle 作为构建工具,maven 目标将被执行,完美运行。

    【讨论】:

    【解决方案3】:

    我不确定这有多可靠,但您也可以在不需要 maven 容器/线束的情况下实例化和执行一些 maven mojos(详情 here

    我不确定 maven tomcat mojo 是否可以做到这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      • 1970-01-01
      • 2015-09-19
      • 1970-01-01
      • 1970-01-01
      • 2018-10-06
      • 2014-05-16
      相关资源
      最近更新 更多