在 Gradle 构建的 JAR 中多次包含具有不同名称的文件

Include a file multiple times with different names in a Gradle-built JAR

我使用 java 插件提供的标准资源处理来处理包含在最终 JAR 中的 Java 资源包。文件结构如下:

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 文件的副本并将其添加到已处理的资源中。

以下是使用 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 默认设置 -> 以编程方式设置默认语言环境(例如,设置为 ROOT 语言环境):

Locale.setDefault(Locale.ROOT);

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