0

コンソール アプリケーションを構築しようとしていますが、Ant を使用して構築しています。アプリケーションを Eclipse で実行できますが、取得した jar からアプリケーションを実行しようとすると、ClassNotFoundException: がスローされます。アプリケーションに使用するjarファイルの1つです。マニフェストを作成する build.xml の一部を次に示します。

<manifest>
      <attribute name="Main-Class" value="com.package.Reporter" />
      <attribute name="Class-Path" value="lib/commons-httpclient-3.1.jar
        lib/commons-logging-api.jar
        ...lot of jars...
        lib/stax-api-1.0.1.jar" />
</manifest>

必要なクラスは commons-httpclient-3.1.jar にあります。コンパイル用のクラスパスを設定する方法は次のとおりです。問題ありません。

<path id="libs.dir">
    <fileset dir="lib" includes="**/*.jar"/>
</path>

UPD : ライブラリを含む jar を自分の jar に配置する必要がありますか? 今、私はそれらを私のjarファイルの「lib」ディレクトリに入れています。したがって、myjar.jar には、クラス、META-INF ディレクトリ、および lib ディレクトリを含むパッケージが含まれています。

4

3 に答える 3

0

最大、通常の使用法を想定して、jarライブラリをjarに挿入することはできません。Romskiが提案したように、実行時に手動で指定する必要はありません。呼び出すときjava -jar myjar.jarは、ディレクトリにある場合はすべてのjarを見つける必要がありますlib。ディレクトリは、jarが存在するディレクトリと同じである必要があります。実行可能ファイルを直接呼び出すか、antタスクを介してlib呼び出すかは関係ありません。javajava

現在のディレクトリは、jarと。の間の関係だけでは問題にならないことに注意してくださいlib

現在、過度に明示的です。次のように健全性テストを実行します。新しいtmpディレクトリを作成し、そこにファイルをコピーします。

tmp/myjar.jar
tmp/lib/commons-httpclient-3.1.jar

走るjava -jar tmp/myjar.jar

編集:今、私はちょうどOraclejarチュートリアルにあるものと同じものを書いたことがわかります。しかし、私は相対ディレクトリを使って自分でテストも行いました。また、 jar内のjarを検索するstackoverflowの質問が多数表示されるので、最初にSOを検索してから、質問してください。

于 2012-10-13T13:55:45.320 に答える
0

このようにパスを変更してみてください。

 <path id="libs.dir">
   <fileset dir="./lib" includes="**/*.jar"/>
 </path>
于 2012-10-12T12:24:36.583 に答える
0

manifestclasspath タスクが必要です。

例:

于 2012-10-12T23:46:42.527 に答える