私は、コマンドラインでうまく動作するAnt build.xml
ファイルを持っています。コンパイルしてJARをビルドします.JARからmainメソッドを実行することができます。 build.xml
ファイルは、ここやそこに散在する第三者のライブラリを参照しています。 JARを構築するとき、スクリプトはJAR自体にすべての第三者のライブラリを含むわけではありません。代わりに、そのパスをJARのマニフェストに入れます。これは私のJARをスリムできれいに保つのに役立ちます。EclipseでAntのクラスパスを使用する
私はEclipseでプロジェクトを編集してデバッグできるようにしたいと思いますが、簡単な方法はありません。私のプロジェクトでAntファイルを使ってプロジェクトをビルドすることができます。それはうまくいくようです。しかし、Eclipseはサードパーティするライブラリを見つけるの問題を抱えているため、Eclipseは二つの問題持っている:クラスの 多くが定義されていないので、コンパイルエラーがたくさん(テキストエディタで)
が- それはショーを、そして
- JARを実行することはできません。
Iは、2つの差の場所で、手で指定することにより、上記の問題の両方を解決することができる(すなわち、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}
)で、サードパーティのライブラリを持っていることがわかりますが。私はdep.runtime
と呼ばれるpath
を作成するためにこれらを使用します。私はその後、私の瓶を作るときにマニフェストにdep.runtime
を含めます。 実行時にビルドパスとクラスパスに同じ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
そこに 'add directory'または' classpath'を追加するボタンがあるはずです。トリックをする必要があります...そうでない場合は教えてください。 – leeand00