2011-05-07 169 views
2

我的build.XML如下所示。如何使用Ant使用外部jar文件創建jar

<property name="src.dir"  value="src"/> 
<property name="lib.dir"  value="lib"/> 
<property name="build.dir" value="build"/> 
<property name="classes.dir" value="${build.dir}/classes"/> 
<property name="jar.dir"  value="${build.dir}/jar"/> 
<property name="main-class" value="HighAvailablity"/> 

<path id="classpath"> 
    <fileset dir="${lib.dir}" includes="**/*.jar"/> 
</path> 

<target name="clean"> 
    <delete dir="${build.dir}"/> 
</target> 

<target name="compile"> 
    <mkdir dir="${classes.dir}"/> 
    <javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath"/> 
</target> 

<target name="jar" depends="compile"> 
    <mkdir dir="${jar.dir}"/> 
    <jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}"> 
     <manifest> 
      <attribute name="Main-Class" value="${main-class}"/> 
     </manifest> 
    </jar> 
</target> 

<target name="run" depends="jar"> 
    <java fork="true" classname="${main-class}"/> 
    <classpath> 
     <path refid="classpath"/> 
     <path location="${jar.dir}/${ant.project.name}.jar"/> 
    </classpath> 
</target> 

<target name="clean-build" depends="clean,jar"/> 

<target name="main" depends="clean,run"/> 

當使用ant命令來運行,我得到了下面的錯誤。

Could not create task or type of type: classpath. 

Ant could not find the task or a class this task relies upon. 

This is common and has a number of causes; the usual 
solutions are to read the manual pages then download and 
install needed JAR files, or fix the build file: 
- You have misspelt 'classpath'. 
    Fix: check your spelling. 
- The task needs an external JAR file to execute 
    and this is not found at the right place in the classpath. 
    Fix: check the documentation for dependencies. 
    Fix: declare the task. 
- The task is an Ant optional task and the JAR file and/or libraries 
    implementing the functionality were not found at the time you 
    yourself built your installation of Ant from the Ant sources. 
    Fix: Look in the ANT_HOME/lib for the 'ant-' JAR corresponding to the 
    task and make sure it contains more than merely a META-INF/MANIFEST.MF. 
    If all it contains is the manifest, then rebuild Ant with the needed 
    libraries present in ${ant.home}/lib/optional/ , or alternatively, 
    download a pre-built release version from apache.org 
- The build file was written for a later version of Ant 
    Fix: upgrade to at least the latest release version of Ant 
- The task is not an Ant core or optional task 
    and needs to be declared using <taskdef>. 
- You are attempting to use a task defined using 
    <presetdef> or <macrodef> but have spelt wrong or not 
    defined it at the point of use 

Remember that for JAR files to be visible to Ant tasks implemented 
in ANT_HOME/lib, the files must be in the same directory or on the 
classpath 

Please neither file bug reports on this problem, nor email the 
Ant mailing lists, until all of these causes have been explored, 
as this is not an Ant bug. 

Total time: 2 seconds 

如何解決此問題?

回答

1

貌似在run目標小錯誤 - 類路徑應該是java任務的子元素,如:

<java fork="true" classname="${main-class}"> 
    <classpath> 
     <path refid="classpath"/> 
     <path location="${jar.dir}/${ant.project.name}.jar"/> 
    </classpath> 
</java> 

否則螞蟻解釋目標作爲Java任務後跟一個類路徑的任務 - 並且沒有類路徑任務。

這是最糟糕的錯誤消息之一 - 在新版本的Ant中,它被錯誤地'縮短'了。

+0

雅...它的工作很好.....感謝您的快速響應.... – ssbecse 2011-05-07 07:44:53