我是ANT build的新手,在尝试构建时遇到麻烦:

建立失败
C:\ Users \ user \ Documents \ PM \ proyecto-base \ proyecto-base \ intranet \ build.xml:169:找不到参考xdoclet.classpath。

但是我已经在同一文件中声明了xdoclet.classpath。

我还拥有在build.properties文件中声明的$ {xdoclet.lib.dir}之类的属性。

这是我的build.xml文件

<?xml version="1.0" encoding="ISO-8859-1"?>

<!-- Ant Build File para Intranet -->
<project name="${project.name}" default="ear" basedir=".">

    <!-- Importar funcionalidad comun -->
    <import file="../common.xml" />
    <property name="jboss.security-domain" value="java:/jaas/NotificacionApplicationSecurity" />
    <target name="init">
        <path id="classpath">
            <fileset dir="${lib.dir}" />
            <fileset dir="${hibernate.dir}" />
            <fileset dir="${hibernate-annotations.dir}" />
            <fileset dir="${sri-adm.dir}" />
            <fileset dir="${sri-seguridad.dir}" />
            <fileset dir="${jsf.dir}" />
            <fileset file="${servicio.jar}" />
            <fileset file="${log4j.jar}" />
            <fileset file="${servlet.jar}" />
            <fileset file="${mail.jar}" />
            <fileset dir="${jboss.lib}">
                <include name="*.jar" />
            </fileset>
        </path>
        <path id="xdoclet.classpath">
            <fileset dir="${xdoclet.lib.dir}" />
            <pathelement location="${j2ee.jar}" />
            <pathelement location="${servlet.jar}" />
        </path>
    </target>

    <target name="clean" depends="init">
        <delete dir="../${build.dir}/intranet" />
        <delete dir="../${dist.dir}">
            <exclude name="${servicio.name}-${version}.jar"/>
        </delete>
    </target>


    <!--=============== Compile JAVA files ========================-->
    <target name="compile" description="Compile" >
        <echo message="Start compilation..." />
        <!-- compile project-->
        <mkdir dir="../${build.intranet.dir}/classes"/>
        <javac destdir="../${build.intranet.dir}/classes" target="1.5" debug="true" deprecation="false" optimize="false" failonerror="true">
            <src path="${src.main.java.dir}" />
            <classpath refid="classpath" />
        </javac>
    </target>

    <!--============== Genera archivos web==========-->
    <target name="webdoclet" description="Generar archivos XML Web y Struts" >
        <echo message="Generando Web" />
        <delete file="../${metadata.intranet.web.dir}/jboss-web.xml"/>
            <webdoclet destdir="../${metadata.intranet.web.dir}" force="${xdoclet.force}" mergedir="${conf.xdoclet.intranet.dir}">
                <fileset dir="${src.main.java.dir}">
                    <include name="**/*.java" />
                </fileset>
                <deploymentdescriptor displayname="SRI" description="" xmlencoding="ISO-8859-1"
                    validatexml="true" servletspec="2.4" sessiontimeout="60" destdir="../${metadata.intranet.web.dir}"
                    mergeDir="../${conf.xdoclet.intranet.dir}" distributable="false" />

                <facesconfigxml destinationfile="${project.name}-faces-config.xml" mergedir="../${metadata.intranet-jsf}" />
                <jbosswebxml
                    version="4.0"
                    mergeDir="${metadata.intranet-jbossweb}"
                    contextroot="${project.name}"
                    securitydomain="${jboss.security-domain}"
                    validateXML="true" xmlencoding="ISO-8859-1"/>
            </webdoclet>
            <replace file="../${metadata.intranet.web.dir}/jboss-web.xml" token="&lt;security-domain" value="&lt;security-domain flushOnSessionInvalidation=&quot;true&quot;" />

    </target>



    <target name="build" depends="init,webdoclet" description="Compila las clases">
        <mkdir dir="../${classes.dir}" />
        <javac destdir="../${classes.dir}" debug="on" deprecation="on" optimize="off" target="1.5" encoding="ISO-8859-1">
            <src path="${src.main.java.dir}" />
            <classpath refid="classpath" />
            <classpath refid="xdoclet.classpath" />

            <!-- Descomentar si se quieren ver los Warnings -->
            <!--compilerarg value="-Xlint:unchecked" /-->
        </javac>
    </target>

    <!--=============  Genera un archivo WAR del proyecto =============================-->

    <target name="war" description="Packages app as WAR" depends="compile, webdoclet">
        <echo message="Generando WAR..." />
        <mkdir dir="../${dist.dir}/intranet" />
        <copy todir="../${metadata.tmp.intranet.dir}">
            <fileset dir="../${metadata.intranet.web.dir}" />
            <filterset>
                <filter token="project.name" value="${project.name}"/>
            </filterset>
        </copy>
        <copy file="../${conf.intranet.dir}/jboss-web.xml" todir="../${metadata.tmp.intranet.dir}">
            <filterset>
                <filter token="project.name" value="${project.name}"/>
            </filterset>
        </copy>

        <war destfile="../${dist.dir}/intranet/${webapp.intranet.name}.war" webxml="../${metadata.intranet.web.dir}/web.xml">
            <classes dir="../${build.intranet.dir}/classes">
                <include name="**/**/controladores/*.*"/>
                <include name="**/**/web/**/*.*"/>
                <include name="**/**/validadores/**/*.*"/>
                <include name="**/**/convertidores/**/*.*"/>
                <exclude name="**/**/internet/**/*.*"/>
            </classes>
            <classes dir="../intranet/src/main/java">
                <include name="**/**/*.properties"/>
            </classes>
            <fileset dir="${src.main.webapp.dir}">
                <include name="**/*.*" />
            </fileset>

            <lib dir="${jsf.dir}" >
                <include name="rich*.jar" />
                <include name="jsf*facelet*.jar" />
            </lib>
            <lib dir="${sri-seguridad.dir}" >
                <include name="seguridad*.jar" />
            </lib>


            <lib dir="${lib.dir}" >
                <include name="commons-digester.jar" />
                <include name="commons-beanutils.jar" />
                <include name="commons-fileupload.jar" />
                <include name="commons-el.jar" />
                <include name="commons-lang-2.1.jar" />
            </lib>

            <!-- Archivos de configuracion en WEB-INF -->
            <webinf file="../${metadata.tmp.intranet.dir}/web.xml" />
            <webinf file="../${metadata.tmp.intranet.dir}/${project.name}-faces-config.xml" />
            <webinf file="../${metadata.tmp.intranet.dir}/jboss-web.xml" />
        </war>
        <delete dir="../${metadata.tmp.intranet.dir}" />
    </target>

    <target name="ear" depends="war">
        <mkdir dir="../${metadata.intranet-ejb.tmp}" />
        <copy todir="../${metadata.intranet-ejb.tmp}">
            <fileset dir="../${metadata.intranet-ejb}" />
            <filterset>
                <filter token="project.name" value="${project.name}"/>
                <filter token="intranet.name" value="${intranet.name}"/>
            </filterset>
        </copy>
        <ear destfile="../${dist.dir}/intranet/${webapp.intranet.name}.ear" appxml="../${metadata.intranet-ejb.tmp}/application.xml">
            <fileset dir="../${dist.dir}" includes="*.jar"/>
            <fileset dir="../${dist.dir}/intranet" includes="*.war"/>

        </ear>
        <delete dir="../${metadata.intranet-ejb.tmp}" />
    </target>


    <target name="deploy" depends="ear" description="Copia el archivo WAR en el directorio deploy del server">
        <copy file="../${dist.dir}/intranet/${webapp.intranet.name}.ear" todir="${jboss.deploy.intranet.dir}" />
    </target>

    <!-- Definición de WebDoclet -->
    <taskdef name="webdoclet" classname="xdoclet.modules.web.WebDocletTask">
        <classpath>
            <path refid="xdoclet.classpath" />
            <path refid="classpath" />
        </classpath>
    </taskdef>



    <!-- Definicion de JSF -->

    <taskdef name="facesconfigxml" classname="xdoclet.modules.jsf.FacesConfigXmlSubTask">
        <classpath>
            <path refid="xdoclet.classpath" />
            <path refid="classpath" />
        </classpath>
    </taskdef>
</project>


返回错误的行如下:

<!-- Definición de WebDoclet -->
<taskdef name="webdoclet" classname="xdoclet.modules.web.WebDocletTask">
    <classpath>
        <path refid="xdoclet.classpath" />
        <path refid="classpath" />
    </classpath>
</taskdef>


但正如我告诉您的那样,我在一开始就已经在同一文件中声明了xdoclet.classpath:

 <path id="xdoclet.classpath">
            <fileset dir="${xdoclet.lib.dir}" />
            <pathelement location="${j2ee.jar}" />
            <pathelement location="${servlet.jar}" />
        </path>


有人可以帮我解决这个问题吗?非常感谢

最佳答案

这里的问题是您的路径定义在目标“ init”的内部,但是taskdef定义在项目级别的任何目标的外部。当ant加载构建文件时,它将尝试验证在项目级别定义的所有内容。在这种情况下,它会失败,因为初始化目标尚未运行并且未定义xdoclet.classpath路径。

如果仅像taskdef一样将path元素移到项目级别,则问题应该消失了。

07-26 06:00