我正在使用build.xml处理项目以生成JAR文件。 当我尝试构建它时,我收到此错误:
构建文件:D:\ xxxxx \ trunk \ project-java \ build.xml
BUILD FAILED D:\ xxxxxtrunk \ project-java \ build.xml:25:参考 找不到task.path。
总时间:140毫秒
Build.xml与崩溃的行。
<?xml version="1.0"?>
<project name="xxxxx" default="prepare-release" basedir=".">
<property name="project.dir" value="."/>
<property file="${project.dir}/build.properties"/>
<property file="${project.dir}/svn.properties"/>
<property name="dist.dir" value="${project.dir}/dist"/>
<property name="build.dir" value="${project.dir}/build"/>
<property name="src.dir" value="${dist.dir}/${dist.type}/src"/>
<property name="release.dir" value="${project.dir}/release"/>
<!-- load svn tasks -->
// Pb on this line
<typedef resource="org/tigris/subversion/svnant/svnantlib.xml"
classpathref="task.path" />
它能是什么?谢谢你的帮助。
答案 0 :(得分:1)
BUILD FAILED D:\ xxxxxtrunk \ project-java \ build.xml:25:找不到参考task.path。
那么,task.path
文件中定义的类路径build.xml
在哪里?
通过<taskdef>
定义任务时,您需要做几件事:
com.foo.bar.mytask
,然后给它起个名字。resource="org/tigris/subversion/svnant/svnantlib.xml"
正在做什么。你遗失的最后一个。您指定了对名为task.path
的类路径的引用,但没有实际定义该类路径。
你可以做几件事:
您可以将jar放入$ANT_HOME/lib
目录。当您通过<taskdef/>
定义任务时,Ant会自动查找。我并不喜欢这个,因为这意味着你建立起来并不适合其他用户。机器,因为他们可能没有安装那个罐子。
您可以定义类路径来查找它。
这是我的偏好,以及我通常如何做到这一点。
<taskdef resource="org/tigris/subversion/svnant/svnantlib.xml">
<classpath>
<fileset dir="${basedir}/antlib/svnant}"/>
</classpath>
</taskpath>
在您的项目中,创建一个名为${basedir}/antlib/svnant
的目录,并将此SVNAnt任务附带的所有五个jar放在该目录中。这样,您可选的构建任务所需的所有jar现在都在您的项目中。如果有人从版本控制系统中检出您的项目,他们会自动获得所需的任务罐。
我将所有可选的ant任务jar放在${basedir}/antlib
目录中,并将每个任务放在他们自己的目录中。
记得我说过你需要的一件事是指定包含任务的类吗?
以下是您在org/tigris/subversion/svnant/svnantlib.xml
中指定的svnant.jar
文件的内容:
<?xml version="1.0"?>
<antlib>
<!-- Tasks -->
<taskdef name="svn"
classname="org.tigris.subversion.svnant.SvnTask" />
<!-- Types -->
<typedef name="svnFileSet"
classname="org.tigris.subversion.svnant.types.SvnFileSet" />
<!-- Selectors -->
<typedef name="svnNormal"
classname="org.tigris.subversion.svnant.selectors.Normal" />
<typedef name="svnAdded"
classname="org.tigris.subversion.svnant.selectors.Added" />
<typedef name="svnReplaced"
classname="org.tigris.subversion.svnant.selectors.Replaced" />
<typedef name="svnModified"
classname="org.tigris.subversion.svnant.selectors.Modified" />
<typedef name="svnConflicted"
classname="org.tigris.subversion.svnant.selectors.Conflicted" />
<typedef name="svnIgnored"
classname="org.tigris.subversion.svnant.selectors.Ignored" />
<typedef name="svnUnversioned"
classname="org.tigris.subversion.svnant.selectors.Unversioned" />
<typedef name="svnLocked"
classname="org.tigris.subversion.svnant.selectors.Locked" />
<typedef name="svnMissing"
classname="org.tigris.subversion.svnant.selectors.Missing" />
<typedef name="svnDeleted"
classname="org.tigris.subversion.svnant.selectors.Deleted" />
<!-- Conditions -->
<typedef name="svnExists"
classname="org.tigris.subversion.svnant.conditions.Exists" />
</antlib>
它只是jar中类的任务名称映射。
答案 1 :(得分:1)
如果以下表格遗失或缺失,请添加或更正表格。除了@id
属性设置之外,请确保您没有尝试以某种方式识别它。
<path id="task.path">
...
</path>
如果找到但在超级项目中(通过ant
或antcall
任务调用当前项目),请将inheritrefs
属性设置为true
以通过沿着定义。
parallel
任务中也定义了相同的@id
值,完成的最后一个任务将覆盖其他参考。考虑清理一下以避免歧义。另请参阅:Ant objects and references: what is the scope of a reference's ID?