如何让 Maven 将依赖项的资源文件放在父 war 中并注意依赖项 jar

How to make maven put resource files of a dependancy in parent war and not dependancy jar

我有两个项目A和B。 B 依赖于 A.

A有一些资源文件。

在 B 上使用 mvn install 时,它会使用 A.jar 中打包的资源(如之前构建的那样) 我希望将资源打包在 B 中,以便我可以轻松地编辑它们。 (特别是因为 B 被部署为 WAR)

将资源复制到项目 B 可能无济于事,因为 A 中的代码使用以下代码检索信息

InputStream stream = this.getClass().getResourceAsStream(
                "/resourceFile.properties");

我需要更改路径以关联到项目 B 吗?如果可以,应该怎么做?

处理此问题的最佳方法是什么?

您可以使用 maven-shade-pluginshade mojo to repackage select artifacts from your project A into B. I haven't entirely looked at the jarjar-maven-plugin,但它也可以帮助您做到这一点。

请特别查看 shade 插件文档的 "Relocating classes" section 以了解如何操作。理论上它应该与资源文件同样有效。

您的代码将一如既往地工作——加载的资源是在 B 的类路径中还是在 B 中的同一个 jar 或不同的 jar 中并不重要的 WEB-INF/lib 只要它在类路径中并在您的代码中由正​​确的路径引用。

很高兴您没有考虑将 属性 文件移动到 B 项目的代码库中 - 如果您这样做了,A 将不再是独立的。

只要项目 B 与项目 A 在同一个类路径中,该代码就会继续工作。

不过,使用 ClassLoader.getResoucreAsStream rather than Class.getResourceAsStream 可能更清楚。 Class 上的方法默认查找与 Class 的包名称相关的资源。您提供了绝对路径(以'/'开头),说明不需要包相关逻辑。

我找到的最简单的方法 它将其添加到您的 B 项目 POM

<build>
....
        <resources>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
            <resource>
                <directory>../A/src/main/resources</directory>
            </resource>

        </resources>
... 
</build>