【问题标题】:Configuration of build.xml file for Sonar modules with Ant使用 Ant 为 Sonar 模块配置 build.xml 文件
【发布时间】:2012-06-20 07:27:58
【问题描述】:

我正在建立一个 Sonar 项目(使用 delphi 插件),为简单起见假设我要报告两个模块。

每个模块都在自己的子文件夹中,并且每个模块都有自己的 build.xml 文件。

此时我可以成功运行声纳任务并为每个模块生成报告作为一个独立的项目。

我的问题在于配置“master”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>

此时声纳过程已成功完成,但没有进行实际分析。关键是我没有看到子模块的回声,所以我怀疑这些构建任务实际上并没有运行。

【问题讨论】:

  • 直到今天才听说过这个。感谢您提醒我它的存在。
  • 主 build.xml 中是否需要 ... 标签?您可以做的另一件事是使用调试标志运行 ant,例如“ant -d”。这将转储有关执行任务期间发生的更多信息,并希望给您更多提示。
  • value="delph" 是错字吗?看起来 i 不见了。

标签: delphi ant sonarqube


【解决方案1】:

如果您查看this sample project using Ant and multimodules,我会说您不应该在主 build.xml 文件的标记内指定任何属性,而让子模块指定这些属性。

【讨论】:

  • 好的,这真的很有帮助,我现在已经简化了文件,但是我没有从子模块中得到任何结果,我可以看到主文件中的 echo 任务,但看不到子模块中的 echo 任务- 我将使用新文件更新问题。
【解决方案2】:

我有一个包含许多子模块的项目。我的声纳目标如下所示:

<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 中……但那是 Ant 的东西,与 Sonar 没有直接关系。)

【讨论】:

    猜你喜欢
    • 2017-05-31
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多