我正试图习惯于使用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更加希望资源与类文件位于同一目录中。我想如果我要重命名与软件包匹配的资源目录或任何其他独特的方法,这会起作用-但我不喜欢它产生的混乱。
有没有一种解决方法可以让我保持惯用的资源,并仍然从模块化中受益?
答案 0 :(得分:1)
我了解,Java 11更加期望资源会在 与类文件相同的目录
是的,确实希望资源与软件包中的类位于相同的目录路径中,以便轻松访问它们。
但是,模块化还期望在模块路径上解析时,不会有两个模块引入同一包。因此,您已经知道解决此问题的最干净方法是重命名模块之一的包结构
否则,另一种解决方法(不太好)是让这些模块保留在类路径上,并将结果归类为the unnamed module。