相同目录中的 Java 模块和资源

标签 java embedded-resource java-9 java-module java-11

我正在努力习惯使用 modules-info.java 编写模块化 Java 应用程序。我现在无法理解资源处理的工作原理。 在以前的项目中,我在资源中使用了一个“i18n/”目录,我在其中保存了所有翻译属性文件。

Project A
 +- src/main/resources
    +- i18n
        +- projA_de.properties
        +- projA_en.properties

Project B
 +- src/main/resources
    +- i18n
        +- projB_de.properties
        +- projB_en.properties

虽然这在 Java 8 中有效并且仍然可以用 Java 11 编译,但我得到了错误

Package i18n in both module project.a and module project.b

我明白,Java 11 更希望资源与类文件位于同一目录中。我想如果我重命名与包匹配的资源目录或任何其他独特的方式,这会起作用 - 但我不喜欢它产生的困惑。

是否有一种解决方法可以让我保留我习惯使用的资源并仍然受益于模块化?

最佳答案

I understand, that Java 11 much more expects the resources to be in the same directories as the class files

是的,它确实希望资源与包中的类位于相似的目录路径中,以便轻松访问它们。

但是,模块化还期望在模块路径上解析时没有两个模块引入相同的包。因此,正如您已经知道的那样,最简洁的解决方法是重命名其中一个模块的包结构

否则,另一种解决方法(不太好)是让这些模块保留在类路径中,结果被归类为 the unnamed module .

关于相同目录中的 Java 模块和资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53640794/

相关文章:

java - 有没有比传递参数更好的方法来确定方法的行为?

java - 如何在本地目录中包含java应用程序中的图像?

java - 使用 jlink 为一个胖 Jar 文件优化 JVM 模块

java - 如何打印一系列从 1 小于 x 到 0 结束的数字?

java - 在 Tomcat 6 中拦截对 HttpSession 的调用

java - Android Java 应用程序带有 C++ 纯头库?

c# - C# 中的嵌入式资源字体无法正常工作

html - 引用其他资源的 Android HTML 资源

gradle - 如果添加了 okhttp-urlconnection 依赖项,则拆分包 "okhttp3"错误构建

java - Java 9 中的 JFrame 缩放