Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Java类访问build.gradle中的项目版本_Java_Gradle - Fatal编程技术网

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

如何从Java类访问build.gradle中的项目版本,java,gradle,Java,Gradle,我是Gradle的新手,所以答案可能很简单,如果答案很简单,我很抱歉:我有一个测试工具,需要获取它的版本,并将其与它正在测试的应用程序的版本进行比较。但是,我的工具的版本在build.graddle中 version '1.0' 我尝试了不同的访问方式(例如): 我找到了这段代码,将版本输出到另一个java文件,但我看不出以后如何检索该信息(我的意思是,我的测试是在src中定义的,我需要指向编译时不存在的文件——如果我在这里出错,请更正) 你知道我如何完成这项任务吗?首先,你试图在buil

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

 version '1.0' 
我尝试了不同的访问方式(例如):

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


你知道我如何完成这项任务吗?

首先,你试图在build/classes(它应该包含已编译的类,而不是源代码)目录中创建java源代码文件,但你必须在源代码中创建,否则它不会被编译。如果您需要这个新类不用于测试,那么使用
src/main/java
,而不是
src/test/java

但无论如何,我认为对于您的情况,使用一些属性文件并在构建过程中替换其中的一些令牌要容易得多。这将允许您创建一些静态逻辑来获取这个属性值,并在运行构建之前使用它。因此,您所需要的是:

1-要在资源
src/main/resources
(例如
app.properties
)中有一些属性文件,应该将
version
变量存储在哪里,其值类似于app\u version\u令牌

version=%APP_VERSION_TOKEN%
2-配置Gradle
processResources
以替换令牌,如下所示:

processResources {
    filesMatching('**/app.properties') {
        filter {
            it.replace('%APP_VERSION_TOKEN%', version)
        }
    }
}
3-制作一些方法来读取此文件并返回属性值,并在需要时使用它


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

mhm我在此应用程序中没有main。主要是测试RESTAPI。通常我会有一个主要的。我真的不知道这是不是一个坏习惯,因为我从别人那里拿工具。无论如何,我在src/test/resources中尝试了属性路由,我有一行:version=${project.version},在build.gradle中,我有一个processRsources,该行已展开(project.version),类似于这样(我更改了它,因为它不工作)。但是,这可能是因为我的version.properties文件位于我的测试目录中吗?再次感谢你的回答!因此,在这里尝试运行代码,通过直接通过intelliJ运行测试,我得到了“%APP\u VERSION\u TOKEN%”的输出,是1)因为.properties文件的位置,或者2)因为我直接运行intelliJ,所以build.gradle文件没有被使用,我应该使用./gradlew test--tests“nameoftest”遍历命令行?
processResources {
    filesMatching('**/app.properties') {
        filter {
            it.replace('%APP_VERSION_TOKEN%', version)
        }
    }
}