我希望能够在使用Gradle构建项目的Java项目内部访问构建信息。我需要访问的信息是由TeamCity生成的构建编号、构建VCS编号等。这些信息可以很容易地通过Maven访问,并且使用Maven-Replacer-Plugin可以将其替换为属性文件中的内容。首先,Gradle中是否有实现类似功能的替代方法?其次,如何实现? :)
我尝试了此处分享的方法,但我始终得到null作为构建号。
在Maven中,我在项目中放置了一个属性文件(project.properties),以保存键值对,其中键是那些项目信息,例如:
在
执行此任务时,我获得了以下输出:
我尝试了此处分享的方法,但我始终得到null作为构建号。
在Maven中,我在项目中放置了一个属性文件(project.properties),以保存键值对,其中键是那些项目信息,例如:
我希望使用Gradle访问相同的构建信息。POM文件应如下所示:project.groupId,project.artifactId,project.version,maven.build.timestamp
<!-- 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替换器插件的作用是替换属性对象中的值,这些值可以在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
)。 - Peter Niederwieserbuild.number
之外,你不能直接从 Gradle 中获取所有这些值吗?例如,project.group
、project.archivesBaseName
和project.version
(以及构建日期的new Date()
)都可以在 Gradle 脚本中直接访问。 - superEbnew Date()
对象作为构建日期。除此之外都是空的。我已经更新了原问题中的Gradle任务。 - Aspirant