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

2022-09-03 12:33:25

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

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

final InputStream inputStreamDobs = 
    ClassLoader.class.getResourceAsStream("/dbunit/clear_db.xml");

但是由于我从不同的项目中使用它,因此路径不正确 - 它是相对于 的,而不是效用类和资源所在的路径。current project that is being built/tested

任何想法如何接近这个?

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

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

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

编辑2:

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

目前,我在多个项目上复制了它,并且我使用指令从XML引用它:

<!DOCTYPE dataset SYSTEM "src/test/resources/dbunit/dobs.dtd">

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


答案 1

你写了

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

相对路径不是这里的问题。在示例中使用绝对路径,但即使使用相对路径,这也将引用包或目录结构。 只要类路径正确,就会选择它们。真正的问题是,您引用的是另一个项目中的测试资源。但是测试资源和类不包含在项目工件中,因此无法从包含此依赖项的模块访问它们。如果您需要这些资源用于多个项目中的测试,我建议您创建一个新项目(假设“projectxyz-testresources”),其中包含这些资源,并将其添加为具有范围“test”的依赖项。getResourceAsStreamsrc/main/resources

已编辑以添加:

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


答案 2

运行时类路径不应引用 src/test/resources。Maven 会将所有内容复制到目标,因此您应该能够使用“/dbunit/clear_db.xml”获取它


推荐