当前位置: 首页 > 知识库问答 >
问题:

强制maven使用主jar中的资源文件而不是依赖jar中的资源文件

濮阳宜
2023-03-14

编辑:

结构:

A.jar(或A.war)
|
|src/main/resources/config。属性-(标记为p1)
|
||依赖的罐子

  • 当我运行A. jar(或A. war,因为B. jar可以由Web应用程序或java进程调用)时,我希望B. jar中的代码始终使用p1;
  • 当我单独运行B. jar时,我希望B. jar中的代码使用p2

另一种描述方式是主jar/war中同名的资源文件(这里是A. jar/war)将始终在依赖jar(B. jar)中覆盖它。

我查看了maven Shade插件的源代码,似乎无法保证会使用主jar/war中的资源文件。有人知道吗?或者任何插件都可以完成这项工作?谢谢

共有1个答案

吉凯捷
2023-03-14

在某种程度上,这将取决于B.jar如何加载其属性。如果B.jar使用以下机制加载其属性:

getClass().getResourceAsStream("/config.properties");

然后Java的分层类加载行为将在您期望的位置找到config.properties

  • 当B.jar作为A.war的一部分包含时,将找到p1
  • 当B.jar独立运行时,将找到p2

我创建了一个小的测试应用程序(一个包含jar的war),它在执行war和单独执行jar时确认了上述行为。

如果项目A不是战争,而是一个独立的jar(A.jar),那么最好使用Maven shade插件创建一个大的A.jar。这个插件将在A.jar中包含B.jar的内容。

使用插件的过滤机制,可以确保使用p1。你可以告诉插件排除config。属性来自B.jar

<configuration>
    <filters>
        <filter>
            <artifact>groupIdForB.jar:artifactIdForB.jar</artifact>
            <excludes>
                <exclude>config.properties</exclude>
            </excludes>
        </filter>
    </filters>
</configuration>

通过排除上面的p2,您将最终在大A. jar中得到p1

 类似资料:
  • 我有一个SpringWeb应用程序,它是作为maven工件a.war创建的。它有一个maven依赖项和一个工件B.jar。工件B的src/main/resources有一个文件测试。txt。我想读一下测试文件。来自神器A.war的txt。当我引爆B.jar时,我看到了测试结果。jar的根位于txt中。在A中,我尝试使用文件f=new ClassPathResource(“test.txt”)读取该

  • 我们在不同的项目中有多个war文件,比如A和B,共享像图像这样的公共资源。公共资源被放置在单独的项目E中的war模块中,并且这个war文件作为依赖项添加到项目a和B中的所有war模块中。目前,我们正在使用maven资源插件将这些公共资源复制到a和B模块的根目录中。 我们如何使用Gradle来执行相同的操作?我尝试使用下面的配置,但是文件没有复制到生成的war文件中。它们只复制到build/libs

  • 我想从我的jar中读取一个资源,如下所示: 在Eclipse中运行它时工作良好,但如果我将它导出到一个jar中,然后运行它,就会出现一个IllegalArgumentException: 我真的不知道为什么,但通过一些测试我发现如果我改变 至 然后它的工作方式相反(它在jar中工作,但不能在eclipse中工作)。 我使用的是Eclipse,我的文件所在的文件夹位于类文件夹中。

  • 我知道这个问题以前被问过很多次,但是我仍然不能管理它工作。我想实现的是创建一个在运行时加载资源(打包在jar中)的jar,而不会在执行Eclipse应用程序时中断资源加载。 我的项目结构是标准的: 加载图像资源的代码: 从Eclipse启动应用程序时,它工作正常。然而,当我从Eclipse导出runnable jar时,它不起作用。 导出的jar在其根目录中有/resources/img文件夹。但

  • 我在Eclipse中有一个简单的maven项目。应用程序包含文件:src/main/Resources/test.txt.我想读取文件并将其写入输出。它在Eclipse中工作,但在创建jar文件后不能从命令行。如何配置项目以两种方式工作。我错在哪里?不正确的jar文件、java代码、清单、maven配置? 应用程序结构: 应用程序结构 运行: 错误: Java代码: pom.xml: fileRe

  • 问题内容: 我有一个带有工具栏的Java项目,该工具栏上带有图标。这些图标存储在名为resources /的文件夹中,因此路径可能是“ resources / icon1.png”。该文件夹位于我的src目录中,因此在编译后,该文件夹将被复制到bin / 我正在使用以下代码访问资源。 (imageName将为“ resources / icon1.png”等)。在Eclipse中运行时,效果很好。