我是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="<security-domain" value="<security-domain flushOnSessionInvalidation="true"" />
</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元素移到项目级别,则问题应该消失了。