2015-02-06 66 views
0

我使用由java插件提供的標準資源處理來處理包含在最終JAR中的Java資源包。文件結構如下:在Gradle構建的JAR中多次使用不同名稱包含文件

src 
└── main 
    ├── java 
    └── resources 
     ├── com 
     │   └── example 
     │    └── lang 
     │   ├── localization.properties 
     │     └── localization_en.properties 
     └── folder-with-unrelated-resources 

由於自動資源加載的性質,我需要包括英文文件兩次:作爲標準的英語文件(localization_en.properties)和基本文件,提供了一個如果找不到更具體的本地化(localization.properties),則回退。目前,這兩個文件都存在於資源目錄中,即使它們的內容完全相同。

我正在尋找一種讓Gradle複製當前localization_en.properties並將其與基本名稱一起包含的方式,因此我不需要在資源目錄中有兩個分開的文件。我假設我需要鉤入ProcessResources任務,但我不知道如何創建localization_en.properties文件的副本並將其添加到已處理的資源中。

+0

看起來你根本不需要語言/語言環境特定變體。如果兩個文件都相同,只需使用默認文件(localization.properties)即可。添加更多特定變體當且僅當您需要它們時。 – fateddy 2015-02-06 05:52:48

+0

@fateddy不需要兩者,因爲Java的包查找也考慮到了JVM的語言環境。例如。 「localization_de.properties」和「localization.properties」(英文)都存在。 JVM的語言環境是'de_DE',並且請求'en_US'的包。 Java找不到它,但它可以找到與JVM默認語言環境匹配的包,以便在返回到基礎之前使用它。 – thee 2015-02-06 10:16:36

回答

1

這裏是你如何複製的資源與gradle

task copyLocalizations(type: Copy) { 
    from('src/main/resources') 
    into(sourceSets.main.output.resourcesDir) 
    include('localization.properties') 
    rename('localization.properties', 'localization_en.properties') 
} 

processResources.dependsOn(copyLocalizations) 

但我認爲這是一個更好的辦法,克服了JVM的默認值 - >設置默認的語言環境編程(如樹根語言環境。):

Locale.setDefault(Locale.ROOT); 

因此,您的應用程序將獨立於環境配置(並且通常更健壯)。

相關問題