【问题标题】:Super POM, Parent POM type of hierarchy management in GradleGradle中层次管理的Super POM、Parent POM类型
【发布时间】:2016-10-20 21:45:22
【问题描述】:

我们目前使用 Maven 作为我们的构建工具,并且有一个迁移到 Gradle 的指令。我们当前的设置是:

  1. 我们有一个超级 POM,它定义了所有第三方依赖项、各种插件、分发管理 URL,并且这个 POM 被上传到我们的发布仓库。
  2. 我们有一个聚合器 POM,它使用这个超级 POM 作为父级并聚合多个子模块。
  3. 我们在聚合器 POM 中定义了多个配置文件来构建组件。

我的问题是,在 Gradle 中执行所有这些操作的最佳方法是什么。如何在单个 Gradle 配置中定义所有第三方依赖项并在其他地方使用它。

我是 Gradle 新手,所以这听起来可能是一个非常愚蠢的问题。但我要求大家提供一些帮助和指导。

【问题讨论】:

  • maven 进行 gradle 迁移的主要原因是什么?进展如何?
  • @Gevorg,我们想要使用 gradle 的主要原因之一是对构建步骤的更多控制。使用 maven,我们必须编写插件,而使用 gradle,这些只是简单的 groovy 脚本。这个父/聚合器 POM 是最初的需求,但是随着组件的架构/设计的发展(对于迁移的应用程序),我们觉得对这种功能的需求减少了。总的来说,一切都很顺利。但我觉得这样的迁移复杂性因应用程序而异。

标签: gradle


【解决方案1】:

我执行以下操作:

  • 定义一个 gradle 脚本(类似于父 pom)

  • 在我的 build.gradle 文件中应用它(类似于扩展)

    apply from: 'https://youUrlHere/parent.gradle'

欲了解更多信息,您可以在这里查看:http://forums.gradle.org/gradle/topics/inheriting_from_a_parent_not_in_the_same_project

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    您可以编写一个 Gradle 插件并分发它,而不是超级 POM。不完全确定您从 2. 和 3. 中得到什么,但如果在构建之间重用这些定义,它们将再次进入插件,否则进入父构建脚本。

    【讨论】:

    • 如何(1)在没有插件的情况下是可能的;在 Maven 中,我只是定义了一个父 pom 并上传到我的发布仓库并在其他 POM 中引用它? (2) 与多模块项目相同,我必须从中生成多个组件(webApp.war、soap-api.war 等)。为了实现这一点,我在 Maven 中定义了配置文件(webApp 配置文件包括模块 1、模块 3;api 配置文件包括模块 1、2、5 等); Gradle 中的等价物是什么?我在 Gradle 的文档中没有找到任何内容。 Gradle include 不允许从中心位置获得这种灵活性。
    • 您可以将构建脚本上传到 Web 服务器,但这比编写二进制插件有一些缺点(如果 Web 服务器关闭,构建将失败)。 Maven 配置文件的“等价物”是构建脚本中的 if 语句,但很少需要。
    • 彼得,我想了解您的观点。由于我是 Gradle 的新手,我带着 Maven 的心态,并试图让 Gradle 适应 Maven 的哲学。但是,我不希望那样。您能帮我找到适合我这种情况的构建方面的最佳方法吗?
    【解决方案3】:

    您可以非常轻松地将 Parent pom 内容转换为 Gradle init 文件。

    你需要服用

    • 存储库,
    • 分发管理
    • 分析
    • findbugs、checkstyle 等其他检查

    进入初始化脚本。

    细节很大,你可以在我这里找到完整的信息。

    http://www.scmtechblog.net/2015/12/how-to-migrate-parent-pom-from-maven-to.html

    【讨论】:

      猜你喜欢
      • 2018-09-14
      • 2012-12-27
      • 2020-10-06
      • 2019-10-23
      • 2023-03-13
      • 1970-01-01
      • 2011-10-24
      • 2011-11-26
      • 1970-01-01
      相关资源
      最近更新 更多