【问题标题】:Android maven build (eclipse) failes because of "unexpected top-level exception" (using odata4j dependency)由于“意外的顶级异常”(使用 odata4j 依赖项),Android maven 构建(eclipse)失败
【发布时间】:2013-01-24 13:48:21
【问题描述】:

我在构建 android maven 项目(eclipse m2e,android for maven)时遇到问题。

“安装”目标继续:

[INFO] UNEXPECTED TOP-LEVEL EXCEPTION:
[INFO] java.lang.IllegalArgumentException: already added: Ljavax/persistence/Access;
[INFO]  at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123)

我在项目中添加了以下依赖项:

<dependency>
    <groupId>org.odata4j</groupId>
    <artifactId>odata4j-jersey</artifactId>
    <version>0.7.0</version>
</dependency>

此依赖项还(除其他外)添加了 javax.persistence-2.0.0.jar。

所以我认为图书馆被添加了两次?但是如何解决这个问题呢? 当我删除依赖项时,可以毫无错误地构建项目。

这里是命令的输出:maven dependency:tree

[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ myapp ---
[INFO] org.subby.android:myapp:apk:0.0.1-SNAPSHOT
[INFO] +- com.google.android:android:jar:4.1.1.4:provided
[INFO] |  +- commons-logging:commons-logging:jar:1.1.1:provided
[INFO] |  +- org.apache.httpcomponents:httpclient:jar:4.0.1:provided
[INFO] |  |  +- org.apache.httpcomponents:httpcore:jar:4.0.1:provided
[INFO] |  |  +- (commons-logging:commons-logging:jar:1.1.1:provided - omitted for  duplicate)
[INFO] |  |  \- commons-codec:commons-codec:jar:1.3:provided
[INFO] |  +- org.khronos:opengl-api:jar:gl1.1-android-2.1_r1:provided
[INFO] |  +- xerces:xmlParserAPIs:jar:2.6.2:provided
[INFO] |  +- xpp3:xpp3:jar:1.1.4c:provided
[INFO] |  \- org.json:json:jar:20080701:provided
[INFO] \- org.odata4j:odata4j-jersey:jar:0.7.0:compile
[INFO]    +- org.odata4j:odata4j-core:jar:0.7.0:compile
[INFO]    |  +- org.core4j:core4j:jar:0.5:compile
[INFO]    |  +- javax.ws.rs:jsr311-api:jar:1.1.1:compile
[INFO]    |  +- org.eclipse.persistence:javax.persistence:jar:2.0.0:compile
[INFO]    |  +- org.eclipse.persistence:eclipselink:jar:2.1.2:compile
[INFO]    |  \- joda-time:joda-time:jar:1.6:compile
[INFO]    +- com.sun.jersey:jersey-core:jar:1.1.5:compile
[INFO]    |  \- (javax.ws.rs:jsr311-api:jar:1.1.1:compile - omitted for duplicate)
[INFO]    +- com.sun.jersey:jersey-server:jar:1.1.5:compile
[INFO]    |  +- (com.sun.jersey:jersey-core:jar:1.1.5:compile - omitted for duplicate)
[INFO]    |  \- asm:asm:jar:3.1:compile
[INFO]    \- com.sun.jersey:jersey-client:jar:1.1.5:compile
[INFO]       \- (com.sun.jersey:jersey-core:jar:1.1.5:compile - omitted for duplicate)

我做错了吗?我对 maven 还是很陌生。

谢谢!

【问题讨论】:

    标签: android eclipse maven odata4j


    【解决方案1】:

    发生这种情况是因为您的构建中有重复的类。如果您的 Eclipse 类路径包含多个同名/包的类,ADT 将抛出 s。

    我建议跑步 mvn dependency:tree 在那里你会得到全貌

    [INFO] +- com.sun.jersey:jersey:jar:0.8-ea-SNAPSHOT:compil
    [INFO] |  +- javax.ws.rs:jsr311-api:jar:0.8:compile
    [INFO] |  \- asm:asm:jar:3.1:compile
    [INFO] \- com.sun.jersey:jersey-client:jar:1.9.1:test
    [INFO]    \- com.sun.jersey:jersey-core:jar:1.9.1:test
    

    重复项是从odata4j-jersey 传递的一些依赖项。为了修复它们,您可以在重复项上添加类似这样的内容:

    <project>
      ...
      <dependencies>
        <dependency>
          <groupId>sample.ProjectA</groupId>
          <artifactId>Project-A</artifactId>
          <version>1.0</version>
          <scope>compile</scope>
          <exclusions>
            <exclusion>  <!-- declare the exclusion here -->
              <groupId>sample.ProjectB</groupId>
              <artifactId>Project-B</artifactId>
            </exclusion>
          </exclusions> 
        </dependency>
      </dependencies>
    </project>
    

    【讨论】:

    • 您好,感谢您的回答。在依赖树中,我只看到一次 javax 持久性。所以我不知道这个类的第二次出现是从哪里来的。我不太确定要在排除项中添加什么内容。
    • 能否将日志添加为评论mvn dependency:tree -Dverbose
    • 好的,我添加了依赖输出。
    【解决方案2】:

    我得到了解决方案:

    好像是odata4j的两个依赖:

    eclipselink-2.1.2
    javax.persistence
    

    有一些共同的类。

    因此,当排除一个或另一个依赖项时,问题就解决了。

    看起来这实际上只是一个 android/adt 问题。通常你不需要排除单个工件的依赖关系,对吗?

    现在的依赖如下所示:

    <dependency>
        <groupId>org.odata4j</groupId>
        <artifactId>odata4j-core</artifactId>
        <version>0.7.0</version>
        <exclusions>
            <exclusion>
                <groupId>org.eclipse.persistence</groupId>
                <artifactId>javax.persistence</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    

    非常感谢 Mite 提供的有用提示。

    问候, 亚历克斯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-08
      • 2017-08-14
      • 2015-09-27
      • 2019-12-04
      • 1970-01-01
      • 2019-10-10
      • 1970-01-01
      • 2014-09-25
      相关资源
      最近更新 更多