Я добавляю плагин Jacoco Maven в POM-файл Apache Tika, чтобы получить покрытие кода. Но я сталкиваюсь с проблемами при этом - PullRequest
0 голосов
/ 10 июня 2019

В проекте Apache Tika есть корневой каталог, в котором присутствует файл pom.xml. Внутри корневого каталога находятся субмодули и модуль с именем «Tika-Parent». Внутри родительского модуля также есть файл pom.xml.

Теперь я добавляю плагин jacoco Maven в Tika, чтобы получить покрытие кода, но я сталкиваюсь с проблемами, потому что, когда я добавляю плагин Jacoco Maven в Pom.xml в Root Directory. Он успешно собирается, но выдает ошибку: «Пропуск выполнения JaCoCo из-за отсутствия файла данных выполнения: C: \ Users \ adity \ IdeaProjects \ tika-1.20 \ target \ jacoco.exec"

Я попытался добавить плагин JaCOCO в оба файла pom.xml вместе, а также по одному, но безрезультатно.

Также, когда я выполняю Maven Test для pom.xml в корневом каталоге, он успешно выполняет все тесты.

НО, когда я выполняю Maven Test на pom.xml Tika-parent, он не запускает никаких тестов, но успешно строит.

Я прилагаю файл Pom.xml в корневом каталоге, а также файл pom.xml из родительского модуля Tika в корневом каталоге.

Я использую редакцию IntelliJ Community (последняя версия на сайте). Версия Java - JDK 8, Maven версия 3.

Эти данные взяты из корневого каталога pom.xml

<modules>
  <module>tika-parent</module>
  <module>tika-core</module>
  <module>tika-parsers</module>  
  <module>tika-bundle</module>
  <module>tika-xmp</module>
  <module>tika-serialization</module>
  <module>tika-batch</module>    
  <module>tika-app</module>
  <module>tika-server</module>
  <module>tika-translate</module>
  <module>tika-langdetect</module>  
  <module>tika-example</module>
  <module>tika-java7</module>
  <module>tika-eval</module>
  <module>tika-dl</module>
  <module>tika-nlp</module>
</modules>

Это свойства

<jacoco.version>0.7.5.201505241946</jacoco.version>
<junit.version>4.12</junit.version>
<junit.platform.version>1.3.1</junit.platform.version>

<maven.antrun.version>1.8</maven.antrun.version>
<maven.assembly.version>3.1.0</maven.assembly.version>
<maven.bundle.version>4.0.0</maven.bundle.version>
<maven.failsafe.version>2.22.1</maven.failsafe.version>
<maven.javadoc.version>3.0.1</maven.javadoc.version>
<maven.scr.version>1.7.4</maven.scr.version>
<maven.surefire.version>2.22.1</maven.surefire.version>
<maven.shade.version>3.2.0</maven.shade.version>
<rat.version>0.12</rat.version>

Это зависимости

<dependencies>
<dependency>
  <groupId>org.junit.platform</groupId>
  <artifactId>junit-platform-launcher</artifactId>
  <version>${junit.platform.version}</version>
</dependency>

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>${junit.version}</version>

</dependency>

<dependency>
  <groupId>org.junit.jupiter</groupId>
  <artifactId>junit-jupiter-api</artifactId>
  <version>5.3.1</version>
  <scope>test</scope>

</dependency>

<dependency>
  <groupId>org.junit.jupiter</groupId>
  <artifactId>junit-jupiter-params</artifactId>
  <version>5.3.1</version>
  <scope>test</scope>
</dependency>



<dependency>

  <groupId>org.junit.jupiter</groupId>
  <artifactId>junit-jupiter</artifactId>
  <version>5.4.0</version>
  <scope>test</scope>
</dependency>

<dependency>
  <groupId>org.junit.jupiter</groupId>
  <artifactId>junit-jupiter-engine</artifactId>
  <version>5.3.1</version>
  <scope>test</scope>
</dependency>


<dependency>
  <groupId>org.junit-pioneer</groupId>
  <artifactId>junit-pioneer</artifactId>
  <version>0.3.0</version>
  <scope>test</scope>
</dependency>
</dependencies>

Ниже приведены все плагины в Build.Plugins.

Это плагин JACOCO

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>${jacoco.version}</version>
    <executions>
      <execution>
        <id>prepare-agent</id>
        <goals>
          <goal>prepare-agent</goal>
        </goals>
      </execution>
      <execution>
        <id>report</id>
        <phase>prepare-package</phase>
        <goals>
          <goal>report</goal>
        </goals>
      </execution>
      <execution>
        <id>post-unit-test</id>
        <phase>test</phase>
        <goals>
          <goal>report</goal>
        </goals>
        <configuration>
       <dataFile>target/jacoco.exec</dataFile>
          <outputDirectory>target/jacoco-ut</outputDirectory>
        </configuration>
      </execution>
    </executions>
  </plugin>

Это плагин Surefire

<plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <configuration>
          <reuseForks>false</reuseForks>
          <forkCount>1</forkCount>
      </configuration>
</plugin>

Это Apache Rat Plugin

<plugin>
    <groupId>org.apache.rat</groupId>
    <artifactId>apache-rat-plugin</artifactId>
    <version>${rat.version}</version>
    <configuration>
      <excludes>
        <exclude>CHANGES.txt</exclude>
      </excludes>
    </configuration>
  </plugin>

Остальные плагины в этом pom.xml

отсутствуют.

НИЖЕ - это pom.xml из модуля Iika-Parent в корневом каталоге.

Это свойства.

<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>${project.build.sourceEncoding} 
</project.reporting.outputEncoding>


<!-- plugin versions -->
<jacoco.version>0.7.5.201505241946</jacoco.version>
<junit.version>4.12</junit.version>
<junit.platform.version>1.3.1</junit.platform.version>



<forbiddenapis.version>2.6</forbiddenapis.version>
<groovy.maven.version>2.0</groovy.maven.version>
<maven.antrun.version>1.8</maven.antrun.version>
<maven.assembly.version>3.1.0</maven.assembly.version>
<maven.bundle.version>4.0.0</maven.bundle.version>
<maven.failsafe.version>2.22.1</maven.failsafe.version>
<maven.javadoc.version>3.0.1</maven.javadoc.version>
<maven.scr.version>1.7.4</maven.scr.version>
<maven.surefire.version>2.22.1</maven.surefire.version>
<maven.shade.version>3.2.0</maven.shade.version>
<rat.version>0.12</rat.version>


<!-- NOTE: sync tukaani version with commons-compress in tika-parsers -->


<poi.version>4.0.1</poi.version>
<commons.compress.version>1.18</commons.compress.version>
<commons.io.version>2.6</commons.io.version>
<commons.lang3.version>3.8.1</commons.lang3.version>
<gson.version>2.8.5</gson.version>
<osgi.core.version>6.0.0</osgi.core.version>

<cxf.version>3.2.7</cxf.version>
<slf4j.version>1.7.25</slf4j.version>
<jackson.version>2.9.7</jackson.version>


<!-- when this is next upgraded, see if we can get rid of
     javax.activation dependency in tika-server -->


<jaxb.version>2.3.1</jaxb.version>
<cli.version>1.4</cli.version>
<lucene.version>7.5.0</lucene.version>
<mockito.version>2.23.4</mockito.version>

Дополнительные зависимости в этом pom.xml (остальные все те же, что и в предыдущем pom)

<dependency>
    <groupId>biz.aQute</groupId>
    <artifactId>bndlib</artifactId>
    <version>1.50.0</version>
  </dependency>
  <dependency>
    <groupId>org.apache.felix</groupId>
    <artifactId>org.apache.felix.scr.annotations</artifactId>
    <version>1.12.0</version>
  </dependency>
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>${slf4j.version}</version>
  </dependency>
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>${slf4j.version}</version>
  </dependency>
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>${slf4j.version}</version>
  </dependency>
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>${slf4j.version}</version>
  </dependency>
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jul-to-slf4j</artifactId>
    <version>${slf4j.version}</version>
  </dependency>

Ниже приведены все дополнительные плагины в Build.plugins (остальные все те же, что и в предыдущем pom.xml)

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
      <source>${maven.compiler.source}</source>
      <target>${maven.compiler.target}</target>
    </configuration>
  </plugin>
  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>versions-maven-plugin</artifactId>
    <version>2.7</version>
    <configuration>
      <generateBackupPoms>false</generateBackupPoms>
    </configuration>
  </plugin>
  <plugin>
    <groupId>de.thetaphi</groupId>
    <artifactId>forbiddenapis</artifactId>
    <!-- if this version contains commons-io 2.6, remove hard-coded commons-io version below -->
    <version>${forbiddenapis.version}</version>
    <configuration>
      <targetVersion>${maven.compiler.target}</targetVersion>
      <failOnUnresolvableSignatures>false</failOnUnresolvableSignatures>
      <failOnUnsupportedJava>false</failOnUnsupportedJava>
      <bundledSignatures>
        <bundledSignature>jdk-unsafe</bundledSignature>
        <bundledSignature>jdk-deprecated</bundledSignature>
        <bundledSignature>jdk-non-portable</bundledSignature>
        <bundledSignature>jdk-internal</bundledSignature>
        <bundledSignature>commons-io-unsafe-${commons.io.version}</bundledSignature>
      </bundledSignatures>
    </configuration>
    <executions>
      <execution>
        <goals>
          <goal>check</goal>
          <goal>testCheck</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
  <plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <version>${maven.bundle.version}</version>
  </plugin>


  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>${maven.surefire.version}</version> <!-- versions greater than this don't like System.exit calls in tika-batch -->
    <configuration>
      <argLine>-Xmx3072m -Duser.timezone=UTC</argLine>
    </configuration>
  </plugin>




  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>${maven.shade.version}</version>
  </plugin>



  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-release-plugin</artifactId>
    <version>2.5.3</version>
    <dependencies>
     <dependency>
       <groupId>org.apache.maven.scm</groupId>
       <artifactId>maven-scm-provider-gitexe</artifactId>
       <version>1.9.5</version>
     </dependency>
   </dependencies>
  </plugin>



  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-enforcer-plugin</artifactId>
    <version>3.0.0-M2</version>
    <executions>
      <execution>
        <id>enforce</id>
        <configuration>
          <rules>
            <dependencyConvergence />
            <requireMavenVersion>
              <version>3.1</version>
            </requireMavenVersion>
          </rules>
        </configuration>
        <goals>
          <goal>enforce</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

Плагин Jacoco также присутствует в этом pom-файле, который совпадает с более ранним pom-файлом.

Я попытался поместить в этот файл и собрать его. Не работал. Затем попытался поместить плагин jacoco в файл Root pom, не сработало. Выдает ту же ошибку, что и выше.

Пожалуйста, ПОМОГИТЕ !!

1 Ответ

0 голосов
/ 11 июня 2019

в своем коде я вставляю плагин jacoco в корневой pom под тегом pluginManagement:

<pluginManagement>
    <plugins>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.7.9</version>
            <executions>
                <execution>
                    <id>default-prepare-agent</id>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
                <execution>
                    <id>default-report</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</pluginManagement>

И в каждый субмодуль, где я выполняю модульное тестирование, я вставляю следующую конфигурацию pom.xml:

<build>
    <plugins>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

Вы должны включить плагин jacoco только внутри модуля java, где есть юнит-тест.

...