2008年7月28日月曜日

mavenで各種Reportを生成するpom.xmlのTemplate その2

以前書いたエントリ「maven2.0.7で各種Reportを生成するpom.xmlのTemplate」のメンテナンス。以前のエントリでは、以下の問題がある事が判明した!参考にしてしまった人、ごめんなさい><
  • surefire-report:reportのからみで、testが二回実行されてしまう
  • target/site/cobertura/coverage.xmlが出力されないため、Hudsonのcobertura pluginからxmlを拾えない
テンプレートと書きつつ、実際はそれをメンテしつつ使っているから、エントリもメンテすべきだったのです。mavenについては、Wikiの方で更新をしていく事にします。このブログの情報を参考にされる方は、エントリと合わせてwikiも参照してください。

testが2回走ってしまう件

//reporting/plugins/pluginでsurefire-reportを設定するときに以下のよぅに設定します。
<!-- surefire-report: http://maven.apache.org/plugins/maven-surefire-report-plugin/ -->
<plugin>
  <artifactId>maven-surefire-report-plugin</artifactId>
  <reportSets>
    <reportSet>
      <reports>
        <report>report-only</report>
      </reports>
    </reportSet>
  </reportSets>
</plugin>
reportSetとか、そんなの知らなかったヨ!ちなみに、testフェーズだけ実行したときもsurefire-reportを走らせたければ、//build/plugins/pluginでsurefire-report pluginを以下のように設定すると、testを二回走らせずにreport出力ができますた。
<plugin>
  <artifactId>maven-surefire-report-plugin</artifactId>
  <executions>
    <execution>
      <phase>test</phase>
      <goals>
        <goal>report-only</goal>
      </goals>
    </execution>
  </executions>
</plugin>

target/site/cobertura/coverage.xmlが出力されない件

こちらは簡単。といぅか、前回のエントリに含まれていない方がどぅかしてた。//reporting/plugins/pluginでcoberturaの設定をする際に、configurationの子要素としてformats/formatを使って「xml」の出力を設定する必要があります。デフォルトではhtmlだけが出力されます。
<!-- cobertura: http://mojo.codehaus.org/cobertura-maven-plugin/ -->
<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>cobertura-maven-plugin</artifactId>
  <configuration>
    <formats>
      <format>xml</format>
      <format>html</format>
    </formats>
  </configuration>
</plugin>

まとめ

2点の問題の修正を反映し、各pluginの不要な設定を極力はずしたものがコチラ。plugin間のversionの問題は相変わらずシビアっぽいので、例えばfindbugsの結果レポートがdashboardに乗ってこない、等の症状は出ますが、それはとりあえず無視してます。
<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/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>
  <groupId>com.shin1o</groupId>
  <artifactId>com.shin1o.reportsample</artifactId>
  <packaging>jar</packaging>
  <version>1.0.0-SNAPSHOT</version>
  <name>com.shin1o.reportsample</name>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.4</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <!-- http://maven.apache.org/plugins/maven-compiler-plugin/ -->
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <encoding>UTF-8</encoding>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
      <!-- surefire: http://maven.apache.org/plugins/maven-surefire-plugin/ -->
      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <systemProperties>
            <property>
              <name>net.sourceforge.cobertura.datafile</name>
              <value>${basedir}/target/cobertura/cobertura.ser</value>
            </property>
          </systemProperties>
          <!-- スラッシュ区切り、javaを指定。
          <excludes>
            <exclude>com/shin1o/exclude/**/*.java</exclude>
          </excludes>
          -->
        </configuration>
      </plugin>
      <!-- surefire-report: http://maven.apache.org/plugins/maven-surefire-report-plugin/ -->
      <!-- testフェーズでもsurefire-reportが必要なら有効にする。
      <plugin>
        <artifactId>maven-surefire-report-plugin</artifactId>
        <executions>
          <execution>
            <phase>test</phase>
            <goals>
              <goal>report-only</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      -->
    </plugins>
  </build>

  <reporting>
    <plugins>
      <!-- cobertura: http://mojo.codehaus.org/cobertura-maven-plugin/ -->
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>cobertura-maven-plugin</artifactId>
        <configuration>
          <formats>
            <format>xml</format>
            <format>html</format>
          </formats>
          <instrumentation>
            <!-- ignoreはパッケージ名で指定。
            <ignores>
              <ignore>com.shin1o.exclude.*</ignore>
            </ignores>
            -->
            <!-- includes/excludesはスラッシュ区切り,classを指定
            <includes>
              <include>com/shin1o/include/**/*.class</include>
            </includes>
            <excludes>
              <exclude>**/*Test*.class</exclude>
            </excludes>
            -->
          </instrumentation>
        </configuration>
      </plugin>
      <!-- surefire-report: http://maven.apache.org/plugins/maven-surefire-report-plugin/ -->
      <plugin>
        <artifactId>maven-surefire-report-plugin</artifactId>
        <reportSets>
          <reportSet>
            <reports>
              <report>report-only</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>
      <!-- jxr: http://maven.apache.org/plugins/maven-jxr-plugin/ -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jxr-plugin</artifactId>
        <configuration>
          <inputEncoding>UTF-8</inputEncoding>
          <outputEncoding>UTF-8</outputEncoding>
        </configuration>
      </plugin>
      <!-- jdepend: http://mojo.codehaus.org/jdepend-maven-plugin/ -->
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>jdepend-maven-plugin</artifactId>
      </plugin>
      <!-- pmd/cpd: http://maven.apache.org/plugins/maven-pmd-plugin/ -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-pmd-plugin</artifactId>
        <configuration>
          <linkXref>true</linkXref>
          <sourceEncoding>UTF-8</sourceEncoding>
          <minimumTokens>100</minimumTokens>
          <targetJdk>1.5</targetJdk>
        </configuration>
      </plugin>
      <!-- findbugs http://mojo.codehaus.org/findbugs-maven-plugin/ -->
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>findbugs-maven-plugin</artifactId>
        <configuration>
          <xmlOutput>true</xmlOutput>
          <effort>Max</effort>
        </configuration>
      </plugin>
      <!-- dashboard: http://maven.apache.org/plugins/dashboard-maven-plugin/ -->
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>dashboard-maven-plugin</artifactId>
      </plugin>
      <!-- site: http://maven.apache.org/plugins/maven-site-plugin/ -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-site-plugin</artifactId>
        <configuration>
          <inputEncoding>UTF-8</inputEncoding>
          <outputEncoding>UTF-8</outputEncoding>
        </configuration>
      </plugin>
      <!-- project-info: http://maven.apache.org/plugins/maven-project-info-reports-plugin/ -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-project-info-reports-plugin</artifactId>
      </plugin>
    </plugins>
  </reporting>

  <repositories>
    <repository>
      <id>Maven Snapshots</id>
      <url>http://snapshots.maven.codehaus.org/maven2/</url>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
      <releases>
        <enabled>false</enabled>
      </releases>
    </repository>
  </repositories>

  <pluginRepositories>
    <pluginRepository>
      <id>Codehaus Snapshots</id>
      <url>http://snapshots.repository.codehaus.org/</url>
    </pluginRepository>
  </pluginRepositories>
</project>
コメントを投稿