Warning: org.codehaus.jackson.jaxrs.JsonMappingExceptionMapper: can't find superclass or interface javax.ws.rs.ext.ExceptionMapper
和
org.codehaus.jackson.xc.DataHandlerJsonDeserializer$1: can't find superclass or interface javax.activation.DataSource
我正在使用 Jackson Json库,错误似乎与此有关。
研究这个错误,我从Proguards FAQ中找到了以下内容:
如果存在未解决的类或接口引用,则您很可能忘记指定一个基本库。为了进行正确处理,代码引用的所有库都必须被指定,包括Java运行时库。要指定库,请使用-libraryjars选项。
在SO上搜索时,我发现了很多未回答的与此相关的问题,但一般意义是我正在使用的jar文件(在这种情况下是Jackon JSON)依赖于更多的库,需要以某种方式将它们添加到Proguard的配置文件中。
但是,我无法确定需要哪些JAR文件以及它们在哪里。警告提到了许多不同的包,例如javax.ws.rs.ext、org.joda.time、org.codehaus.stax2、javax.xml.stream等。
- 如何确定包含这些包的JAR文件?例如,javax.ws.rs.ext.**类需要哪个JAR文件?
- 如何找出那些JAR文件在哪里以及在Proguard中使用什么路径?
非常感谢
编辑:我还应该提到我正在使用Android库项目设置。 Jars在主要的库项目中,实际工作项目的构建路径包括库项目中的Jars。不知道这是否有所不同,但我想我应该提一下。
更新 仅为测试,我完全从构建路径和代码中移除了jackson,现在Proguard成功完成。问题仍然存在... 处理这些错误的正确方法是什么?
Android导出向导在Eclipse中是否自动将/lib/ jars添加到proguard中,还是所有jar都必须像这样在proguard配置文件中手动添加:
-libraryjars C:/Project/lib/somjar.jar
我确实尝试了这个方法,但是没有任何改变。这是否意味着我还需要找到所有在警告中提到的类所需的jar包并添加它们?它们会在SDK或Java安装中吗?
如果这些问题很愚蠢,请原谅,但我已经尝试了几个小时,不知道该怎么做。
再次感谢您。
再次更新
通过更多搜索和 Benjamin 的建议,我发现一些缺失的类在 rt.jar 中,它位于 jdk 的 lib 文件夹中。因此,我最终添加了
-libraryjars <java.home>/lib/rt.jar
我将proguard.cfg文件中的警告从485个减少到了204个。嘿,我想这也算是一些进展吧... 剩下的警告描述的是我根本找不到的类。如果没有运行proguard,应用程序仍然可以正常工作,那么这些类肯定存在,对吗?还是说我应该使用-dontwarn
来避免这些警告?
剩下的类在这些包中:
org.joda.time.
org.codehaus.stax2.
javax.ws.rs.
现在我只需要找到一种方法来确定:
- 哪些JAR文件包含这些类
- 这些JAR文件在哪里,以便我可以将它们包含在proguard配置文件中