我有点陷入困境,因为我不确定自己是不是正确的道路。
目前,我有多个项目 - 一个项目,分发包含XML文件和JSON文件等几个其他文件的.zip文件。这已经在我们正在使用的Maven本地存储库中,目前不是问题。
问题是现在我们有另一个项目需要在编译和运行时使用这个文件。因此,我们需要将其作为资源加载。但是,在jar中包含以下文件:
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-scripts</id>
<phase>compile</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<outputDirectory>target</outputDirectory>
<artifactItems>
<artifactItem>
<groupId>mygroupidhere</groupId>
<artifactId>myartifacthere</artifactId>
<version>myversionhere</version>
<overWrite>true</overWrite>
<classifier>sources</classifier>
<type>zip</type>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
确实将所需文件提取到目标/源,并将它们包含在构建jar的顶级目录中。但是,我正在努力使用它所在的项目中的Java代码来实际加载这些文件。这需要与构建(使用单元测试)以及运行时从jar文件(在jar,文件中)兼容被放置在源中/正如人们所期望的那样。
我已经尝试过使用Files.newInputStream(Paths.get("sources/examplefile"))
,但是单元测试失败了(此时,它位于target / sources / examplefile中,它可以工作,但显然在运行时不起作用,因为它只是在sources / examplefile中)。
我也尝试过类中的getResourcesAsStream,这在运行时是有意义的,但是在单元测试中不起作用,因为它将在目标中,因为它是从依赖项中获取的。单元测试必须直接与依赖项中的文件兼容(因此它们更像是集成测试),否则我们确实希望这个项目无法构建。
有谁知道答案?
这听起来像是一个糟糕的设计。
Loader
)。package something;
public class Loader(){
}
something.Loader.class.getClassLoader().getResourceAsStream("/<whatever>")