运行单元测试时出现IntelliJ错误:无法找到或加载主类$ {surefireArgLine}


73

在IntelliJ中运行单元测试时,出现以下错误:错误:找不到或加载主类$ {surefireArgLine}。我正在使用maven,在pom.xml中,我有:

<properties>
    ...
    <surefire.argLine />
</properties>

<build>
    <plugins>
        <plugin>
            <groupId>com.mysema.maven</groupId>
            <artifactId>apt-maven-plugin</artifactId>
            <version>1.1.1</version>
            <executions>
                <execution>
                    <goals>
                        <goal>process</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>target/generated-sources/java</outputDirectory>
                        <processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor>
                    </configuration>
                </execution>
            </executions>
        </plugin>

        <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.17</version>
        <configuration>
             <!--Sets the VM argument line used when unit tests are run.-->
            <argLine>${surefire.argLine}</argLine>
        </configuration>
    </plugin>
  <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.7.1.201405082137</version>
            <executions>
                <!--
                    Prepares the property pointing to the JaCoCo runtime agent which
                    is passed as VM argument when Maven the Surefire plugin is executed.
                -->
                <execution>
                    <id>pre-unit-test</id>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                    <configuration>
                        <!--Sets the path to the file which contains the execution data.-->
                        <destFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</destFile>
                        <!--
                            Sets the name of the property containing the settings
                            for JaCoCo runtime agent.
                        -->
                        <propertyName>surefireArgLine</propertyName>
                    </configuration>
                </execution>
   ...

有人有类似的问题吗?如何为surefireArgLine设置值?

Answers:


255

我有同样的问题,我想我在vertx-issue跟踪器上找到了解决方案。

简而言之,您必须将IntelliJ Maven(surefire插件)集成配置为不同的行为。

这适用于IntelliJ 14.1.6和mvn 3.3.9 Preferences -> Build,Execution,Deployment -> Build Tools -> Maven -> Running Tests

对于IntelliJ 2019及更高版本 Settings-> Build,Execution,Deployment -> Build Tools -> Maven -> Running Tests

取消选中 argLine


5
感谢在2016年初在这里遇到的同样问题;)
克劳斯·易卜生

17
在Intellij 2016中:Settings-> Build, Execution, Deployment-> Build Tools-> Maven->Running Tests
DieterDP '17

2
谢谢...在尝试对构建进行更改并确保其对开发人员没有副作用时,有什么机会找到这样的职位...上帝保佑stackoverflow。
Beezer's

3
您好,从2018年开始:)这是一个宝贵的解决方案。非常感谢你。
mmdemirbas

4
在Intellij 2018:File > Settings > Build, Execution, Deployment > Build Tools > Maven > Running Tests
xilef

10

通过将surefire-plugin版本更改为2.10并删除,我能够修复Netbeans中的此错误。

<argLine>-Xmx1024m -XX:MaxPermSize=256m ${argLine}</argLine>

来自maven-surefire-plugin配置。相反,我创建了一个由surefire自动选择的argLine属性。

<properties>
    <argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
  </properties>

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.10</version>
      </plugin>

现在,我可以运行和调试单个文件和测试方法。并且代码覆盖率按预期方式工作。


这也适用于IntelliJ。JaCoCo文档中提到了此选项。
vossad01

2

更新pom.xml解决了我的问题。

<argLine>${surefire.argLine}</argLine>

pom.xml中完整的插件信息

    <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>    
            <version>2.18.1</version>                 
            <configuration>
                <parallel>classes</parallel>
                <threadCount>10</threadCount>
                <workingDirectory>${project.build.directory}</workingDirectory>   
                <jvm>${env.JDK1_8_HOME}\bin\java</jvm>   
                <argLine>${surefire.argLine}</argLine>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.apache.maven.surefire</groupId>
                    <artifactId>surefire-junit4</artifactId>
                    <version>2.18.1</version>
                </dependency>
            </dependencies>
     </plugin> --> 

0

我发现我必须使用mvn -Dtest = TestCircle测试从maven运行我的测试用例,而不是直接从IDE运行。


2
您是否找到了另一种解决方案?我需要从我的IDE中运行它才能使用调试模式。
LisaMM

不幸的是,我还没有找到其他解决方案。
BlueLettuce16

3
@LisaMM可以调试测试,而无需在IDE中运行测试。只需在命令行上使用mvnDebug启动测试。然后使用您喜欢的IDE连接到命令行过程。Google在您最喜欢的IDE中进行“远程调试”。
亨德里克·詹德

“ jah”提出的@ BlueLettuce16解决方案(具有200多个ups)要好得多,能否请您作相应标记?
sergpank

0

正在寻找这个,并在这个线程中找到了这个项目“修复”它

基本上将您的jacocoArgLine变量名称定义为空项目属性。然后在surefire配置中,使用@ {jacocoArgLine}代替美元前缀。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.