java - Eclipse ANT 构建错误

标签 java eclipse ant

我是 ANT 构建的新手,我遇到了一些问题,当我尝试构建时,我收到一条消息:

构建失败 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 加载构建文件时,它将尝试验证在项目级别定义的所有内容。在这种情况下,它会失败,因为 init 目标尚未运行并且 xdoclet.classpath 路径未定义。

如果您只是将路径元素移到项目级别,就像任务定义一样,问题就会消失。

关于java - Eclipse ANT 构建错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29473801/

相关文章:

unix - Ant 脚本。在构建期间获取磁盘可用空间

java - 使用来自 Team Build Extensions 2010 的 ANT 构建 Java

java - 添加 admob jar 文件和类未找到错误

java - 如何一次读取数组的所有元素并确定数组中已存在的内容?

java - 拉动后 eclipse mercurial 冲突 : how to pick remote file

java - Eclipse:无法探索我的项目,无法生成资源文件

java - Eclipse 无法构建类

java - WLST ant 任务未找到 classpathref

java - 过去 24 小时的总计时间

java - 限制两个作业不能在 Quartz-Scheduler 中同时运行