微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我对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)中有一些属性文件,应该存储版本变量,其值如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下使用具有相同名称的另一个文件,并使用您需要进行测试的不变值.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐