ant*_*ar9 1 java overriding war classloader
我想修补我在 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 仍然首先加载。
有什么帮助吗?
我遇到了完全相同的问题,这就是我为使其工作而所做的事情。\n我的项目包括一个“ThatProject”库,其中包含导致错误的 ServiceFactory.java 类。
\n\n<dependencies>\n <dependency>\n <groupId>com.example.ThatGroup</groupId>\n <artifactId>ThatProject</artifactId>\n <version>${ThatProject.version}</version>\n </dependency>\n</dependencies>\nRun Code Online (Sandbox Code Playgroud)\n\n在我自己的项目中,我创建了一个相同的类来隐藏“ThatProject”之一(路径必须匹配)。\n\xe2\x86\x92 src\\main\\java\\com\\example\\ThatGroup\\ ThatProject\\ServiceFactory.java
\n\n在我的 pom.xml 中,我使用了 maven-shade-plugin 插件,如下所示。\n请注意我如何从“ThatProject”库中排除原始 ServiceFactory.java。
\n\n<build>\n <plugins>\n <plugin>\n <artifactId>maven-compiler-plugin</artifactId>\n <version>${maven-compiler-plugin.version}</version>\n <configuration>\n <source>${java.version}</source>\n <target>${java.version}</target>\n </configuration>\n </plugin>\n <!-- Include all dependencies in JAR -->\n <plugin>\n <artifactId>maven-shade-plugin</artifactId>\n <version>2.2</version>\n <executions>\n <execution>\n <id>shade</id>\n <goals>\n <goal>shade</goal>\n </goals>\n <phase>package</phase>\n <configuration>\n <createDependencyReducedPom>false</createDependencyReducedPom>\n <filters>\n <filter>\n <artifact>com.example.ThatGroup:ThatClient</artifact>\n <excludes>\n <exclude>com/example/ThatGroup/ThatProject/ServiceFactory.class</exclude>\n </excludes>\n </filter>\n </filters>\n </configuration>\n </execution>\n </executions>\n </plugin>\n </plugins>\n</build>\nRun Code Online (Sandbox Code Playgroud)\n\n就是这样,它终于对我有用了。就我而言,我使用 pom.xml 的配置包含了项目的所有文件(包括我的 ServiceFactory.java 的影子版本)。\n如前所述,原始 ServiceFactory.java 在 Maven 构建期间被排除。
\n\n希望这可以帮助!
\n