2

状況

Flex-Mojos を使用して、Maven ビルド ジョブからFlexUnitによって生成されたコード カバレッジ レポートをSonarに表示させようとしていますが、うまくいきません。


ビルド出力

その結果、ダッシュボードには常に次のように表示されます (左側の列): ソナー プロジェクト ダッシュボード (いいえ、単体テストは 90 分以上実行されず、16 秒以上実行されません。何が問題なのかわかりません)

Sonar 関連のコンソール出力は次のとおりです。 Maven コンソール出力 したがって、すべて正常に動作しているようです (Cobertura 以外のファイルが見つからないエラーはなく、どのような方法でも取り除くことができないようです。解析例外などはありません)。


ビルドのセットアップ

プロジェクトのpom.xmlビルドに使用される は次のようになります。

<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>
    <parent>
        <groupId>foo</groupId>
        <artifactId>parent</artifactId>
        <version>1.0.3</version>
    </parent>
    <groupId>foo</groupId>
    <artifactId>bar</artifactId>
    <version>0.1.0-SNAPSHOT</version>
    <packaging>swc</packaging>
    <name>Bar</name>
    <dependencies>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito</artifactId>
            <version>1.4M5</version>
            <type>swc</type>
            <scope>external</scope>
        </dependency>
        <dependency>
            <groupId>com.adobe.flexunit</groupId>
            <artifactId>flexunit</artifactId>
            <version>4.1.0-8</version>
            <classifier>flex</classifier>
            <type>swc</type>
            <scope>external</scope>
        </dependency>
    </dependencies>
    <build>
        <testSourceDirectory>src/test/flash</testSourceDirectory>
        <plugins>
            <plugin>
                <groupId>org.sonatype.flexmojos</groupId>
                <artifactId>flexmojos-maven-plugin</artifactId>
                <version>4.2-beta</version>
                <configuration>
                    <coverage>true</coverage>
                    <debug>false</debug>
                    <optimize>true</optimize>
                    <omitTraceStatements>true</omitTraceStatements>
                    <verboseStacktraces>false</verboseStacktraces>
                    <defines>
                        <property>
                            <name>CONFIG::BUILD</name>
                            <value>"${project.version}"</value>
                        </property>
                    </defines>
                </configuration>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>asdoc</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>${project.build.directory}/asdoc/tempdita</directory>
                <targetPath>docs</targetPath>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <excludes>
                    <exclude>ASDoc_Config.xml</exclude>
                    <exclude>overviews.xml</exclude>
                </excludes>
            </resource>
        </resources>
    </build>
    <properties>
        <sonar.language>flex</sonar.language>
        <sonar.sources>src/main/flash</sonar.sources>
        <sonar.tests>src/test/flash</sonar.tests>
        <sonar.surefire.reportsPath>target/surefire-reports</sonar.surefire.reportsPath>
    </properties>
</project>

Sonar を実行するいくつかの方法を試しました。

  1. dynamicAnalysis=reuseReports+ mvn clean install+mvn sonar:sonar

  2. dynamicAnalysis=true+mvn clean install sonar:sonar -Dmaven.test.failure.ignore=true

  3. dynamicAnalysis=true+ mvn clean install -DskipTests=true+ (<-- は機能しません: このシナリオでは、何らかの理由で、Flex-Mojos のゴールmvn sonar:sonarの実行中に単体テストが NullPointerException で実行に失敗します)。test-run


Sonar ダッシュボードでカバレッジ結果を表示する方法はありますか? 標準の Surefire レポートを表示するには、追加のプラグイン (Emma、Clover など) が必要ですか? これが機能しない既知の問題はありますか? 私は何か間違ったことをしていますか?


アップデート

Sonar-Runner で Sonar を実行してみました。興味深いことに、ダッシュボードはコード カバレッジ ウィジェットを完全に削除します。ランナーのコンソール出力を確認すると、ランナーがFlexSurefireSensor( sonar:sonarMaven ゴールが実行する) を実行しないことが示されます。

sonar-runner のコンソール出力

sonar-project.propertiesファイルには次が含まれます。

sonar.projectKey=foo:bar
sonar.projectName=Bar
sonar.projectVersion=0.1.0-SNAPSHOT

sonar.language=flex
sources=src/main/flash
tests=src/test/flash

sonar.dynamicAnalysis=reuseReports
sonar.surefire.reportsPath=target/surefire-reports

私はそれにmvn clean install続いてそれを実行していsonar-runnerます。

4

2 に答える 2

2

コード カバレッジを取得するには、次のプロパティを追加する必要があります。

<sonar.cobertura.reportPath>target/site/coverage-cobertura/coverage.xml</sonar.cobertura.reportPath>

(または、カバレッジ ファイルへのパスが何であれ)。

これは、プラグインのホームページに記載されています。

于 2013-04-03T08:45:30.483 に答える
1

あなたのPOMに欠けているプロパティはsonar.dynamicAnalysisだと思います:

<properties>
    ..
    <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
    <sonar.surefire.reportsPath>target/surefire-reports</sonar.surefire.reportsPath>
</properties>

Flex プラグインのドキュメントでは、ユニット テストとコード カバレッジ レポートを有効にする方法について説明しています。Java Runner の使用も推奨されていますが、機能的には Maven プラグイン ランチャーと同様である必要があります。

于 2012-09-10T18:29:10.803 に答える