我对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中定义的,我需要指向编译时不存在的文件 - 如果我在这里错了,请纠正我。)
关于如何完成这项任务的任何想法?
答案 0 :(得分:5)
首先,您正在尝试在构建/类中创建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
下使用相同名称的另一个文件,其中包含测试所需的不变值。