2016-05-02 6 views
7

NetBeans 8.1、Apache Ant 1.9.4、およびJava 1.8.0_66を使用しています。NetBeansを使用してクラスパスからlibを削除するjarファイルの設定

私たちのローカルネットワーク展開環境では、/ libサブディレクトリを持つappsディレクトリがあります。/libには、/ lib内の他のライブラリ(Dep.jar)に依存するライブラリ(Library.jar)があります。多くのアプリケーション(App.jar)はLibrary.jarに依存しています。これらのライブラリとアプリケーションの多くは、以前にビルドされ、私が言及したもの(Java 1.6以前)より古いバージョンを使用していました。

以前は、App.jarのマニフェストはClass-Path: lib/Library.jar を参照し、Library.jarはClass-Path: lib/Dep.jarを参照していました。

これはいくつかの修正を行い、Library.jarを最新のJavaバージョンに更新するまで機能しました。さて、App.jarを実行するとDep.jarは見つかりませんが、マニフェストは以前と同じように見えます。 Library.jarが/ libディレクトリにあるため、App.jarはlib/Dep.jarではなくlib/lib/Dep.jarを探しています。

これまでのところ、Library.jarのManifest.mfファイルをClass-Path: Dep.jarに編集するのが最良の解決策でした。これにより、App.JarがDep.Jarを探すために2つのlibsに入るのを防ぐことができます。しかし、jarファイルを編集するのは一般的な作業ではありません。NetBeans IDE内のソリューションや、jarファイルのクラスパスからlibを削除するbuild.xmlに追加できるものが好きです同じディレクトリ内のjarを参照してください。 Dependent Jarを更新する際にポインタを維持しながら、Store-for-Storeを含まないソリューションを希望します。

また、最初の変更の原因を知りたいのですが、それはバージョンの更新などです。どんな助けでも大歓迎です。

現在のbuild.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<project name="Library" default="default" basedir="."> 
    <description>Builds, tests, and runs the project Library.</description> 
    <import file="nbproject/build-impl.xml"/> 
</project> 
+0

現在の 'build.xml'の内容を投稿してください。 – RAnders00

+0

現在のbuild.xmlは何も特別なものではありません。 –

答えて

1

あなたは<path>または下記定義としては、Apache Antの<classpath>を使用することができ、あなたのbuild.xmlで

<path id="ant.classpath"> 
    <fileset dir="common-libs"> 
     <include name="*.jar" /> 
    </fileset> 
</path> 

あなたが必要なフォルダを指すことができます`` * .jar ''が存在します

そして、あなたのビルドcomのtargetにアプリケーションをビルドするときにこのパスを使用してくださいマンド

より参照、 Path-like Structures

そして、 Where are classpath, path and pathelement documented in Ant version 1.8.0

+0

ありがとうございます。これは有望ですが、いくつか問題があります。 1.私たちは大きなlibフォルダを持っているので、フォルダ全体ではなく個々のjarを指しています。あなたはこれを行う方法を知っていますか? 2. Netbeansビルトインビルドからビルドターゲットを暗黙的に呼び出すことは可能ですか?私は、複数のユーザーのためにより簡単に合理化できるソリューションを好むだろう。 –

+0

''は単なる例です。要件ごとに異なるオプションを指定できます。 [Maven Documentation](https://ant.apache.org/manual/using.html)をうまく使います。 – darshgohel

+0

ありがとう、私は見てみましょう。 2番目の質問はどうですか?これをNetbeansの "ビルド"ボタンをクリックすることで動作させることができますか、それともbuild.xmlを右クリックして "ターゲットを実行"する必要がありますか? –

0

IDE(NetbeansのまたはEclipse)を使用するときは、いつでもマニフェストファイルに手を触れてはならないでください。 IDEは、あなたのプロジェクトの設定に基づいて、あなたのためにすべてを行います。

ですから、Netbeansのを持っていると仮定すると、以下のように、実行してください:

  1. は、マニフェストファイルからすべてのエントリを削除します。

  2. プロジェクトナビゲータで各プロジェクトに移動し、右クリックして[プロパティ]ダイアログを選択します。

  3. すべてのプロジェクトを実行し、同じJavaプラットフォームを選択します。プロジェクトが古いjavaで書かれている場合、問題なくアップグレードできます。すべてのJavaコードは後方互換性があります。古いJavaプロジェクトが新しい最新のJavaに移植されても、何も悪くはありません。

  4. この手順が完了したら、プロジェクト間の依存関係/参照を設定する必要があります。 [プロジェクトプロパティ]ダイアログの[ライブラリ]カテゴリの[コンパイル]タブで、すべての参照を管理します。依存関係がNetbeansプロジェクトの場合は、[プロジェクトを追加]ボタンをクリックします。依存関係がサードパーティ製の外部jarである場合は、jar /フォルダの追加を選択します。

このように、すべてが完了すると、Netbeansはバックグラウンドでantスクリプトを書き込みます。すべてが自動的に処理されます。 MANIFEST.MFファイルには絶対に触れる必要はありません。

このセットアップ処理が進行中である間に、ディスク上のプロジェクトのdistフォルダ内で処理が進行しているかどうかを確認できます。 (シフト+ F11はプロジェクトを整理してビルドします)。

+0

これらの依存関係を管理することは問題ではありません。問題はNetbeansがデフォルトでクラスパスに "lib /"を追加することです。中間のjarファイルはlibフォルダにありますが、既にlib /にあり、下位のlib /を探しているため、存在しないlib/lib /を指しています。古いマニフェストと新しいマニフェストは同じように見えますが、リファレンスは過去に正しく機能していました。試していただきありがとうございます –

関連する問題