Я работал в Java Eclipse с проектом Maven для школы. Я использую Eclemma для данных о покрытии кода, но мой профессор хочет запустить мой код из командной строки и получить оттуда отчет о покрытии кода. Я пытался заставить Джакоко работать, но я действительно никогда раньше не работал с Maven или Pom.xmls и довольно растерялся. Вот как моя сейчас выглядит
<project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId> yada yada yada </groupId>
<artifactId> yada yada yada </artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jacoco</groupId>
<artifactId>org.jacoco.ant</artifactId>
<version>0.8.1</version>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.1</version>
<executions>
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>post-integration-test</id>
<phase>post-integration-test</phase>
<goals>
<goal>report</goal>
</goals>
<configuration>
<dataFile>target/jacoco.exec</dataFile>
<outputDirectory>target/jacoco-ut</outputDirectory>
</configuration>
</execution>
<execution>
<id>default-check</id>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<configuration>
<mainClass> yada yada yada </mainClass>
</configuration>
<executions>
<execution>
<id>run-selenium</id>
<phase>integration-test</phase>
<goals><goal>java</goal></goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.21.0</version>
<configuration>
<!-- nothing -->
</configuration>
</plugin>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
Когда я выполняю
$> mvn clean test jacoco:report
или просто jacoco: сообщи, я получаю
[INFO] --- jacoco-maven-plugin:0.8.1:report (default-cli) @ MyFileLocation ---
[INFO] Skipping JaCoCo execution due to missing execution data file.
Не знаю, что делать в этот момент ...
Проверить плагины
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.4.0.905</version>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.9</version>
<configuration>
<destFile>${sonar.jacoco.reportPath}</destFile>
<append>true</append>
</configuration>
<executions>
<execution>
<id>agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
Добавить только эти плагины
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.9</version>
<configuration>
<destFile>${sonar.jacoco.reportPath}</destFile>
<append>true</append>
</configuration>
<executions>
<execution>
<id>agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
</executions>
</plugin>
Это ничего не изменило
Я запустил mvn clean и mvn eclipse: eclipse после включения ваших изменений. Я все еще получаю [INFO] --- jacoco-maven-plugin: 0.8.1: report (default-cli) @ MyFileLocation --- [INFO] Пропуск выполнения JaCoCo из-за отсутствия файла данных выполнения.
Чтобы записать покрытие с помощью JaCoCo, вам необходимо выполнить тесты с помощью Java-агента JaCoCo.
Согласно https://www.jacoco.org/jacoco/trunk/doc/prepare-agent-mojo.html:
Prepares a property pointing to the JaCoCo runtime agent that can be passed as a VM argument to the application under test.
По умолчанию он устанавливает свойство argLine
, которое выбирается maven-surefire-plugin
, однако кажется, что вы на самом деле не используете maven-surefire-plugin
, а вместо этого используете цель java
для exec-maven-plugin
, которая
Executes the supplied java class in the current VM
argLine
Итак, убедитесь, что во время тестирования используется агент JaCoCo, например использовать цель exec
для exec-maven-plugin
и передать ей argLine
- см. https://www.mojohaus.org/exec-maven-plugin/exec-mojo.html#arguments
Я использую exec-maven-plugin для запуска моей Java-программы с помощью команды «mvn exec: java». Для проверки я использую команду maven-surefire-plugin "mvn test". Кроме того, я не уверен, что вы подразумеваете под "передачей argLine". Что здесь должно быть argLine? Вы говорите, что этот плагин exec-maven не работает с командой, которую я использовал в OP, "mvn jacoco: report"? Я не понимаю
@PaulMyers prepare-agent
устанавливает свойство argLine
, которое указывает на агент JaCoCo, «убедитесь, что агент JaCoCo используется во время ваших тестов»
как мне изменить POM для этого? После каких команд я бы запустил?
предварительно запустив «mvn jacoco: prepare-agent» или запустите их вместе «mvn jacoco: prepare-agent jacoco: report», или даже с помощью теста, я все равно получаю сообщение «Пропуск выполнения JaCoCo из-за отсутствия файла данных выполнения».
проверьте ответ и дайте мне знать, если возникнут проблемы