我成功地使用proguard 4.5.1与proguard-maven-plugin(没有指定版本)在JDK 6平台上混淆我的web应用程序。
当我升级到JDK 7平台时,我不得不使用proguard-maven-plugin 2.1.0-SNAPSHOT升级到proguard 4.8,我在执行proguard时得到以下两个警告实例,导致构建失败:
[proguard] Warning: mypackage.MyClass: can't find referenced method 'java.lang.String lookupNamespaceURI(java.lang.String)' in class org.w3c.dom.Node
我已经检查并确保…/jdk1.7.0/jre/lib/rt.jar被指定为库:
[proguard] Reading library jar [.../jdk1.7.0/jre/lib/rt.jar]
我得到以下警告,可能与我的问题有关:
[proguard] Note: duplicate definition of library class [org.w3c.dom.Node]
类似的问题张贴在这里,但它不能帮助我解决我的问题。
关于如何找出哪个库具有重复定义以及如何解决此问题的任何提示?
当我从项目中删除以下未使用的依赖项时,问题解决了:
+- org.swinglabs:swingx-ws:jar:1.0:compile
| | +- xerces:xercesImpl:jar:2.8.1:compile
| | | - xml-apis:xml-apis:jar:1.3.03:compile
我调试问题来源的方法如下。
- 我寻找第一个警告"重复定义库类[org.w3c.dom。
- 接下来我向后搜索"Reading library jar",看看哪个jar有重复的定义。它是xml-api -1.3.03.jar 然后,我在项目上运行maven的dependency:tree目标,看看是哪个jar导入了xml-api -1.3.03.jar依赖。它是swingx-ws jar。
swingx-ws jar是最近添加到项目中的,但幸好从未真正使用过。所以我要做的就是把它取出来。如果我真的必须使用这个jar,我怀疑我可以排除xml-api依赖,并且仍然使事情正常工作。