在 java 中重写类

2022-09-03 08:05:50

假设我有一个项目K

K 取决于lib.jar

在 中,有一个名为lib.jarx.y.z.Foo

如果我在 K 中创建相同的类,那么在这个项目中,当我创建一个实例时,现在 JVM 将在 K 中使用而不是在 ?x.y.z.FooFooFoolib.jar


而如果它不稳定或者依赖于什么,如何确保应该使用K的版本而不是?Foolib.jar


答案 1

独立应用程序中的 Java 类装入行为(至少在没有自定义类装入器的情况下)是稳定的。在 java arg 中,请确保您的 k.jar(或 path)位于 lib.jar之前-cp

java -cp k.jar lib.jar ...

或将依赖项添加到 /META-INF/MANIFEST。您的 K 项目的 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>
         ...

答案 2

推荐