Ant 蚂蚁设置错误的声纳

Ant 蚂蚁设置错误的声纳,ant,sonarqube,Ant,Sonarqube,尝试执行ant脚本时收到错误消息: 元素“sonar:sonar”的前缀“sonar”未绑定。 <!-- Define the SonarQube target --> <target name="sonar" xmlns:sonar="antlib:org.sonar.ant"> <property name="mysonar.organizationName" value="myProject"/> <property name=

尝试执行ant脚本时收到错误消息: 元素“sonar:sonar”的前缀“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>
我知道我的ant设置正确,因为当我取出以下声纳部件时,它构建得很好,而声纳设置正确,因为我已经成功地分析了maven的项目

<!-- 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>
向代码中添加了以下三个代码段:

 **<!-- 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 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>
**
然后我创建了一个新目标,并在我的建造顺序中添加了声纳

<!-- ========= 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>
<!-- 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>

错误发生在
行,由于它在没有运行任何其他任务的情况下很快中断,我猜问题出在找到库的预编译器中

<!-- 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>

我已经在尽可能多的地方放置了sonar-ant-task-2.1.jar,尝试通过环境变量添加到路径中,并尝试了几种不同的方法来指定路径。任何关于ant为什么不使用这个库的想法,或者我如何进一步解决这个问题的想法都将不胜感激。

我建议不要将jar文件不加选择地添加到不同的目录中——努力在需要的地方准确地获得所需的内容,而不要更多。为了理解为什么Ant找不到您的声纳任务,您可以尝试在“详细”模式下运行它:

<!-- 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>
如果你能对Maven做同样的事情,你可以试试

mvn -X
<!-- 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>

比较Maven是如何成功的。祝你好运

我建议不要不分青红皂白地将jar文件添加到不同的目录中——尽量在需要的地方准确地获得所需的jar文件,仅此而已。为了理解为什么Ant找不到您的声纳任务,您可以尝试在“详细”模式下运行它:

<!-- 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>
如果你能对Maven做同样的事情,你可以试试

mvn -X
<!-- 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>

比较Maven是如何成功的。祝你好运

这是一个XML解析错误。您需要在构建文件的顶部声明“sonar”命名空间:

<project .... xmlns:sonar="antlib:org.sonar.ant">
<!-- 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>

这就是在任务名称之前启用“sonar”前缀的原因

<sonar: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">
<!-- 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>

这就是在任务名称之前启用“sonar”前缀的原因

<sonar: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>

我使用了以下代码。它工作得很好。

<!-- 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>

我使用了以下代码。它工作得很好。

<!-- 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>

下面是使用ant和sonarqube的代码

<!-- 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>
<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" />


下面是使用ant和sonarqube工作的代码

<!-- 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>
<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" />


我应该提到我已经在详细模式下运行了,堆栈跟踪实际上是无用的。由org.xml.sax.SAXParseException引起。。。另外,为了澄清,我从未将jar放在多个地方,只是尝试将其移动并更改路径。我应该提到我已经在详细模式下运行了,堆栈跟踪实际上是无用的。由org.xml.sax.SAXParseException引起。。。同样要澄清的是,我从来没有把罐子放在多个地方,只是试着移动它,改变路径。你一针见血,非常感谢,先生。这是一个非常常见的问题!你一针见血,非常感谢,先生,这是一个很普通的问题!代替sonar命名空间的全局声明(在项目根标记处),直接在sonar:sonar任务中声明就足够了。代替sonar命名空间的全局声明(在项目根标记处),直接在sonar: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>