我正在使用ant构建java jar文件.我需要使用"zipfileset src ="xxx.jar""zipfileset src ="yyy.jar"包含其他jar,并且xxx.jar和yyy.jar都包含具有SAME完全限定类名的类.因此生成的jar文件具有重复的类名.重复有什么可能的影响?
谢谢.
在Sierra/Bates SCJP书第 797 页中:
“java 和 javac [...] 首先查找包含 Java SE 标准类的目录。然后它们查找由类路径定义的目录”
Oracle 文档说明了相同的顺序。
(我知道我不应该这样做,但是......)为了测试这种行为,我在目录中实现了HashSet.java和Lol.java:C:\dev\cmdline\TestProject\sources\java\util
package java.util;
public class HashSet {}
Run Code Online (Sandbox Code Playgroud)
和
package java.util;
import java.util.HashSet;
public class Lol {
public static void main(String... x) {
HashSet a = new HashSet();
a.add("lol");
}
}
Run Code Online (Sandbox Code Playgroud)
执行时出现编译错误:C:\dev\cmdline\TestProject\sources>javac java/util/Lol.java
java\util\Lol.java:6: 错误: 找不到符号 a.add("lol"); ^符号:方法add(String)位置:HashSet类型的变量a
...这意味着首先使用默认的类路径(当前目录)。
那么,Oracle文档有错吗?您将如何测试类路径顺序?
我想修补我在 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 仍然首先加载。
有什么帮助吗?