如何从多个项目访问公共资源文件

Faz*_*zoM 15 java resources dbunit maven

在我的一个项目中,我有资源存储在/src/test/resources(典型的maven目录结构)中.这些资源正由项目中存储的实用程序类使用.

实用程序类本身正在从其他项目中使用(其他项目依赖于此项目).我会像这样访问资源:

final InputStream inputStreamDobs = 
    ClassLoader.class.getResourceAsStream("/dbunit/clear_db.xml");
Run Code Online (Sandbox Code Playgroud)

但是因为我在不同的项目中使用它的路径不正确 - 它是相对的current project that is being built/tested,而不是实用程序类和资源所在的那个.

有人想过如何处理这个问题?

我需要避免使用绝对路径 - 希望有一种方法来定义实用程序类的相对路径.

我也不想在多个项目上复制资源.干杯.

编辑: 为了给出一个上下文,我有一个XML文件中的表的定义,需要在集成测试后清除(清除整个数据库模式).集成测试位于多个项目中,但清晰的脚本和资源文件对于所有这些都是相同的,并且位于公共父项目中.

EDIT2:

奖金问题:我想访问tables.dtd需要从多个其他项目的XML文件访问的常见DTD文件(让我们称之为).(它将坐在共同的父项目中).

目前我将它复制到多个项目中,我从XML使用指令引用它:

<!DOCTYPE dataset SYSTEM "src/test/resources/dbunit/dobs.dtd">
Run Code Online (Sandbox Code Playgroud)

如何将其指向不同项目中的文件?

eva*_*oly 6

您的运行时类路径不应引用src/test/resources.Maven会将所有内容复制到目标,因此您应该可以使用"/dbunit/clear_db.xml"来获取它


Dru*_*nix 6

你写了

...但是因为我从不同的项目中使用它的路径不正确 - 它与正在构建/测试的当前项目相关,而不是实用程序类和资源所在的项目...

相对路径不是问题.在示例中使用绝对路径,但即使您使用相对路径,也会引用包或目录结构. getResourceAsStream只要类路径正确,它就会接收它们.真正的问题是你指的是另一个项目中的测试资源.但是测试资源和类不包含在项目工件中,因此无法从包含此作为依赖项的模块访问它们.如果您需要这些资源用于多个项目中的测试,我建议您使用这些资源创建一个新项目(比如说"projectxyz-testresources"),src/main/resources并将其作为依赖项添加到相关范围"test".

编辑添加:

如果您不想为测试资源使用单独的项目,可以使用目标创建包含测试类和资源的测试jar,jar:test-jar并将其作为测试依赖项包含在内.您可能希望在pom中配置jar插件以在常规构建上执行此目标.