2009-05-21 183 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