jac*_*ope 15 java overriding classloader
假设我有一个项目K.
K取决于lib.jar
在lib.jar,有一个名为的类x.y.z.Foo
如果我x.y.z.Foo在K中创建相同的类,那么在我创建实例的这个项目中Foo,现在将JVM用Foo在K而不是lib.jar?
如果它不稳定或取决于某些东西,如何确保Foo应该使用K的版本而不是lib.jar?
独立应用程序中的 Java 类加载行为(至少没有自定义类加载器)是稳定的。确保您的 k.jar (或路径)位于-cpjava arg中的 lib.jar 之前
java -cp k.jar lib.jar ...
Run Code Online (Sandbox Code Playgroud)
或将依赖项添加到 K 项目的 /META-INF/MANIFEST.MF 中:
...
Class-Path: lib1.jar lib2.jar
...
Run Code Online (Sandbox Code Playgroud)
并运行
java -jar k.jar
Run Code Online (Sandbox Code Playgroud)
k.jar 类将首先加载
在 Maven 中是
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
</plugin>
...
Run Code Online (Sandbox Code Playgroud)