我有一個在命令行上工作得很好的Ant build.xml
文件:編譯,構建JAR,並且能夠從JAR執行主方法。 build.xml
文件引用了分散在這裏和那裏的幾個第三方庫。在構建JAR時,腳本不會將所有第三方庫包含到JAR本身中。相反,它將它們的路徑放入JAR的清單中。這有助於保持我的JAR苗條和整齊。在Eclipse中使用Ant的類路徑
我希望能夠在Eclipse中編輯和調試我的項目,但我找不到一個簡單的方法來做到這一點。我可以讓我的項目使用Ant文件來構建項目,這似乎工作。然而,Eclipse是很難找到的第三方libaries,因此Eclipse的是有兩個問題:
- 它顯示(在文本編輯器)大量編譯錯誤的,因爲 很多類是不確定的,並且
- 它不能執行JAR。
我可以通過用手指定,在兩個差的地方同時解決上述問題(即,經由Properties->Java Build Path->Libraries
構建路徑,和經由Run Configurations->Classpath
執行類路徑)中,所有的第三方庫。但似乎我不應該手動執行此操作,因爲所有第三方庫都已列在我的JAR清單中。我究竟做錯了什麼?
這是我build.xml
文件:
<!-- Set global properties for this build -->
<property name="src" location="./src" />
<property name="build" location="./build"/>
<property name="dist" location="./dist"/>
<property name="logs" location="./logs"/>
<property name="docs" location="./docs"/>
<property name="jar" location="${dist}/dynamic_analyzer.jar"/>
<property name="lib" location="../../thirdparty/lib"/>
<property name="hive-util" location="../../hive-utils/dist"/>
<property name="hpdb" location="../../hive-db/hpdb/dist"/>
<property name="static" location="../../hive-backend/static_analyzer/dist"/>
<property name="mainclass" value="com.datawarellc.main.DynamicMain"/>
<path id="dep.runtime">
<fileset dir="${lib}" includes="**/*.jar"/>
<fileset dir="${hive-util}" includes="**/*.jar"/>
<fileset dir="${hpdb}" includes="**/*.jar"/>
<fileset dir="${static}" includes="**/*.jar"/>
</path>
<target name="clean">
<delete dir="${build}"/>
<delete dir="${dist}"/>
<delete dir="${docs}"/>
<delete dir="${logs}"/>
</target>
<target name="init">
<tstamp/>
<mkdir dir="${build}"/>
<mkdir dir="${dist}"/>
<mkdir dir="${logs}"/>
</target>
<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${build}" debug="on" includeantruntime="false">
<classpath refid="dep.runtime" />
</javac>
<!-- Debug output of classpath -->
<property name="myclasspath" refid="dep.runtime"/>
<echo message="Classpath = ${myclasspath}"/>
</target>
<target name="jar" depends="compile">
<!-- Put the classpath in the manifest -->
<manifestclasspath property="manifest_cp" jarfile="${jar}" maxParentLevels="10">
<classpath refid="dep.runtime" />
</manifestclasspath>
<jar jarfile="${jar}" basedir="${build}">
<manifest>
<attribute name="Main-Class" value="${mainclass}"/>
<attribute name="Class-Path" value="${manifest_cp}"/>
</manifest>
<zipfileset dir="${src}" includes="**/*.xml" />
</jar>
</target>
你可以看到,我有第三方庫的幾個目錄(${lib}
,${hive-util}
,${hpdb}
,並${static}
)。我使用這些來創建path
,稱爲dep.runtime
。然後在構建我的罐子時將dep.runtime
包含在清單中。 如何讓Eclipse在執行時爲構建路徑和類路徑使用相同的dep.runtime
?
這裏檢查文檔:http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Freference%2Fpreferences% 2Fjava%2Fbuildpath%2Fref-preferences-user-libraries.htm (我想這是一個答案,但我沒有安裝Eclipse) – leeand00
@ leeand00我沒有看到該文檔如何幫助我。鏈接所說的菜單正是我用來手動添加所有第三方庫的菜單(作爲臨時解決方法),但這正是我想要避免的。 – stepthom
應該有一個按鈕,說在那裏添加目錄或添加類路徑,這應該做的伎倆...讓我知道,如果它不。 – leeand00