1

这是对如何通过构建的 jar 适当地放置和使用项目资源的问题的后续行动 ?

因此,我们再次进行了设置:

  • 一个项目 A 有
    • 项目根目录下的资源文件夹,其中包含 xml 架构
    • 此项目中的一个类,它在 xml 验证期间使用架构
      • 此类使用相对路径“资源”+ File.separator + SCHEMA-NAME
  • 另一个项目 B 依赖于项目 A
    • 它使用上面的类
    • 没有资源文件夹

当我运行项目 B 时,Eclipse 抱怨在指定的路径中找不到文件,因为它使用项目 A 类的路径在项目 B 的根文件夹中查找。如何将类设置为始终查看其自己的项目文件夹?

此设置的最佳做法是什么?这是正常使用吗?我是否希望将项目 A 作为项目 B 的 jar 提供?

4

1 回答 1

1

如果你想访问与你的类在同一个包中的资源,你可以这样做

YourClass.class.getResourceAsStream("path/to/other/resource");

没有前面/,因为路径是相对于类的包的YourClass。这在 javadoc 中进行了解释Class#getResource(String)

在委托之前,使用以下算法从给定的资源名称构造一个绝对资源名称:

如果名称以“/”开头(“\u002f”),则资源的绝对名称是名称中“/”后面的部分。否则,绝对名称的格式如下:modified_pa​​ckage_name/name

其中 modified_pa​​ckage_name 是此对象的包名称,其中 '/' 替换为 '.' ('\u002e')。

例如,对于完全限定的 class com.mycompany.business.YourClass,它的类路径会出现在

classpath-root/
    schemas.xsd // some resource
    com/
        /mycompany
            /business
                YourClass.class // your class
                /schemas
                    your-class-schema.xsd // some resource

您将访问your-class-schema.xsd

YourClass.class.getResourceAsStream("schemas/your-class-schema.xsd");

您将访问schemas.xsd

YourClass.class.getResourceAsStream("/schemas.xsd");

如果项目 A 依赖于项目 B,则 A 的类路径包含 B 的所有类文件和资源。

classpath-root-A/
    /com
        /project
            /a
                /classes
    /com
        /project
            /B
                /classes

您将应用相同的逻辑来访问“导入的”B 项目中的资源。您可以将 B 作为 jar 提供给 A 的类路径。这样做时,类路径将按照上面的示例进行解析。

于 2013-09-02T14:38:59.687 回答