gradle parent pom like feature

时间:2013-03-18 00:42:15

标签: gradle

在我的工作中,我们使用Maven。我将第一次尝试gradle。我们为所有项目使用公共父pom,其中包含常用maven插件和少量comon依赖项的设置。 gradle中是否有类似的选项?

我的第二个问题是发布管理。我们使用maven release插件,这对我们来说非常有用。 Gradle有类似的东西吗?

7 个答案:

答案 0 :(得分:29)

要在同一版本的多个项目中共享内容,请使用allprojects { ... }subprojects { ... }等。此外,在子项目中可以看到父项目中声明的额外属性(ext.foo = ...)。一个常见的习惯用法是在顶级构建脚本中使用ext.libs = [junit: "junit:junit:4.11", spring: "org.springframework:spring-core:3.1.0.RELEASE", ...]之类的东西。然后,子项目可以通过其短名称选择性地包含依赖项。您应该可以在Gradle Forums

中找到有关此内容的更多信息

要跨构建共享逻辑,您可以编写脚本插件(foo.gradle),将其放在Web服务器上,并将其包含在apply from: "http://..."的构建中,或者编写二进制插件(实现org.gradle.api.Plugin)的类,将其作为Jar发布到存储库,并将其包含在具有apply plugin: ...buildscript {}部分的构建中。有关详细信息,请参阅完整Gradle分布中的Gradle User Guide和许多示例。

脚本(但不是二进制)插件的当前限制是它们不被缓存。因此,只有在可以连接到为插件提供服务的Web服务器时,构建才会成功。

至于你的第二个问题(应该是一个单独的问题),有几个第三方发布插件可用,例如https://github.com/townsfolk/gradle-release

答案 1 :(得分:9)

io.spring.dependency-management插件允许您使用Maven bom来控制构建的依赖项:

buildscript {
  repositories {
    mavenCentral()
  }
  dependencies {
    classpath "io.spring.gradle:dependency-management-plugin:0.5.3.RELEASE"
  }
}

apply plugin: "io.spring.dependency-management"

接下来,您可以使用它来导入Maven bom:

dependencyManagement {
  imports {
    mavenBom 'io.spring.platform:platform-bom:1.1.1.RELEASE'
  }
}

现在,您可以在不指定版本号的情况下导入依赖项:

dependencies {
  compile 'org.springframework:spring-core'
}

答案 2 :(得分:1)

我也想要这种类型的功能,我已经创建了一个插件来提供这个:https://github.com/boxheed/gradle-pater-build-plugin

答案 3 :(得分:1)

我认为做maven父母pom之类的事情的最好方法是使用gradle"来自"。
像这样:

allprojects { // or: subprojects { ... }
    apply from: "gradle/script/common.gradle"
}

链接并且是相关路径或URL。希望它有所帮助。

参考:
Import a Gradle script from the root into subprojects
Super POM, Parent POM type of hierarchy management in Gradle

答案 4 :(得分:1)

您可以非常轻松地将父pom内容转换为Gradle init文件。 Gradle init脚本提供与Maven super / parent pom相同的功能。基本的区别是你可以调用init脚本

运行时间    尽可能多的这使我们能够灵活地更改初始化    运行时脚本,但怀疑没有跟踪更改。

您需要将存储库,分发管理,分析和其他检查(如findbugs,checkstyle等)添加到init脚本中。

细节很大,你可以在这里找到完整的信息。 http://www.scmtechblog.net/2015/12/how-to-migrate-parent-pom-from-maven-to.html

我已经解释了gradle release插件,它类似于maven release插件。

答案 5 :(得分:0)

要实现您的目标,您可以应用等级用户指南here中解释的“多项目构建”概念

基本上,您可以创建一个伞形项目,通过创建gradle.build文件和gradle.settings文件来定义一组常用配置。 构建文件包含所有项目的属性,依赖项和插件公共,settings.gradle定义了哪些子项目继承了这些配置。

此外,要了解gradle插件生态系统,您可以查看this来源。

答案 6 :(得分:0)

如果您希望将父级本地缓存并存储在Maven存储库中,则目前无法实现。

我在这里添加了功能请求: http://forums.gradle.org/gradle/topics/support_for_gradle_parent_shared_between_projects_cached_locally