尝试执行ant脚本时收到错误消息: 元素“sonar:sonar”的前缀“sonar”不受约束。
我知道我的蚂蚁设置正确,因为当我取出以下声纳部件时,它构建得很好,并且声纳设置正确,因为我已经成功地用maven分析项目。
在代码中添加了以下三个代码段:
**<!-- Define the Sonar properties -->
<property name="sonar.projectKey" value="org.codehaus.sonar:example-java-ant" />
<property name="sonar.projectName" value="Simple Java Project analyzed with the Sonar Ant Task" />
<property name="sonar.projectVersion" value="1.0" />
<property name="sonar.language" value="java" />
<property name="sonar.sources" value="${source.dir}" />
<property name="sonar.binaries" value="${libs.dir}" />
<property name="sonar.sourceEncoding" value="UTF-8" />
<!-- Add your basic Sonar configuration below: sonar.jdbc.url, sonar.jdbc.username, etc. properties -->
<property name="sonar.jdbc.url" value="jdbc:sqlserver://server;databaseName=Sonar;selectMethod=cursor;" />
<property name="sonar.jdbc.username" value="sonar" />
<property name="sonar.jdbc.password" value="sonarPass" />
然后我创建了一个新目标并在我的构建顺序中添加了声纳。
<!-- ========= Define Sonar target ========= -->
<target name="sonar" depends="compile">
<taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
<!-- Update the following line, or put the "sonar-ant-task-*.jar" file in your "$HOME/.ant/lib" folder -->
<classpath path="C:\sonarqube-4.1\lib\sonar-ant-task-2.1.jar" />
</taskdef>
<!-- Execute Sonar -->
<sonar:sonar />
</target>
错误发生在<sonar:sonar />
行,由于它在没有运行任何其他任务的情况下快速中断,我猜测问题出在预编译器中找到库。
我已经在尽可能多的地方放置了sonar-ant-task-2.1.jar,尝试通过环境变量添加到我的路径中,并尝试了几种不同的方式来指定路径。任何想法为什么蚂蚁没有采用图书馆或我如何进一步解决这个问题将不胜感激。
答案 0 :(得分:4)
这是一个XML解析错误。您需要在构建文件的顶部声明“sonar”命名空间:
<project .... xmlns:sonar="antlib:org.sonar.ant">
这是在任务名称前启用“声纳”前缀的原因。
<sonar:sonar/>
答案 1 :(得分:0)
我建议不要随意将jar文件添加到各种目录中 - 努力在你需要的地方准确地拥有你需要的东西,仅此而已。要了解Ant未找到Sonar任务的原因,您可以尝试以“详细”模式运行它:
ant -v
如果您可以使用Maven执行相同操作,则可以尝试
mvn -X
比较Maven如何成功。祝你好运!
答案 2 :(得分:0)
我使用了以下代码。它工作正常。
<!-- Define the SonarQube target -->
<target name="sonar" xmlns:sonar="antlib:org.sonar.ant">
<property name="mysonar.organizationName" value="myProject"/>
<property name="sonar.projectName" value="SonarDemo" />
<property name="sonar.projectKey" value="${mysonar.organizationName}:${sonar.projectName}" />
<!-- project version-->
<property name="sonar.projectVersion" value="1.0" />
<!-- location source files -->
<property name="sonar.sources" value="${src}" />
<!-- location of binaries after compilation-->
<property name="sonar.binaries" value="${build}"/>
<!-- location of sonar library-->
<sonar:sonar xmlns:sonar="antlib:org.sonar.ant">
</sonar:sonar>
</target>
答案 3 :(得分:0)
下面是使用ant和sonarqube
的代码<project name="abcPrj" basedir="." xmlns:sonar="antlib:org.sonar.ant">
<property name="src.dir" value="src" />
<property name="build.dir" value="target" />
<property name="classes.dir" value="${build.dir}/classes" />
<property name="lib.dir" value="web/WEB-INF/lib" />
<property name="webClasses.dir" value="web/WEB-INF/classes" />
<property name="tomcat.home" value="C:\apache-tomcat-8.0.28" />
<path id="tomcat.classpath">
<fileset dir="${tomcat.home}/bin">
<include name="**/*.jar" />
</fileset>
<fileset dir="${tomcat.home}/lib">
<include name="**/*.jar" />
</fileset>
</path>
<target name="clean">
<delete dir="${build.dir}" />
</target>
<target name="init">
<mkdir dir="${build.dir}" />
<mkdir dir="${classes.dir}" />
</target>
<target name="compile" depends="init">
<path id="java.classpath">
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
</path>
<javac destdir="${classes.dir}" fork="true" memoryInitialSize="512m" memoryMaximumSize="1024m" debug="true"
srcdir="${src.dir}">
<classpath refid="java.classpath" />
<classpath refid="tomcat.classpath" />
</javac>
<echo message="build done done done" />
</target>
<target name="sonar" depends="compile">
<taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
<classpath path="C:\dev\ant-libs\sonar-ant-task-2.2.jar" />
</taskdef>
<property name="sonar.host.url" value="http://localhost:9000" />
<property name="sonar.projectKey" value="com.abc:xyz" />
<property name="sonar.projectName" value="Example of SonarQube Scanner for Ant Usage" />
<property name="sonar.projectVersion" value="1.0" />
<property name="sonar.sources" value="${src.dir}" />
<property name="sonar.java.binaries" value="${webClasses.dir}" />
<property name="sonar.java.libraries" value="${lib.dir}/*.jar" />
<!-- Execute SonarQube Scanner for Ant Analysis -->
<sonar:sonar />
</target>
<target name="all" depends="clean, init, compile, sonar" />