我建议不要随意将jar文件添加到各种目录中 - 努力在你需要的地方准确地拥有你所需要的东西,仅此而已。要了解Ant未找到Sonar任务的原因,您可以尝试以“详细”模式运行它:
ant -v
如果你可以和Maven一样,你可以试试
mvn -X
比较Maven如何成功。祝好运!
下面是使用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" />
我使用了以下代码。它工作正常。
<!-- 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>
这是一个XML解析错误。您需要在构建文件的顶部声明“sonar”命名空间:
<project .... xmlns:sonar="antlib:org.sonar.ant">
这是在任务名称之前启用“声纳”前缀的原因。
<sonar:sonar/>