覆盖java中的类

时间:2013-01-05 03:37:06

标签: java override classloader

假设我有一个项目 K

K 取决于lib.jar

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

的类

如果我在 K 中创建相同的班级x.y.z.Foo,那么在我创建Foo的实例时,此项目中JVM将使用Foo K 而不是lib.jar


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

1 个答案:

答案 0 :(得分:1)

独立应用程序中的Java类加载行为(至少没有自定义类加载器)是稳定的。确保你的k.jar(或路径)位于-cp java arg

中的lib.jar之前
java -cp k.jar lib.jar ...

或将依赖项添加到K项目的/META-INF/MANIFEST.MF

...
Class-Path: lib1.jar lib2.jar
...

并运行

java -jar k.jar

将首先加载k.jar类

在Maven中

<build>
    <plugins>
        <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
         ...