【发布时间】:2016-08-13 15:06:57
【问题描述】:
我尝试使用 gradle 2.0.0(gradle wrapper 2.10)让 xalan 2.7.2 与 Android 一起工作
我已将 xalan 2.7.2 和 tagsoup 1.2.1 添加到我的 gradle 依赖项中,以便从草率的 HTML 源中获取有效的 SAX2DOM 文档
但是:如果我为此设置运行 gradle 构建,我会立即收到错误:
Ill advised or mistaken usage of a core class (java.* or javax.*) when not building a core library. This is often due to inadvertently including a core library file in your application's project, when using an IDE (such as Eclipse). [...] If you really intend to build a core library -- which is only appropriate as part of creating a full virtual machine distribution, as opposed to compiling an application -- then use the "--core-library" option to suppress this error message.
所以我尝试这样做,但在实现 --core-library 选项的过程中发现,只有 gradle 1.3.0(和 gradle wrapper 2.2)才有可能
然后这一切都与应用程序的 build.gradle 中的这些选项一起工作:
dexOptions {
preDexLibraries = false
}
project.tasks.withType(com.android.build.gradle.tasks.Dex) {
additionalParameters = ['--core-library']
}
我一直认为并希望对此有另一种更好的解决方案。
但是现在我真的很想摆脱这种开销,因为我想利用新的 Android Studio 2.0 功能,例如 Instant Run,它只能与 gradle 2.0.0 一起使用
所以我的问题是:在 Android 中使用像 xalan (SAX2DOM) 这样的库以及最新版本的 gradle 的正确方法是什么?
编辑:我发现它更多的是关于 xalan 而不是 tagsoup(因为 xalan 似乎依赖于 javax.xml.XMLConstants),所以我相应地编辑了问题
EDIT2:根本原因似乎是从 xalan 通过 xalan-serializer 到 xml-apis 的传递依赖。这是gradlew app:dependencies 显示的内容:
+--- xalan:xalan:2.7.2
| \--- xalan:serializer:2.7.2
| \--- xml-apis:xml-apis:1.3.04
xml-apis-1.3.04.jar 实际上包含 javax.xml.* 类
当前的问题是:如何将这些类包含到我的项目中,避免当前 gradle 版本的核心库问题?
EDIT3:我似乎无法正常工作。
使用 jarjar 重新打包 xml-apis、xalan-serializer 和 xalan jar 后,我将生成的 jar 文件放入项目的 libs 文件夹(我也将其包含在我的 gradle 依赖项中进行编译)。
不过,Xalan 对 xercesImpl 有另一个 可选 依赖项,该依赖项在运行时使用,因此我必须将其添加为依赖项。
但是这个 jar 似乎很旧,所以我在 gradle 构建期间从它那里得到了 ParseErrors。
其他消息来源建议从源代码重新编译 xerces,但在包含重建的 xerces jar 后,我只得到 bad class file magic (cafebabe) 异常 ....
我暂时放弃
【问题讨论】:
标签: android android-gradle-plugin dex xalan