2012-05-01 5 views
1

私はJava、とりわけEclipseにはかなり新しいので、私の無知を許してください。私はサーバーからプロジェクトを取り出し、それを自分のマシンにローカルにコピーしました。私がワークスペースを開いたとき、私はそれがジャーを見つけることができないので、多くのエラーがありました。これは、私がコピーしたサーバと同じディレクトリ構造を持っていないので理にかなっています。したがって、同じ外部ジャーを私のマシンにコピーして、それをjarファイルにコンパイルしてサーバーにコピーすると、動作しますか?それとも、外部の瓶が期待していた場所とは異なる場所にあるので、それは失敗しますか?Eclipseの外部Jarを理解する

また、この問題を回避するために、外部ジャーを普通の瓶に入れておく必要がありますか?

+0

これ以上の研究の結果、外部JARを含むユーザーライブラリを使用しているように見えます。私のローカルコピーを指すようにユーザーライブラリのJARのパスを変更することはできますか?それでは、実行可能なJARをサーバーにコピーすることができます。すべての回答をありがとう。 – tacotime

答えて

2

あなたは問題ありません。 Javaは、クラスパスと呼ばれるものを使用して依存関係を特定しています。クラスパスは開発マシン上では異なるかもしれませんが、すべての依存関係が本番環境のクラスパス上にある限り、すべてが動作するはずです。

ディレクトリ構造の同期に関する問題を避けるため、最も一般的な方法はMavenを使用することです。これはすべての依存関係を管理しますが、pom.xmlを管理する必要があります(Mavenのプロジェクトディスクリプタ)。ちょっと不器用なのは、プロジェクトに依存関係を持たせることですが、同じジャーを入れなければならないプロジェクトが多くなり、バージョンの競合などが発生する可能性があります。

小規模なプロジェクトの場合は、自分自身で依存関係を管理できますが、大規模なプロジェクトの場合はMavenのようなより戦略的なものが必要になります。

実行可能なjarファイルに関しては、< jarfile>:\ META-INF \ MANIFEST.MFのClass-Pathエントリが正しいことを確認してください。他のジャーを参照しているところでは、それらのジャーはその生産の中に存在します。たとえば、私たちはourjar.jarを持っていると仮定して、これはそのMANIFEST.MFからの抜粋であると仮定します。次に、それを次のディレクトリ構造が所定の位置にあることが予想されます

Class-Path: lib/myteamjar.jar 

lib/myteamjar.jar 
ourjar.jar 
+0

あなたのお返事ありがとうございます。私はより多くの情報の上に掲示した。私は間違いなくMavenを将来的に見ていきますが、役に立つツールのように聞こえますが、今は時間が迫っています。 – tacotime

+0

私は上記の私の答えにいくつかの情報を追加しました。ユーザーライブラリのパスを変更し、jarファイルを生成し、マニフェストが正しいことを確認することをお勧めします。それからあなたは確信します。 – maksimov

+0

現在のJARのmanifest.mfを見ると、クラスパスエントリはありません。Manifest-Version:1.0 – tacotime

0

いいえ、外部ジャーの位置が決まらない。あなたがしたいことは、クラスパス上に外部ジャーを置くことです。どのようにするかは、Javaコードの実行方法によって異なります。 javaコマンドを使用してCLIから実行している場合は、引数としてクラスパスが使用されます。 Eclipseでコードをビルド/実行する場合は、プロジェクトを右クリックし、「ビルドパス」>「ビルドパスを設定...」を選択する必要があります。「JARを追加...」ボタンを使用して、開いているプロジェクトの一部と「外部JARの追加...」を使用して、プロジェクトの外にあるjarを追加します。クラスパスの詳細については、ツールのドキュメントを参照してください。

0

JavaとEclipseをかなり新しくしている誰かにMavenをお勧めしません。私はEclipseについても忘れるだろう。

パッケージ化およびCLASSPATHの問題があります。それに焦点を当てる。

どのようなプロジェクトについて話していますか?答えは、作成しているアプリのタイプによって異なります。それは実行可能なJARですか?そして、正しい方法は、JARマニフェストのCLASSPATHが想定しているようにすべてをZIPファイルにパッケージングすることです。

ウェブアプリケーションの場合、正しいことはアプリケーションに必要なすべてのJARがWEB-INF/libディレクトリにあるWARファイルです。

物事を適切にパッケージ化すると、すべてが正しい方法でレイアウトされた単一のパッケージになります。あなたはそれをサーバーに配備し、すべて動作させることができるはずです。

+0

実行可能なJARです。上に掲示したのは、外部JARを含むユーザーライブラリを使用していて、別の場所にあるので見つけることができません。マシン上のユーザーライブラリを再作成(またはパスを変更)して実行可能なJARを作成すると、元のサーバーにコピーしたときに動作するように思えるでしょうか? – tacotime

+0

サードパーティのJARをパッケージ化してサーバーに展開する必要があります。私がお勧めするのは、それらをすべて1つのディレクトリに入れ、ZIPを上にして、クラスパスがすべてのディレクトリを指し示すようにすることです。JARを実行し、CLASSPATHを設定するスクリプトを設定します。問題。 – duffymo

関連する問題