2012-06-18 83 views
2

爲了簡單起見,我設置了一個Sonar項目(使用delphi插件),假定有兩個模塊需要報告。使用Ant配置聲吶模塊的build.xml文件

每個模塊都在它自己的子文件夾中,每個模塊都有自己的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> 

和子模塊的一個文件

<?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> 

此時聲納進程正在成功完成,但沒有進行實際的分析。關鍵是我沒有看到子模塊的回顯,所以我懷疑這些構建任務並未實際運行。

+0

直到今天還沒有聽說過。感謝提醒我它的存在。 –

+1

...標籤在master build.xml中是否需要?你可以做的另一件事是用調試標誌運行ant,比如'ant -d'。這會在執行任務期間轉儲更多關於正在發生的事情的信息,並希望給您更多提示。 – Hendra

+0

'value =「delph」'是一個錯字嗎?它看起來像我失蹤。 – mjn

回答

3

如果你看看this sample project using Ant and multimodules,我會說你不應該在你的master build.xml文件中的標籤內指定任何屬性,並讓子模塊指定這些屬性。

+0

好吧,這真的很有幫助,我已經簡化了文件,但是我沒有從子模塊獲得結果,我可以從主文件中看到回顯任務,但不能從子模塊中看到回顯任務 - 我將用新的文件。 –

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> 

在聲納無屬性定義:聲納任務可言的,它是工作,我希望它。

源在子模塊build.xml文件中定義。 (實際上,在一個base-build.xml中,我們所有的build.xml文件都包含了...但這是一個與Sonar沒有直接關係的螞蟻。)