2011-07-28 11 views
3

私はEclipseで2つのプロジェクトを持ち、1つは 'main'機能を持つクラスを持っています。 このプロジェクトを「A」としましょう。 そしてこの 'main'関数では、別のプロジェクトでクラスをインスタンス化します。このプロジェクトとクラスBとCをそれぞれ呼び出してみましょう。クラス 'C'では、 'System.property( "user.dir") "を使用して、プロジェクト' B 'からRESOURCEFILEをロードしようとします。Eclipseでは、他のプロジェクトのリソースにどうやってアクセスできますか?

このアプリケーションをプロジェクト' A 'プロジェクトAには作業ディレクトリがあるのでプロジェクトBにあるRESOURCEFILEを開くことはできませんが、プロジェクトBにファイルを入れる必要があります。

私は何が最善ではありませんこの問題は解決し得るための方法。私は、このアプリケーションを実行しているときに、プロジェクトBの情報を渡す必要がありますか?私は完全に失われています。..

私が誰かの助けを待っています!

グラムim

+0

1.システムプロパティを使用する代わりにクラスCで "classpath:resource"または他のタイプのアクセスを使用します。 – ffriend

+0

答えていただきありがとうございます。「classpath:resource」に関するさらに詳しい情報を教えてもらえますか?また、「他のタイプのアクセス」の意味を教えていただけたら、それは素晴らしいでしょう。 – gim

+0

私の答えは関連しています@Stephen Cのものに。あなたの場合、あなたはちょうどse 'YourClass.class.getResourceAsStream("/resource-package/resource-name.txt ")'を実行します。主要なJavaフレームワークを含む他のプロジェクトでは、他の関数を使用し、リソースを完全なURIとして指定する必要があります。つまり、http://url.of.resource.com "または" file:/// path/to/file "または" classpath:resource-name.txt "を使用します。しかし、あなたの' getResourceAsStream() '十分です。詳細については、[this](http://stackoverflow.com/questions/1464291/how-to-really-read-text-file-from-classpath-in-java)の質問をご覧ください。 – ffriend

答えて

1

2番目のプロジェクトを最初のプロジェクトのビルドパスにプロジェクトの依存関係として追加します。

+0

プロジェクトAの主な機能でプロジェクトBからクラスをインスタンス化することができるので、彼はすでにこれを行っていると思います。 – ffriend

+0

多分、私はこの問題を説明するのがはっきりしません。 2番目のプロジェクトを最初のプロジェクトのビルドパスに追加しました。そして、それは私がクラス 'C'をインスタンス化する方法です。 – gim

+0

woops間違った時間にenterキーを押しました。ごめんなさい。問題は、クラス 'C'からファイルをロードしようとしているときに、プロジェクト 'A'からファイルを検索しようとします。作業フォルダはプロジェクト 'A'なので、プロジェクト 'C'ではありません。 – gim

1

これらのプロジェクトがどのように展開されるのかという問題は考えていないようです。それらはコマンドラインアプリケーションとは別ですか?彼らは別々のウェブアプリですか?より大きなアプリケーション/ web-appのコンポーネントですか?

これらのプロジェクトがコンポーネントであり、ソースコードベースにアクセスしようとしている(効果的に)リソースにアクセスするには、Class.getResource(...)またはClass.getResourceAsStream(...)を使用するのが最善の方法です。デプロイされたバージョンでは、BのJARファイルにリソースが含まれており、実行時クラスパス上にあることを確認するだけです。

これらのプロジェクトが実際には異なる場合は、問題がより複雑になり、最適な解決策は、それらをどのように展開して構成するかによって決まります。

getResource(...)方法はあなたにURLを与え、あなたが実際にそれを読みたい場合は、getResourceAsStream(...)を使用。。)getResourceAsStreamの引数について


:引数はの名前空間で解決されているパスですクラスコンテナ。例えばclassesディレクトリ、またはJARファイル(デプロイ時)相対パスまたは絶対パスのいずれかを選択できます。絶対パスはコンテナのルートを基準に解決されます。 Class.getResourceAsStream

AFAIKを使用していると仮定すると、Eclipseは自動的にソースツリーのリソースをプロジェクトのclassesディレクトリにコピーしますが、 。

+0

ありがとうございます。これらは、別々のコマンドラインアプリケーションではありません。 1つのプロジェクトには「メイン」機能があり、もう1つのプロジェクトのコンポーネントは「メイン」機能からインスタンス化されています。私はClass.getResourceとClass.getResourceAsStreamを見て、投稿を更新します。ありがとうございました。 – gim

+0

うーん。私はすでに何か問題がある。私はClass.getResourceを使う際に何を引数として入れるべきか分からない。あなたは私にヒントを与えることができますか?絶対パスを使うべきではないと思います。私は、別のプロジェクトからファイルを読み込むことがとても難しいとは考えていませんでした。 – gim