これは二部構成の質問だと思います。MyFirstTask
他のプロジェクトのビルドファイルで使用できる独自の Ant タスク ( ) を作成しようとしていますbuild.xml
。これを行うには、Ant タスクを独自の JAR 内にコンパイルしてパッケージ化する必要があります。私が作成したこの Ant タスクはかなり複雑であるため、XStream を OX マッピングに使用したり、Guice を DI に使用したりするなど、約 20 の依存関係 (他の JAR ファイル) があります。
現在、MyFirstTask プロジェクト内のファイル (再利用可能な Ant タスクであるパッケージ化されるビルドファイル) にpackage
タスクを記述しています。build.xml
myfirsttask.jar
Java JARの意図を完全には理解していないことに突然気付きました。JAR に依存関係を含めるべきではなく、必要な依存関係を提供するためにランタイム構成 (アプリ コンテナー、ランタイム環境など) に任せるべきでしょうか? この場合、実行可能な JAR はルールの例外であると思います。
それとも、Java JAR にその依存関係も含めることを意図しているのでしょうか?
いずれにせよ、ユーザーに 25 個以上の JAR を Ant ライブラリにコピー アンド ペーストすることを強制したくありません。それはただ残酷です。classes/
依存関係のクラスパスがディレクトリの下に定義されている WAR ファイルのセットアップ方法が気に入っています。
最終的には、JAR 構造を次のようにしたいと思います。
myfirsttask.jar/
com/ --> the root package of my compiled binaries
config/ --> config files, XML, XSD, etc.
classes/ --> all dependencies, guice-3.0.jar, xstream-1.4.3.jar, etc.
META-INF/
MANIFEST.MF
これを達成するために (そして実行時のクラスパスもclasses/
ディレクトリを参照するようにするには)、何らかの方法で MANIFEST.MF を変更する必要があると思います (マニフェスト属性が と呼ばれていることは知っていClassPath
ますよね?)。すべてをまとめるのに苦労しているだけで、そもそも JAR の意図そのものについて迫りくる/長引く疑問があります。
Oracle が JAR に依存関係を含めることを意図しているかどうかを誰か確認できますか? いずれにせよ、マニフェスト (または他の場所) で、実行時にクラスパスがclasses/
ディレクトリに格納されている依存関係を見つけられるようにするために何をしなければならないでしょうか? 前もって感謝します!