gpt4 book ai didi

java - 覆盖Web项目中使用的库中的类

转载 作者:行者123 更新时间:2023-12-01 10:51:53 25 4
gpt4 key购买 nike

我想修补我在 war 项目中使用的库的 java 类。

我已使用具有相同规范名称的新类覆盖了该类,但在 Web 应用程序中,仍首先加载原始类。如何控制类加载顺序?

我从这篇文章开始,阅读了有关 JAR Hell 的内容: Override class in java

并使用了此处找到的 Maven 示例: http://owenou.com/2010/07/20/patching-with-class-shadowing-and-maven.html

基本上是一个辅助项目,依赖于带有覆盖类和原始库的新修补 jar,以及 MANIFEST.MF,其中这些库在类路径中按正确的顺序排列。这样其他项目就可以使用这个辅助项目。

这在独立应用程序中工作得很好,但在 Web 项目中,原始 jar 仍然首先加载。

有什么帮助吗?

最佳答案

我遇到了完全相同的问题,这就是我为使其工作而所做的事情。我的项目包括一个“ThatProject”库,其中包含一个导致错误的 ServiceFactory.java 类。

<dependencies>
<dependency>
<groupId>com.example.ThatGroup</groupId>
<artifactId>ThatProject</artifactId>
<version>${ThatProject.version}</version>
</dependency>
</dependencies>

在我自己的项目中,我创建了一个相同的类来隐藏“ThatProject”的类(路径必须匹配)。→ src\main\java\com\example\ThatGroup\ThatProject\ServiceFactory.java

在我的 pom.xml 中,我使用了 maven-shade-plugin 插件,如下所示。请注意我如何从“ThatProject”库中排除原始的 ServiceFactory.java。

<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<!-- Include all dependencies in JAR -->
<plugin>
<artifactId>maven-shade-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<id>shade</id>
<goals>
<goal>shade</goal>
</goals>
<phase>package</phase>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
<filters>
<filter>
<artifact>com.example.ThatGroup:ThatClient</artifact>
<excludes>
<exclude>com/example/ThatGroup/ThatProject/ServiceFactory.class</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

就这样,它终于对我有用了。就我而言,我将项目的所有文件包含在 pom.xml 的配置中(包括我的 ServiceFactory.java 的影子版本)。如前所述,原始 ServiceFactory.java 在 Maven 构建过程中被排除。

希望这有帮助!

关于java - 覆盖Web项目中使用的库中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33825441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com