Maven - настройка этапа запуска плагина, объявленного в разделе отчетов - PullRequest
7 голосов
/ 11 марта 2011

Я пытаюсь настроить фазу запуска плагинов maven в maven-2.

Моя конкретная проблема связана с попыткой запустить шаг cobertura:instrument, привязанный к фазе жизненного цикла process-test-classes, чтобы он не конфликтовал с другими плагинами, использующими aspectj (и удалял код инструментария, таким образом генерируяотчет о покрытии 0%).Но мой вопрос более общий.

В жизненном цикле deafault мне удалось сделать это, добавив раздел выполнения в мое объявление плагина:

<build>
    <plugins>
        ...
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>cobertura-maven-plugin</artifactId>
            <version>2.4</version>
            <executions>
                <execution>
                    <id>instrument-late</id>
                    <phase>process-test-classes</phase>
                    <goals>
                        <goal>instrument</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        ...

Таким образом, когда я запускаю mvn test все работает отлично, cobertura: инструмент запускается на нужной мне фазе, классы получают инструментарий, тесты запускаются с инструментальными классами и т. Д. Это обобщенный вывод:

[INFO] [clean:clean {execution: default-clean}]
[INFO] [buildnumber:create {execution: default}]
[INFO] [native2ascii:native2ascii {execution: native2ascii-utf8}]
[INFO] [native2ascii:native2ascii {execution: native2ascii-8859_1}]
[INFO] [resources:resources {execution: default-resources}]
[INFO] [compiler:compile {execution: default-compile}]
[INFO] [jar:jar {execution: lib}]
[INFO] [resources:testResources {execution: default-testResources}]
[INFO] Preparing hibernate3:hbm2ddl
[WARNING] Removing: hbm2ddl from forked lifecycle, to prevent recursive invocation.
[INFO] [buildnumber:create {execution: default}]
[INFO] Change the default 'svn' provider implementation to 'javasvn'.
[INFO] Checking for local modifications: skipped.
[INFO] Updating project files from SCM: skipped.
[INFO] Storing buildNumber: 2082 at timestamp: 1299861835678
[INFO] Storing buildScmBranch: trunk
[INFO] [native2ascii:native2ascii {execution: native2ascii-utf8}]
[INFO] [native2ascii:native2ascii {execution: native2ascii-8859_1}]
[INFO] [resources:resources {execution: default-resources}]
[INFO] [hibernate3:hbm2ddl {execution: default}]
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] [jar:test-jar {execution: tests}]
[INFO] [dbunit:operation {execution: test-compile}]
[INFO] [cobertura:instrument {execution: instrument-late}]
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: /home/carles/dev/ism4web/portasigma/portasigma-web/target/surefire-reports

...

Results :

Tests run: 62, Failures: 0, Errors: 0, Skipped: 0

Flushing results...
Flushing results done
Cobertura: Loaded information on 74 classes.
Cobertura: Saved information on 74 classes.
[INFO] [dbunit:operation {execution: test}]

Однако, когда я выполняю mvn site Кажется, я не контролирую фазу выполнения плагина.Мой раздел отчетов содержит:

<reporting>
    <plugins>
        ...
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>cobertura-maven-plugin</artifactId>
            <version>2.4</version>
        </plugin>

И вывод mvn site (суммированный) говорит:

[INFO] [clean:clean {execution: default-clean}]
[INFO] [buildnumber:create {execution: default}]
[INFO] [native2ascii:native2ascii {execution: native2ascii-utf8}]
[INFO] [native2ascii:native2ascii {execution: native2ascii-8859_1}]
[INFO] [resources:resources {execution: default-resources}]
[INFO] [compiler:compile {execution: default-compile}]
[INFO] [jar:jar {execution: lib}]
[INFO] [cobertura:instrument {execution: default-instrument}]
[INFO] [hibernate3:hbm2ddl {execution: default}]
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] [jar:test-jar {execution: tests}]
[INFO] [dbunit:operation {execution: test-compile}]
[INFO] [cobertura:instrument {execution: instrument-late}]
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Unable to prepare instrumentation directory.
Embedded error: source and destination are the same directory.

Инструмент вызывается дважды, один на (я предполагаю) фазе по умолчанию, определеннойплагином, и еще один на моей переопределенной фазе.Я предполагаю, что это происходит из-за плагина, работающего во время жизненного цикла сайта.

ВОПРОС: Я не нашел, как настроить плагин в разделе отчетов / жизненном цикле сайта.Есть подсказки?

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

Я предполагаю здесь, но я думаю, что происходит то, что, поскольку цель cobertura выполняется в своем собственном жизненном цикле, этап инструментирования вызывается дважды, один раз из жизненного цикла maven и один раз из жизненного цикла cobertura.

0 голосов
/ 15 августа 2013

После нескольких попыток с Cobertura я переключился на JaCoCo - инструментарий на лету и возможность восстановления инструментированных классов.

Хотя я не пробовал предложенный вами cobertura-it .

Требуется только конфигурация, кроме добавления плагина:

<executions>
  <execution>
    <id>jacoco-initialize</id>
    <phase>initialize</phase> <!-- m2e complains if you skip, though mine complains on this either, had to mark it as ignored by m2e, feel free to omit the phase, defaults are fine -->
    <goals>
      <goal>prepare-agent</goal>
    </goals>
  </execution>
  <execution>
    <id>jacoco-site</id>
    <phase>package</phase>
    <goals>
      <goal>report</goal>
    </goals>
  </execution>
</executions>

Дополнительный бонус для меняявляется то, что у меня больше не было проблем с Java 1.7.

EDIT: изменена фаза для jacoco-initialize, предыдущая версия была неправильной: после mvn clean больше не будет создаваться файл jacoco.exec, что приведет к отсутствию отчетов о покрытии,

...