【发布时间】:2014-05-19 23:53:46
【问题描述】:
我希望从我的 java 项目中访问构建信息,该项目使用 gradle 来构建项目。我需要访问的信息是由 teamcity 生成的内部版本号、构建 vcs 号等。这些可以通过 maven 轻松访问,并使用 maven-replacer-plugin 可以在属性文件中替换。首先,在 gradle 中是否有替代方案来实现相同的目标?然后,怎么做呢? :)
我尝试了共享 here 的方法,但我总是得到 null 作为内部版本号。
在 Maven 中,我在项目中放置了一个属性文件 (project.properties) 来保存键值对,键是那些项目信息,如
project.groupId、project.artifactId、project.version、 maven.build.timestamp
我希望使用 gradle 访问相同的构建信息。 . pom 如下所示:
<!-- Write project version number to file -->
<plugin>
<groupId>com.google.code.maven-replacer-plugin</groupId>
<artifactId>maven-replacer-plugin</artifactId>
<version>1.3.8</version>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>replace</goal>
</goals>
</execution>
</executions>
<configuration>
<includes>
<!-- replace the token in this file -->
<include>target/classes/project.properties</include>
</includes>
<replacements>
<replacement>
<token>PROJECT_GROUP</token>
<value>${project.groupId}</value>
</replacement>
<replacement>
<token>PROJECT_ARTIFACT</token>
<value>${project.artifactId}</value>
</replacement>
<replacement>
<token>PROJECT_VERSION</token>
<value>${project.version}</value>
</replacement>
<replacement>
<token>PROJECT_BUILD_DATE</token>
<value>${maven.build.timestamp}</value>
</replacement>
<replacement>
<token>BUILD_NUMBER</token>
<value>${build.number}</value>
</replacement>
</replacements>
</configuration>
</plugin>
maven replacer 插件所做的是替换属性对象中的值,可以在 java 应用程序中使用。
我需要使用 gradle 访问相同的属性。
pom 中的 Team City 配置如下:
<ciManagement>
<system>Team City</system>
<url>http://teamcity.mycompany.com/teamcity/project.html?projectId=bt007
</url>
</ciManagement>
在build.gradle 文件中,我有一个任务定义如下:
task getProjectGroup << {
ext.projectGroup = System.getProperty("project.group")
println "Project Group: $projectGroup"
}
执行此任务时我得到以下输出:
:service:getProjectGroup
Project Group: null
BUILD SUCCESSFUL
【问题讨论】:
-
如果你得到
null,你的 TeamCity 构建没有设置这个系统属性,你也不能从 Maven 访问它。在属性文件中替换占位符是配置processResources任务的问题(参见Gradle Build Language Reference 中的Copy)。 -
我在上面的 Maven POM 中找不到任何 TeamCity 属性。
-
以上更新。还添加了团队城市配置,让问题更完整。
-
除了
build.number,你不能直接从Gradle 中获取所有这些值吗?例如。project.group、project.archivesBaseName和project.version(以及构建日期的new Date())都可以在 Gradle 脚本中直接访问。 -
我得到了构建日期的
new Date()对象。除此以外的都是空的。我更新了原始问题中的 gradle 任务。
标签: java gradle teamcity build.gradle