Android:包含/重新打包引用 javax 核心类的依赖项时出错

2022-09-03 18:07:01

我正在开发一个使用Maven作为构建工具的Android应用程序。我设法正确地设置了evertyhing(maven依赖项被导出到apk等),但是我还有一个剩余的问题,这让我发疯。

我想在我的POM文件中包含对simpleframework的xml解析器的依赖,定义如下:

<dependency>
    <groupId>org.simpleframework</groupId> 
    <artifactId>simple-xml</artifactId>
    <version>2.5.3</version>
</dependency>

当我在项目上发布时,我收到以下错误(截断):mvn install

trouble processing "javax/xml/namespace/NameSpaceContext.class" ...

我知道引用这些javax类的简单xml解析器会导致错误,但是我还没有找到解决方案(设置--core-library标志是没有用的)。

我目前正在尝试使用maven-jarjar-pluging重新打包依赖关系,但这似乎也不起作用。

任何人都可以帮我解决这个问题吗?提前非常感谢!


答案 1

定义你的简单 xml depedency,如下所示:

<dependency>
    <groupId>org.simpleframework</groupId>
    <artifactId>simple-xml</artifactId>
    <version>2.6.1</version>
    <exclusions>
        <!-- StAX is not available on Android -->
        <exclusion>
            <artifactId>stax</artifactId>
            <groupId>stax</groupId>
        </exclusion>
        <exclusion>
            <artifactId>stax-api</artifactId>
            <groupId>stax</groupId>
        </exclusion>
        <!-- Provided by Android -->
        <exclusion>
            <artifactId>xpp3</artifactId>
            <groupId>xpp3</groupId>
        </exclusion>
    </exclusions>
</dependency>

答案 2

我使用android-maven-plugin,并且在POM中添加插件的标签对我有用。但是,有一个错误:https://github.com/jayway/maven-android-plugin/pull/34,您需要包含该错误来修复您正在使用的插件,因为该错误要到3.0才能修复。以下是我如何使用2.9.0-SNAPSHOT为我工作。<coreLibrary>true</coreLibrary><configuration>

  1. 添加插件指向 http:// oss.sonatype.org/content/repositories/jayway-snapshots/ 的存储库以获取2.9.0-SNAPSHOT
  2. 更新您的插件版本以使用2.9.0-SNAPSHOT,并将<coreLibrary>true</coreLibrary>添加到pom.xml
  3. 得到修复:git克隆 https://github.com/kevinpotgieter/maven-android-plugin.git
  4. 删除 src/test/java/com:这样测试就不会失败
  5. mvn package
  6. 复制它并在.m2中覆盖本地maven缓存(您可能需要删除每次都会被覆盖的插件存储库。

修复程序进入 2.9.0-SNAPSHOT 后,不需要执行步骤 3-6。


2010 年 7 月更新:2.9.0-beta-4 具有修复程序,因此,如果您使用 2.9.0-beta-4 或更高版本,则不需要上述解决方法。我测试了2.9.0-beta-5,效果很好。


推荐