Android Test Maven插件抛出并出错:java.lang.NoClassDefFoundError:junitx.util.PrivateAccessor

时间:2014-04-15 18:00:38

标签: android maven testing noclassdeffounderror android-maven-plugin

我创建了一个maven项目来自动化android测试。它工作正常,直到我添加junit-addons以测试私有字段。我将以下依赖项添加到pom文件中:

<dependency>
      <artifactId>junit-addons</artifactId>
      <groupId>junit-addons</groupId>
      <version>1.4</version>
      <scope>provided</scope>
</dependency>

然后它给出了使用PrivateAccessor的每个测试用例的错误。错误就像下面一样:

java.lang.NoClassDefFoundError: junitx.util.PrivateAccessor

我删除了<scope>provided</scope>并运行了该项目,但它给了我以下错误:

 trouble processing "javax/xml/parsers/DocumentBuilder.class":

 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 are sure you're not intentionally defining a
 core class, then this is the most likely explanation of what's
 going on.

 However, you might actually be trying to define a class in a core
 namespace, the source of which you may have taken, for example,
 from a non-Android virtual machine project. This will most
 assuredly not work. At a minimum, it jeopardizes the
 compatibility of your app with future versions of the platform.
 It is also often of questionable legality.

 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.

 If you go ahead and use "--core-library" but are in fact
 building an application, then be forewarned that your application
 will still fail to build or run, at some point. Please be
 prepared for angry customers who find, for example, that your
 application ceases to function once they upgrade their operating
 system. You will be to blame for this problem.

 If you are legitimately using some code that happens to be in a
 core package, then the easiest safe alternative you have is to
 repackage that code. That is, move the classes in question into
 your own package namespace. This means that they will never be in
 conflict with core system classes. JarJar is a tool that may help
 you in this endeavor. If you find that you cannot do this, then
 that is an indication that the path you are on will ultimately
 lead to pain, suffering, grief, and lamentation.

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我自己找到了解决方案。它给出了错误,因为在junit-addons中依赖于其他三个库。我只是依赖我的这些库。

我应该删除<scope>privided</scope>并将以下内容添加到junit-addons dependecy:

<dependency>
            <groupId>junit-addons</groupId>
            <artifactId>junit-addons</artifactId>
            <version>1.4</version>
            <exclusions> 
                <exclusion> 
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>

                </exclusion>

                <exclusion> 
                    <groupId>xerces</groupId>
                    <artifactId>xercesImpl</artifactId>

                </exclusion>

                <exclusion> 
                    <groupId>xerces</groupId>
                    <artifactId>xmlParserAPIs</artifactId>

                </exclusion>
            </exclusions>
        </dependency>