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

标签 java localization gradle resourcebundle

我使用 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 并将其包含在基本名称中,因此我不需要在资源目录中放置两个单独的文件。我假设我需要 Hook 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);

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

关于java - 在 Gradle 构建 JAR 中多次包含具有不同名称的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28357823/

相关文章:

java - 如何在 spring boot 中从 message_ru_RU.properties 加载俄语(西里尔字母,utf-8)文本?

gradle - gradle项目子模块中的端到端测试

gradle - 如何在gradle中下载外部文件?

java - 近似正则表达式等价

java - Scala、SQL Server - 如何使用 Scala 将当前时间戳作为日期时间插入 SQL Server 中?

java - 如何从聊天机器人向客户发送聊天消息?

jsf - JSF 2.0 中的印地语本地化

c# - 在自定义 RegularExpressionAttribute 中,构造函数不会在第一次调用后调用

tomcat - 如何在单个构建步骤中使用 IntelliJ 中的远程调试器运行 Gradle+Tomcat?

java - Cassandra Datastax 和 Java - 设置连接的最佳方式