这是问题的后续行动 How do I appropriately put and use project resources with a built jar?
我们再次进行设置:
当我运行项目B时,Eclipse抱怨没有在指定的路径中找到文件,因为它使用项目A类的路径查看项目B的根文件夹。如何将类设置为始终查看其自己的项目文件夹?
此设置的最佳做法是什么?这是正常用法吗?我是否希望将项目A作为项目B的罐子提供?
答案 0 :(得分:1)
如果要访问与您的类在同一个包中的资源,可以这样做
YourClass.class.getResourceAsStream("path/to/other/resource");
前面没有/
,因为路径是相对于类YourClass
的包。这在Class#getResource(String)
在委托之前,从中构造绝对资源名称 使用此算法给定资源名称:
如果名称以'/'('\ u002f')开头,则绝对名称为 资源是'/'后面的名称部分。除此以外, 绝对名称的格式如下:modified_package_name / name
其中modified_package_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的类路径。当您这样做时,类路径将被解析为上面的示例。