如何让maven将依赖的资源文件放在父战争而不是依赖jar中

时间:2015-01-06 12:02:19

标签: java maven jar

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

A有一些资源文件。

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

将资源复制到项目B可能没有用,因为A中的代码使用以下内容来检索信息

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

我是否需要更改与项目B相关的路径?如果是这样,应该怎么做呢?

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

3 个答案:

答案 0 :(得分:1)

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

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

        </resources>
... 
</build>

答案 1 :(得分:0)

您可以使用maven-shade-plugin的{​​{3}}将项目A中的精选工件重新打包到B。我还没有完全看过shade mojo,但它也可以帮助你做到这一点。

请特别查看shade插件文档的jarjar-maven-plugin以了解如何执行此操作。它理论上应该与资源文件同样有效。

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

您最好不要考虑将属性文件移动到B项目的代码库中 - 如果您这样做了,A将不再是自包含的。

答案 2 :(得分:0)

只要项目B与项目A位于同一类路径中,该代码将继续有效。

然而,使用ClassLoader.getResoucreAsStream而不是Class.getResourceAsStream可能会更清楚。默认情况下,Class上的方法会查找与Class的包名相关的资源。您已提供绝对路径(前导&#39; /&#39;),表示不需要包相对逻辑。