2013-10-15 33 views
0

一些名爲Foo的cvsrepository有幾個模塊f.e. module1,module2,...
buildscript爲所有模塊執行cvs checkout,編譯和構建module.jar。構建完成
後的文件系統看起來像這樣:
SonarQube - 基於文件系統層次結構的多模塊項目

Foo/module1/src 
      /bin 
    /module2/src 
      /bin 
    ... 

現在我想用那樣的sonartask:
這樣定義sonar.username ... sonar.projektName =美孚全球聲納性能爲MainProject和sonar.modules = module1.module2,...爲模塊。
然後遍歷模塊文件夾,設置模塊特定聲納性能,
像sonar.projectName(用於MODULENAME)sonar.sources,sonar.binaries等
環接工作正常,但似乎聲納想要一個單一版本。每個子模塊都有xml。
所以我需要另一種分組模塊的可能性。
我只找到一個商業插件=>Portfolio Management plugin,但需要另一種解決方案。

- 編輯 -

我已經找到,並試圖用實例從githubdocumentation,但似乎他們
需要一個主構建文件,並在每個模塊文件夾中的build.xml文件。
鑑於我的情況不同。只有一個build.xml包含我項目中每個模塊的javac + jar目標。構建完成後,生成的文件系統如上所述。
構建是由xmlproperty文件驅動的部署工作流程的一部分,該文件包含項目名稱以及該部署作業的所有模塊名稱等等。
現在構建完成後,在下一個antfile中,我想通過xmltask遍歷該xmlproperty文件中的模塊,將模塊特定的屬性指向文件系統f.e. sonar.sources =/Foo/module1/src sonar.binaries =/Foo/module1/bin並致電<sonar:sonar/>。循環中模塊特定屬性的覆蓋是通過Flaka
完成的。畢竟它只是在現有文件系統上設置聲納屬性並用聲明屬性調用聲納任務。
- 評論後編輯 -
試了一下這樣的:
的build.xml

<project name="sonar" xmlns:fl="antlib:it.haefelinger.flaka" xmlns:sonar="antlib:org.sonar.ant"> 
    <fl:install-property-handler/> 

    <!-- Import Sonar --> 
    <taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml"/> 

    <!-- Import XMLTask --> 
    <taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/> 

    <xmltask source="C:/WKS/Eclipse/372/sonar/props.xml"> 
    <copy path="//project/name/text()" property="projectname"/> 
    <copy path="//module/*/label/text()" property="projectlabel"/> 
    <copy path="//module/*/name/text()" property="modules" append="true" propertyseparator="," /> 
    </xmltask> 

    <property name="sonar.projectKey" value="${projectname}"/> 

    <!-- Set modules IDs --> 
    <property name="sonar.modules" value="#{replace('${modules}', '', ' ')}"/> 

    <property name="sonar.language" value="java" /> 
    <property name="sonar.sourceEncoding" value="UTF-8" /> 
    <property name="sonar.host.url" value="http://somehost:9000" /> 
    <property name="sonar.login" value="admin" /> 
    <property name="sonar.password" value="admin" /> 

    <xmltask source="C:/WKS/Eclipse/372/sonar/props.xml"> 
    <call path="//module/*"> 
     <param path="label/text()" name="modullabel"/> 
     <param path="name/text()" name="modulname"/> 
     <actions> 
     <fl:let> 
      sonar.projectName ::= replace('@{modulname}', '', ' ') 
      sonar.projectVersion ::= '@{modullabel}' 
      sonar.#{replace('@{modulname}', '', ' ')}.projectBaseDir ::= '${ant.working.dir}/build/projects/${projectname}/@{modulname}' 
      sonar.sources ::= '${ant.working.dir}/build/projects/${projectname}/@{modulname}/src' 
      sonar.binaries ::= '${ant.working.dir}/build/results/compile/${projectname}/@{modulname}' 
     </fl:let> 
     <!-- Execute Sonar --> 
     <sonar:sonar /> 
     </actions> 
    </call> 
    </xmltask> 
</project> 

輸出:

Setting project property: modules -> Modul 1,Modul 2,Modul 3,Modul 4 
Setting project property: sonar.projectKey -> Foobar 
Setting project property: sonar.modules -> Modul1,Modul2,Modul3,Modul4 
Setting project property: ant.working.dir -> c:\WKS\5513 
Setting project property: sonar.language -> java 
Setting project property: sonar.sourceEncoding -> UTF-8 
Setting project property: sonar.host.url -> http://somehost:9000 
Setting project property: sonar.login -> admin 
Setting project property: sonar.password -> admin 
Setting project property: sonar.projectName -> Modul1 
Setting project property: sonar.projectVersion -> l_5_04_52_cd 
Setting project property: sonar.Modul1.projectBaseDir -> c:\WKS\5513/build/projects/foobar/Modul 1 
Setting project property: sonar.sources -> c:\WKS\5513/build/projects/foobar/Modul 1/src 
Setting project property: sonar.binaries -> c:\WKS\5513/build/results/compile/foobar/Modul 1 
parsing buildfile jar:file:/C:/WKS/Eclipse/372/DevJars/sonar/sonar-ant-task-2.1.jar!/org/sonar/ant/antlib.xml with URI = jar:file:/C:/WKS/Eclipse/372/DevJars/sonar/sonar-ant-task-2.1.jar!/org/sonar/ant/antlib.xml from a zip file 
Class org.sonar.ant.SonarTask loaded from parent loader (parentFirst) 
[sonar:sonar] Apache Ant(TM) version 1.9.1 compiled on May 15 2013 
[sonar:sonar] Sonar Ant Task version: 2.1 
[sonar:sonar] Loaded from: file:/C:/WKS/Eclipse/372/DevJars/sonar/sonar-ant-task-2.1.jar 
[sonar:sonar] INFO: Default locale: "de_DE", source code encoding: "UTF-8" 
[sonar:sonar] INFO: Work directory: C:\WKS\sonar 
[sonar:sonar] INFO: Sonar Server 3.7.2 

BUILD FAILED 
C:\WKS\Eclipse\372\sonar\sonar.xml:41: The following error occurred while executing this line: 
C:\WKS\Eclipse\372\sonar\sonar.xml:54: org.sonar.runner.impl.RunnerException: Unable to execute Sonar 
... 
Caused by: java.lang.IllegalStateException: The base directory of the module 'Modul1' does not exist: C:\WKS\Eclipse\372\sonar\Modul 1 

我想也設置BASEDIR屬性我的$ {ant.working.dir}(所有的二進制文件和src文件夾所在的位置)的值都不起作用。

回答

1
+0

謝謝,已經發現,但它對我不起作用,在我的答案中看到--EDIT--。 – Rebse

+0

在這種情況下,如果您想要在單個配置文件中配置所有內容,您還可以查看以下示例:https://github.com/SonarSource/sonar-examples/tree/master/projects/multi-module /聲納澆道。有基於SonarRunner,但您可以在Sonar Ant任務中執行完全相同的操作。 –

+0

感謝您的提示,已經嘗試在這個方向,看到第二編輯 - 但它沒有奏效。 – Rebse

1

我也有類似的問題。當您從eclipse運行ant任務時,不會顯示聲納錯誤。所以,當我從命令控制檯執行ant問題時,我發現了這個問題。

我有兩個問題:

  1. 的sonar.host.url屬性是強制性
  2. 的sonar.projectKey不能包含特殊字符,例如空間