覆盖java中的类

jac*_*ope 15 java overriding classloader

假设我有一个项目K.

K取决于lib.jar

lib.jar,有一个名为的类x.y.z.Foo

如果我x.y.z.FooK中创建相同的类,那么在我创建实例的这个项目中Foo,现在将JVM用FooK而不是lib.jar


如果它不稳定或取决于某些东西,如何确保Foo应该使用K的版本而不是lib.jar

Evg*_*eev 3

独立应用程序中的 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)