如何在将路径传递给getResourceAsStream()时包含项目名称?

时间:2017-03-06 23:49:38

标签: java maven jar resources

如何在路径中指定项目以使用getResourceAsStream()访问正确的.properties文件?问题是子项目A和B中的文件夹和文件名相同(因此只需将文件夹/文件指定为路径即可。) 有没有类似的解决方案 .getResourceAsStream(" /Subproject_B/someFolder/someResourceBundle.properties")?我是否需要实现自己的类加载器并仅在其类路径中设置我想要搜索的项目/文件夹?加载文件时会导致一个唯一的地址,如 .getResourceAsStream(" /someFolder/someResourceBundle.properties")

我们的Maven项目看起来像这样:

SubProject_A
          |-src
            |-main
              |-resources
                |-someFolder                     //folder name is the same as in Subproject_B
                  |-someResourceBundle.properties

SubProject_B
      |-src
        |-main
          |-resources
            |-someFolder                   //folder name is the same as in Subproject_A
              |-someResourceBundle.properties

2 个答案:

答案 0 :(得分:0)

可以认为这两个资源属于两个罐子。 Class.getResource特定于班级:

ClassInJarA.class.getResourceAsStream("/...")

系统ClassLoader使用不带前导斜杠的路径指定的完整类路径。在第一场比赛中停止。

(另请注意,由于继承,使用.getClass().getResource会很危险。)

我会使用更具体的Class.getResourceAsStream。

答案 1 :(得分:0)

将每个项目的资源放在一个可以根据需要区分资源的包中。例如,/com/example/project_a/somePackage/someResourceBundle.properties/com/example/project_b/somePackage/someResourceBundle.properties。如果你以Java的方式做事并通过使用包来分离,则不需要自定义类加载器。

使用复杂的kludge来解决从正常做事方面的故意干扰通常是一个坏主意。