2013-10-15 30 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不能包含特殊字符,例如空间