首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SonarQube -基于文件系统层次结构的多模块项目

SonarQube -基于文件系统层次结构的多模块项目
EN

Stack Overflow用户
提问于 2013-10-15 20:34:09
回答 2查看 5.9K关注 0票数 0

一些名为Foo的cvs资源库有几个模块,f.e。module1,module2,。

buildscript为所有模块进行cvs签出、编译和构建module.jar。

构建完成后,文件系统如下所示:

代码语言:javascript
复制
Foo/module1/src
           /bin
   /module2/src
           /bin
   ...

现在我想用这样的声纳任务:

定义像sonar.username这样的全局声纳属性..。sonar.projektName=Foo for MainProject和sonar.modules=module1.module2 .为了模块。

然后遍历模块文件夹,设置模块特定的声纳属性,

如sonar.projectName (用于模块名)、sonar.sources、sonar.binaries等。

循环工作很好,但似乎声纳需要为每个子模块提供一个build.xml。

所以我需要另一个分组模块的可能性。

我只找到了一个商业插件=> 投资组合管理插件,但需要另一个解决方案。

-编辑--

我已经找到并尝试使用来自github文档的示例,但它们似乎

在每个模块文件夹中需要一个主构建文件和一个build.xml。

而我的处境却不同。只有一个build.xml为我的项目的每个模块包含一个javac + jar目标。构建完成后,生成的文件系统与上面提到的类似。

构建是由xmlproperty文件驱动的部署工作流的一部分,其中包含项目名称和部署作业的所有模块名。

现在,构建完成后,在下一个antfile中,我希望通过xmltask遍历xmlproperty文件中的模块,将模块特定的属性指向文件系统f.e。源=/Foo/module1 1/src sonar.binary=/Foo/module1 1/bin并调用<sonar:sonar/>。在循环中重写模块特定的属性是通过弗拉卡 <let>完成的。

毕竟,它只是遍历现有的文件系统,设置声纳操作,并使用许可属性调用声呐任务。

--评论后编辑--

就这样尝试过:

build.xml

代码语言:javascript
复制
<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>

产出:

代码语言:javascript
复制
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文件夹都不工作。

EN

回答 2

Stack Overflow用户

发布于 2013-10-17 09:55:53

见文档:http://docs.codehaus.org/display/SONAR/Analyzing+with+SonarQube+Ant+Task#AnalyzingwithSonarQubeAntTask-Multi-moduleProject

例子:https://github.com/SonarSource/sonar-examples/tree/master/projects/multi-module/ant

票数 2
EN

Stack Overflow用户

发布于 2014-01-28 20:38:41

我也有过类似的问题。当您从eclipse运行ant任务时,不会显示声纳错误。因此,当从命令控制台执行ant ask时,我发现了这个问题。

我有两个问题:

  1. sonar.host.url属性是强制性的。
  2. 例如,sonar.projectKey不能包含特殊字符。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19390517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档