2

私はSonarプロジェクトを(delphiプラグインを使用して)セットアップしています。簡単にするために、レポートしたいモジュールが2つあると仮定します。

各モジュールは独自のサブフォルダーにあり、それぞれに独自のbuild.xmlファイルがあります。

この時点で、ソナータスクを正常に実行し、独立したプロジェクトとして各モジュールのレポートを生成できます。

私の問題は、「マスター」build.xmlファイルの構成にあります。

モジュールbuild.xmlファイルは次のようになります。

<?xml version="1.0"?>
<project name = "CRM" default = "sonar" basedir = ".">
    <!-- Add the Sonar task -->
    <taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
        <classpath path="c:/ANT/lib" />
    </taskdef>

    <target name="sonar">
        <property name="sonar.projectKey" value="EXO:CRM" />
        <property name="sonar.host.url" value="http://localhost:9000" />
        <sonar:sonar workDir="." key="CRM.key" version="0.1" xmlns:sonar="antlib:org.sonar.ant">
            <property key="sonar.sources" value="." />      <!-- project sources directories (required) -->
            <property key="sonar.language" value="delph" />                             <!-- project language -->
            <property key="sonar.delphi.codecoverage.excluded" value=".\tests" />           <!-- code coverage excluded directories -->
            <property key="sonar.importSources" value="true" />                         <!-- should we show sources or not? -->     
            <property key="sonar.delphi.sources.excluded" value="" />                       <!-- excluded directories -->
            <property key="sonar.delphi.sources.include" value=".\includes" />              <!-- include directories, "," separated -->
            <property key="sonar.delphi.sources.include.extend" value="true" />         <!-- should we extend includes in files? -->
        </sonar:sonar>
    </target>
</project>

「マスター」build.xmlは次のようになります。

<?xml version="1.0"?>
<project name = "EXO" default = "sonar" basedir = ".">
    <taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
        <classpath path="c:/ANT/lib" />
    </taskdef>

    <target name="sonar">
        <property name="sonar.modules" value="exonet6000/build.xml,CRM/build.xml" />
        <sonar:sonar workDir="." key="EXO.key" version="0.1" xmlns:sonar="antlib:org.sonar.ant">
            <!-- project sources directories (required) --> 
            <property key="sonar.sources" value="." />      
            <property key="sonar.language" value="delph" />
            <property key="sonar.importSources" value="true" /> 
            <property key="sonar.delphi.sources.excluded" value="" />                       
            <property key="sonar.delphi.sources.include" value=".\includes" />      
            <property key="sonar.delphi.sources.include.extend" value="true" />         
        </sonar:sonar>
    </target>
</project>

常にすべてのソース(必要な値)をスキャンしています。つまり、モジュールを尊重していません。現在これを機能させる唯一の方法は、このようにソースコードを制限することです。

<property key="sonar.sources" value="./crm/,./exonet6000/" />   

私はここで明白な何かを誤って構成しているに違いないと確信しています。

編集:ここにある例に基づいて、より一貫性のあるファイルのセットであると私が信じているものがありますhttps://github.com/SonarSource/sonar-examples/tree/master/projects/languages/java/java-ant-modules

マスタービルドファイル:

<?xml version="1.0" encoding="UTF-8"?>
<project name = "EXO" default = "sonar" basedir = "." xmlns:sonar="antlib:org.sonar.ant">
    <echo>Root Project</echo>

    <taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
        <classpath path="c:/ANT/lib" />
    </taskdef>

    <property name="sonar.host.url" value="http://localhost:9000" />
    <property name="sonar.modules" value="exonet6000/build.xml,CRM/build.xml" />

    <target name="sonar">
        <sonar:sonar key="EXO.key" version="0.1">   
        </sonar:sonar>
    </target>
</project>

およびサブモジュールファイルの1つ

<?xml version="1.0" encoding="UTF-8"?>
<project name="CRM" default="all" basedir=".">
    <echo>CRM Module</echo>

    <property name="sonar.language" value="delph" />
    <property name="sonar.projectKey" value="EXO:CRM" />
    <property name="sonar.sources" value="." /> 

    <target name="all" />
</project>

この時点で、ソナープロセスは正常に完了していますが、実際の分析は行われていません。重要な点は、サブモジュールのエコーが表示されていないため、これらのビルドタスクが実際に実行されていない可能性があることです。

4

2 に答える 2

3

Antとマルチモジュールを使用してこのサンプルプロジェクトを見る場合、マスターbuild.xmlファイルのタグ内にプロパティを指定しないでください。サブモジュールにそれらのプロパティを指定させてください。

于 2012-06-19T05:26:24.800 に答える
0

多くのサブモジュールを持つプロジェクトがあります。私のソナーターゲットは次のようになります。

<target name="sonar" depends="build.dependencies" description="collect code metrics">
    <property name="m1" value="a/build.xml,b/build.xml,c/build.xml,d/build.xml"/>
    ... more properties defining modules...
    <property name="sonar.modules" value="${m1},${m2},${m3},${m4},${m5},${m6}..."/>
    <property name="sonar.projectName" value="MyProject"/>
    <sonar:sonar key="my:project" version="${version}" xmlns:sonar="antlib:org.sonar.ant">
    </sonar:sonar>
</target>

sonar:sonarタスクにはプロパティ定義がまったくなく、希望どおりに機能しています。

ソースはサブモジュールbuild.xmlファイルで定義されます。(実際には、すべてのbuild.xmlファイルに含まれているbase-build.xmlには...しかし、これはSonarに直接関係しないAntのものです。)

于 2012-06-19T18:09:09.483 に答える