2009-05-21 125 views
1

我想制作一个非常简单的ant脚本,它执行1个任务,即创建一个jar文件。但是,当我尝试使用一个非常简单的示例时,由于我的源依赖于罐子上的依赖关系,它失败了。所以,你如何指定jar在构建Ant目标时需要在类路径中存在的jar。蚂蚁脚本示例

<project name="project" default="default"> 
<property name="src.dir"  value="src"/> 
<property name="build.dir" value="build"/> 
<property name="classes.dir" value="${build.dir}/classes"/> 
<property name="jar.dir"  value="${build.dir}/jar"/> 
<property name="lib.dir"  value="//tomcat/common/lib"/> 
<description> description </description> 

<!-- ================================= 
     target: default    
    ================================= --> 
<target name="default" depends="compile" description="description"> 
    <jar destfile="/path/to/dir/Library.jar"> 

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

</project> 
+0

你能后的例子吗?蚂蚁Jar任务本身不应该失败的依赖关系,也许你的构建文件也编译之前创建jar的src。如果是这种情况,您需要指定classpath属性。 – 2009-05-21 15:09:44

+0

所以,现在我们可以看到这个例子清楚地表明问题是缺少classpath属性的javac任务。 – 2009-05-21 15:22:43

回答

1

<javac srcdir="${src.dir}" destdir="${classes.dir}"> 
    <classpath> 
     <pathelement location="${lib.dir}/lib1.jar"/> 
     <pathelement location="${lib.dir}/lib2.jar"/> 
    </classpath> 
</javac> 
3

你的问题并不完全清楚 - 我怀疑你的意思是你要编译源(与javac任务)和然后建立从结果一个jar文件。如果情况并非如此,我不会看到您的源代码依赖关系在哪里。如果那的情况下,那么jar任务是无关紧要的。

javac任务中,使用classpath属性指定其他jar依赖项。

3

以下是使用Eclipse Runnable JAR导出向导生成的ANT脚本。这是一个项目,用于与一些朋友更新Google电子表格上的小幻想棒球联赛的统计数据。它通过刮取ESPN.com播放器页面获得统计信息。

manifest元素中的Class-Path属性用于设置jar使用的类路径。这默认“。”但我必须显式添加我的src路径,以便log4j可以选择log4j.properties。

zipfileset元素是我的来源使用的外部罐子,我想将其包含在我的罐子中。我怀疑这可能是你要找的。

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<project default="create_run_jar" name="Create Runnable Jar for Project cob_fantasy_baseball"> 
    <!--this file was created by Eclipse Runnable JAR Export Wizard--> 
    <!--ANT 1.7 is required          --> 
    <target name="create_run_jar"> 
     <jar destfile="C:/workspace/cob_fantasy_baseball/cob_fantasy_baseball.jar" filesetmanifest="mergewithoutmain"> 
      <manifest> 
       <attribute name="Built-By" value="${user.name}"/> 
       <attribute name="Main-Class" value="com.me.cob_fantasy_baseball.UpdateCobStats"/> 
       <attribute name="Class-Path" value=".;src/com/me/cob_fantasy_baseball"/> 
      </manifest> 
      <fileset dir="C:/workspace/cob_fantasy_baseball/classes"/> 
      <zipfileset excludes="META-INF/*.SF" src="C:/workspace/gdata/java/lib/gdata-core-1.0.jar"/> 
      <zipfileset excludes="META-INF/*.SF" src="C:/workspace/gdata/java/lib/gdata-spreadsheet-2.0.jar"/> 
      <zipfileset excludes="META-INF/*.SF" src="C:/workspace/jericho-html-2.6/lib/jericho-html-2.6.jar"/> 
      <zipfileset excludes="META-INF/*.SF" src="C:/workspace/apache-log4j-1.2.15/log4j-1.2.15.jar"/> 
      <zipfileset excludes="META-INF/*.SF" src="C:/workspace/jaf-1.1.1/activation.jar"/> 
      <zipfileset excludes="META-INF/*.SF" src="C:/workspace/javamail-1.4.2/mail.jar"/> 
      <zipfileset excludes="META-INF/*.SF" src="C:/workspace/javamail-1.4.2/lib/smtp.jar"/> 
      <fileset dir="C:/workspace/cob_fantasy_baseball/src/com/me/cob_fantasy_baseball"/> 
     </jar> 
    </target> 
</project> 

而且,这里有一个链接,为jar任务的Ant文档:根据你的例子你可以把库中的javac http://ant.apache.org/manual/Tasks/jar.html