如何设置一个类以始终在其自己的项目文件夹中搜索给定路径?

时间:2013-09-02 14:36:02

标签: java eclipse path resources dependencies

这是问题的后续行动 How do I appropriately put and use project resources with a built jar?

我们再次进行设置:

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

前面没有/,因为路径是相对于类YourClass的包。这在Class#getResource(String)

的javadoc中有解释
  

在委托之前,从中构造绝对资源名称   使用此算法给定资源名称:

     

如果名称以'/'('\ u002f')开头,则绝对名称为   资源是'/'后面的名称部分。除此以外,   绝对名称的格式如下:modified_pa​​ckage_name / name

     

其中modified_pa​​ckage_name是此对象的包名称   用'/'代替'。' ( '\ u002e')。

例如,对于完全限定的类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的类路径。当您这样做时,类路径将被解析为上面的示例。