Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Cobertura导致ClassNotFoundException_Java_Maven_Maven Cobertura Plugin - Fatal编程技术网

Java Cobertura导致ClassNotFoundException

Java Cobertura导致ClassNotFoundException,java,maven,maven-cobertura-plugin,Java,Maven,Maven Cobertura Plugin,当使用JUnit测试与surefire和Cobertura一起使用maven构建我的项目以获得测试覆盖率时,通常情况下,一切正常。但当我最近添加了一个可以被某些测试抛出(并且是例外)的异常时,maven总是告诉我: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.18.1:test (default-test) on project backend-server: Execution

当使用JUnit测试与surefire和Cobertura一起使用maven构建我的项目以获得测试覆盖率时,通常情况下,一切正常。但当我最近添加了一个可以被某些测试抛出(并且是例外)的异常时,maven总是告诉我:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.18.1:test (default-test) on project backend-server: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.18.1:test failed: There was an error in the forked process
[ERROR] java.lang.NoClassDefFoundError: de/unileipzig/irpsim/backend/simulation/TimerowTooShortException
[ERROR] at java.lang.Class.getDeclaredMethods0(Native Method)
[ERROR] at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
[ERROR] at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
[ERROR] at java.lang.Class.getMethod0(Class.java:3018)
[ERROR] at java.lang.Class.getMethod(Class.java:1784)
[ERROR] at org.apache.maven.surefire.util.ReflectionUtils.tryGetMethod(ReflectionUtils.java:57)
[ERROR] at org.apache.maven.surefire.common.junit3.JUnit3TestChecker.isSuiteOnly(JUnit3TestChecker.java:64)
[ERROR] at org.apache.maven.surefire.common.junit3.JUnit3TestChecker.isValidJUnit3Test(JUnit3TestChecker.java:59)
[ERROR] at org.apache.maven.surefire.common.junit3.JUnit3TestChecker.accept(JUnit3TestChecker.java:54)
[ERROR] at org.apache.maven.surefire.common.junit4.JUnit4TestChecker.accept(JUnit4TestChecker.java:52)
[ERROR] at org.apache.maven.surefire.util.DefaultScanResult.applyFilter(DefaultScanResult.java:97)
[ERROR] at org.apache.maven.surefire.junit4.JUnit4Provider.scanClassPath(JUnit4Provider.java:222)
[ERROR] at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:107)
[ERROR] at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:203)
[ERROR] at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:155)
[ERROR] at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
[ERROR] Caused by: java.lang.ClassNotFoundException: de.unileipzig.irpsim.backend.simulation.TimerowTooShortException
[ERROR] at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
[ERROR] at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
[ERROR] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
[ERROR] at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
[ERROR] ... 16 more
[ERROR] -> [Help 1]
不幸的是,使用-X或类似的东西运行并没有帮助,并且查看或没有提供任何关于此问题的有用提示

我的surefire插件定义如下:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.18.1</version>
    <configuration>
        <forkedProcessTimeoutInSeconds>900</forkedProcessTimeoutInSeconds>
        <argLine>-Djava.library.path=${nativelib.directory}</argLine>
        <excludes>
            <exclude>**/DatabaseTest.java</exclude>
        </excludes>
    </configuration>
</plugin>
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>cobertura-maven-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <formats>
            <format>xml</format>
        </formats>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.ow2.asm</groupId>
            <artifactId>asm</artifactId>
            <version>5.0.3</version>
        </dependency>
    </dependencies>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>cobertura</goal>
            </goals>
        </execution>
    </executions>
</plugin>

不幸的是,在使用surefire和cobertura以及预期的异常时,我找不到有关此特定问题的任何信息。有人知道为什么使用cobertura时会发生这种情况吗?有解决方法吗?

我也有同样的错误,但添加了

`<testFailureIgnore>false</testFailureIgnore>`
`false`
解决问题。 所以下一个配置应该解决这个问题

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.18.1</version>
            <configuration>
                <skipTests>${skipTests}</skipTests>
                <testFailureIgnore>false</testFailureIgnore>
                <includes>
                 <include>**/*.java</include>
                </includes>
            </configuration>
        </plugin>

org.apache.maven.plugins
maven surefire插件
2.18.1
${skipTests}
假的
**/*.爪哇

我在多模块项目中遇到了类似的错误。每当我添加
-Dcobertura.skip=true
时,我都会得到NoClassDefFound和ClassNotFound异常

不幸的是,我不明白为什么。我的猜测是,并不是每一个cobertura目标都有这个参数

但是,我使用概要文件“解决”了这个问题。也就是说,我将cobertura插件从默认构建配置移动到了cobertura配置文件

<profiles>
   <profile>
       <id>cobertura-run</id>
       <properties>
            <maven.test.skip>false</maven.test.skip>
       </properties>
       <build>
           <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>cobertura-maven-plugin</artifactId>
                    <version>2.7</version>
                    <configuration>
                        <formats>
                            <format>xml</format>
                        </formats>
                    </configuration>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>cobertura</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
           </plugins>
       </build>
   </profile>
</profiles>

科贝图拉跑
假的
org.codehaus.mojo
cobertura maven插件
2.7
xml
包裹
科贝图拉

每当我想要运行cobertura时,我都使用
-p cobertura run
,而不是在命令行中禁用或启用cobertura。

关于它有一个公开的cobertura问题