我有两个项目A和B. B依赖于A.
A有一些资源文件。
在B上使用mvn install
时,它使用在A.jar中打包的资源(如之前构建的那样)
我希望将资源打包在B中,以便我可以轻松编辑它们。 (特别是因为B被部署为WAR)
将资源复制到项目B可能没有用,因为A中的代码使用以下内容来检索信息
InputStream stream = this.getClass().getResourceAsStream(
"/resourceFile.properties");
我是否需要更改与项目B相关的路径?如果是这样,应该怎么做呢?
处理此问题的最佳方法是什么?
答案 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;),表示不需要包相对逻辑。