Jacoco - Генерация отчета, но не связывание исходных файлов - Неправильная структура пакета? - ИСПРАВЛЕНО

ИСПРАВЛЕНО - Разобрался! Оказывается, когда вы добавляете объявления пакетов в свой файл, вы не должны добавлять полный путь (т.е. src/main/java/com/company/app). Вместо этого вы должны просто упаковать любые каталоги, которые у вас есть, например, в приложении. Таким образом, в каталоге util вы можете буквально использовать его как пакет util. Затем Jacoco правильно прочитал исходные файлы и рассчитал покрытие


У меня были проблемы с использованием Jacoco для создания хороших отчетов о покрытии кода для небольшого проекта, который я написал.

В основном следуя примеру, я прочитал здесь https://www.baeldung.com/jacoco - Я настроил свой pom так, чтобы он имел цель подготовки агента и цель отчета. Кажется, все это работает в том смысле, что я создаю каталог site/jacoco с файлами html для разных классов и так далее.

Однако, когда я создаю отчет и смотрю на index.html в jacoco, я получаю сообщение об ошибке source file x was not found during generation of report. Это для всех моих файлов.

Ссылка на изображение ошибки

Интересно, что когда я попытался добавить файл с именем Foo.java на корневой уровень моего проекта (com/philsfakecompany/chessapp) без каких-либо объявлений или управления пакетами, а затем запустил отчет — Jacoco правильно скомпоновал его, сгенерировал исходный файл и рассчитал покрытие кода. Это заставляет меня подозревать, что я делаю что-то не так с моей структурой упаковки/структурой каталогов.

В файлах GameManager.java я дал ему пакет com.philsfakecompany.chessapp, который просто отражает структуру каталогов проекта, и я вижу, что та же самая структура поддерживается в сгенерированных двоичных файлах в целевой папке. В jacoco это выглядит как несколько файлов внутриsite/jacoco/com.philsfakecompany.chessapp.

Кто-нибудь знает, что я делаю неправильно здесь? Я предположил, что вы должны были добавить объявления пакетов ко всем файлам и что они по существу отражают структуру каталогов. Я мог бы обойти эту проблему, удалив любую структуру пакета и поместив все свои файлы в корень, но это ужасно.

Я просмотрел другие сообщения о переполнении стека, и наиболее важным из них, который я нашел, был JaCoCo не создает отчеты о покрытии на основе исходного файла — имена методов не кликабельны. Однако это не решает мою проблему. У меня есть номера строк на сгенерированных страницах, поэтому я знаю, что это не проблема с классами, которые не компилируются с отладочной информацией. Я подозреваю, что это может быть проблема с пакетами, но я думаю, что следую примеру, который они показали в этом посте.

Я также добавлю свой POM ниже на случай, если оттуда появятся какие-либо ошибки.

<plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>0.8.6</version>
        <executions>
          <execution>
            <goals>
              <goal>prepare-agent</goal>
            </goals>
          </execution>
          <!-- attached to Maven test phase -->
          <execution>
            <id>report</id>
            <phase>test</phase>
            <goals>
              <goal>report</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
        </configuration>
      </plugin>

Если у кого есть идеи, буду очень благодарен!


person ConfusedDev1234325    schedule 20.04.2021    source источник
comment
Разобрался! Оказывается, когда вы добавляете объявления пакетов в свой файл, вам не следует добавлять полный путь (т.е. src/main/java/com/company/app). Вместо этого вы должны просто упаковать любые каталоги, которые у вас есть, например, в app. Таким образом, в каталоге util вы можете буквально использовать его как пакет util.   -  person ConfusedDev1234325    schedule 21.04.2021
comment
Что именно вы подразумеваете под "when you're adding package declarations to your file" и "you should just package by whatever directories you have within app"?? Какую конфигурацию вы использовали для решения проблемы?   -  person Mr-IDE    schedule 24.05.2021