在我的工作中,我们使用Maven。我将第一次尝试gradle。我们为所有项目使用公共父pom,其中包含常用maven插件和少量comon依赖项的设置。 gradle中是否有类似的选项?
我的第二个问题是发布管理。我们使用maven release插件,这对我们来说非常有用。 Gradle有类似的东西吗?
答案 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