如何在同一文件中设置项目名称/组/版本以及{source,target}兼容性?


82

我打算将gradle用于我的项目,并希望在各处重复使用相同的构建文件。不幸的是,我很难在单个文件中定义$ subject中提到的属性,以简化迁移。

这是gradle 1.6。

我尝试过的所有尝试都失败了:

  • gradle.properties:不能修改名称(只读,必须使用asettings.gradle并覆盖项目名称!);{source,target}Compatibility未考虑在内;
  • settings.gradle{source,target}Compatibility也不考虑!

那么,实现此目标的正确方法是什么?到目前为止我尝试过的是gradle.properties

group = something
name = whatever  # cannot do!
version = whatever
sourceCompatibility = whatever # not taken into account!

并在settings.gradle

sourceCompatibility = "whatever";  # not taken into account!

编辑:“名称”问题只是无法解决;对于其余部分,我使用了另一个文件,该文件将应用于构建文件。“名称”处理确实不正确:/

编辑2这是现在2014年和gradle 1.12,问题仍然没有解决...


1
仅供参考,目前无法改进build.gradle文件中的项目名称,这是一个改进请求:issue.gradle.org//browse/GRADLE-2412
瑞安·尼尔森

Answers:


125

gradle.properties:

theGroup=some.group
theName=someName
theVersion=1.0
theSourceCompatibility=1.6

settings.gradle:

rootProject.name = theName

build.gradle:

apply plugin: "java"

group = theGroup
version = theVersion
sourceCompatibility = theSourceCompatibility

因此,您想跨构建重复使用吗?您可以执行apply from: "other.gradle"apply from: "http://my.server.com/other.gradle"。请注意,后者当前未缓存。要获得缓存,您必须编写一个二进制插件。
Peter Niederwieser 2013年

是的,我使用apply from:解决方案;但这不能解决名称问题:(
fge

1
我认为在最新的Gradle中,您也可以应用插件settings.gradle。但是,使用插件在各个版本中设置相同的项目名称似乎有些奇怪。
Peter Niederwieser 2013年

请注意,还可以从init.gradle用户主目录中的设置所有这些属性(请参阅用户指南)。
Peter Niederwieser 2013年

1
您不必在gradle.properties中定义变量,也不必在settings.gradle中使用。您可以在settings.gradle rootProject.name =“ someName”中提及。确保在settings.gradle中用双引号指定它​​。
Gopinath MR

22

我找到了解决类似问题的方法。我正在使用Gradle 1.11(截至2014年4月)。可以直接在settings.gradle文件中更改项目名称,如下所示:

  rootProject.name='YourNewName'

这需要使用正确的artifactId上载到存储库(对我来说是Artifactory w /其插件)。


2
对于多项目构建,此解决方案并不理想。
asandroq

@asandroq,因为您只能有一个设置文件,所以您必须从那里重命名子模块。它是中心功能,但有效。
尼克斯(Snicolas)'17

19

我设置了工件baseName,使其独立于构建项目名称,这使我可以实现所需的目标:

jar {
    baseName "core"
}

设置此属性后,即使我的项目名称为“ foo”,运行时gradle install,工件也会使用名称core而不是发布foo


1
不会帮助所有将使用项目名称的其他任务,并且可能会在名称冲突的情况下造成其他混乱……
Quartz,

4

显然,这样的事情是可能的settings.gradle

rootProject.name = 'someName'
gradle.rootProject {
    it.sourceCompatibility = '1.7'
}

最近我收到建议,可以使用闭包来设置项目属性,当项目可用时,稍后将调用该闭包。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.