2015-02-06 34 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); 

因此,您的应用程序将独立于环境配置(并且通常更健壮)。

相关问题