簡體   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