0

我成功地使用 proguard 4.5.1 和 proguard-maven-plugin(未指定版本)在 JDK 6 平台上混淆我的 webapp。

当我升级到 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]

此处发布了一个类似的问题,但它并不能帮助我解决我的问题。

关于如何找出哪个库具有重复定义以及如何解决此问题的任何提示?

4

1 回答 1

0

当我从我的项目中删除以下未使用的依赖项时,我的问题得到了解决:

 +- org.swinglabs:swingx-ws:jar:1.0:compile
|  |  +- xerces:xercesImpl:jar:2.8.1:compile
|  |  |  \- xml-apis:xml-apis:jar:1.3.03:compile

我调试问题根源的方式如下。

  1. 我查找了第一个警告“库类 [org.w3c.dom.Node] 的重复定义”,这是原始警告消息中提到的类。
  2. 接下来,我向后搜索“Reading library jar”以查看哪个 jar 具有重复的定义。它是 xml-apis-1.3.03.jar
  3. 然后我在项目上运行了 maven 的 depenency:tree 目标,以查看哪个 jar 拉入了 xml-apis-1.3.03.jar 依赖项。这是swingx-ws jar。

swingx-ws jar 最近被添加到项目中,幸好从未实际使用过。所以我所要做的就是删除它。如果我真的必须使用那个 jar,我怀疑我可以排除 xml-apis 依赖项并且仍然可以正常工作。

于 2013-04-17T19:22:40.777 回答