繁体   English   中英

如何从Java类访问build.gradle中的项目版本

[英]How to access version of my project in build.gradle from a Java class

我对Gradle很新,所以答案可能很简单,所以如果答案很简单,我会道歉:我有一个测试工具需要获取它的版本并将其与正在测试的应用程序版本进行比较。 但是,我的工具版本在我的build.graddle中

 version '1.0' 

我尝试了不同的方式来访问它(例如):

task generateSources {
File outDir
outDir = file("$buildDir/classes/test/tests/Version.java")
doFirst {
    outDir.exists() || outDir.mkdirs()
    new File(outDir).write("public class Version { public static final String VERSION = \"$project.version\"; }")
 }
}
compileJava.dependsOn generateSources
compileJava.source generateSources.outputs.files, sourceSets.main.java

我发现这段代码将版本输出到另一个java文件,但我没有看到我之后如何能够检索该信息(我的意思是,我的测试是在src中定义的,我需要指向一个文件在编译时不存在 - 如果我在这里错了,请纠正我)。

关于如何完成这项任务的任何想法?

首先,您正在尝试在构建/类中创建Java源文件(它应该包含已编译的类,而不是源代码),但您必须在源中执行此操作,否则将无法编译。 如果你需要这个新类可以不用于测试,那么使用src/main/java ,而不是src/test/java /

但无论如何,我认为对于你的情况,使用一些属性文件更容易,并在构建期间替换其中的一些标记。 这将允许您创建一些静态逻辑来获取此属性值并在运行构建之前使用它。 所以你需要的是:

1-在资源src/main/resources (例如app.properties )中有一些属性文件,应该存储version变量,其值如APP_VERSION_TOKEN

version=%APP_VERSION_TOKEN%

2-配置Gradle processResources来替换令牌,如下所示:

processResources {
    filesMatching('**/app.properties') {
        filter {
            it.replace('%APP_VERSION_TOKEN%', version)
        }
    }
}

3-制作一些方法来读取该文件并返回属性的值并在需要的地方使用它。

就这样。 对于单元测试,您可以在src/test/resource下使用具有相同名称的另一个文件,并使用您需要进行测试的不变值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM