どのようにあなたのJavaプロジェクトにクラスパスで利用できる非ソース・リソースを整理しますか?
質問
Javaで書かれたソフトウェア・プロジェクトでは、多くの場合、プロジェクトの一部であるリソースを、持っているし、クラスパスに含めるべきです。例えば、いくつかのテンプレートや画像、それはクラスパス(のgetResource)を介してアクセス可能でなければなりません。これらのファイルは、作成JARファイルに含まれなければならない。
これは、これらのリソースは、リビジョン・コントロール・システムに追加されなければならないことは明らかです。しかし、どのディレクトリにこれらのファイルを置きますか? Javaのソース・ファイルに、あるいはまた必要に応じてパッケージ構造を再現し、別のディレクトリにパラレル?
解決
私はあなたの後者のソリューションを好みます。このように、彼らはあなたのソースコードを壊しませんが、パッケージ化されたJARファイルにコンパイルされたクラスファイルに次の権利になります。
他のヒント
MavenのにはSRCに行くのsrc /メイン/リソース/(Javaコードにそれらを置く/メイン/ Javaの/)。その主な理由は、Mavenのは、さまざまな言語でコードをコンパイルすることができることであり、それは彼らがそう1つのコンパイルが別のファイルで混同されていない分離しておくことは理にかなっています。
彼らはジャーに追加する前に、リソースの場合は、Mavenのは、それらの変数に置き換えられますので、彼らは同様にソースを「コンパイル」されます。
個人的に、彼らは強く、コードの特定の部分に関連している場合、私は、ソースコードと一緒にそれらを持っ好む、およびそれらのあまりに多くが存在しない場合。
しかし、これらのファイルは、独自の組織構造を有することが理にかなっている場合、それは難しいそれらの間のソースコードを見つけることになるだろう数百のファイルがある場合、または、私はそれらを分離しておくと思います。
それはあなたの好みに依存します。ソースコードファイルとそれらを混合持つこと(ressourcesがソースにtoghether移動されたように)パッケージの名前の変更のようなリファクタリングが容易になりますが、アイコン、画像およびローカリゼーションファイル以上の一握りで、あなたは非常に簡単にファイルの混乱を取得します。
今日のツールで、それも本当に重要ではありません。あなたは、Eclipse、Netbeansのまたは別のツールを使用するかどうか、それらはすべてあなたがソースコードとは異なるレイアウトでバイナリパッケージを持つことができます。あなたが望むようなので、最後に、あなたがそれを行うことができます。
個人的に私は非常に頻繁に、私は通常、非常にまれなリソースを変更しないので、リソースとソースをミキシング回避しようが、ソースコードます。
私は通常、次のように行ってます:
project/src
project/resources
project/classes
project/lib
project/dist
両方のSRC とリソースをの入力としてパッケージ構造とビルドファイルテイクのクラスとリソースのために持っていますのDIST の中に置かれているjarファイル。
のlibに、クラス、リソース; の:内部で実行している場合は、クラスパスのようなものです
このアプリは、インストーラがインスタレーションにそのままリソースディレクトリを作成し、配置し、インストールしている場合。
あなたはクラスパスにこれらの事を置くことができます。 Eclipseは、あなたのJPEGファイルをコンパイルしようとはしませんし、どちらもアリだろう、そう心配する多くがありません。良いところは、あなたが、関連するものをたくさん持っている場合は、ファイルの種類によっては対照的に、機能が主催し、それらを一緒に保つことができるということです。
私は仕事ここで、私たちは、これを行います。私たちは、コードと静的リソースの一握りのビットを必要とする電子メールメッセージを持っています。これらの事のすべては、Javaソース・パス内の1つのフォルダにまとめて保存されます。私たちは、物事を忘れたり、別のツリーに存在しない一本の木でのsrc /リソースパスなどのミス不一致または孤立ファイルをすることなく、簡単にシステムから電子メールを追加したり削除することができます。
、それはあなた次第ですし、プロジェクトごとに異なる場合があります。
例えば、href="http://www.wicketframework.org/" rel="nofollow">ウィケットの.html維持するために非常に通常と実用的です。また、私は多くの場合、ソースコードと一緒にいくつかの設定を維持 - META-INF
、WEB-INF
、ログ
Mavenのは、ソースツリーからリソースを取るようにするには、これを使用します:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<!-- Web - Wicket -->
<resource>
<filtering>false</filtering>
<directory>src/main/java</directory>
<includes><include>**</include></includes>
<excludes><exclude>**/*.java</exclude></excludes>
</resource>
</resources>
<testResources>
<testResource>
<directory>src/test/resources</directory>
</testResource>
<!-- Web - Wicket -->
<testResource>
<filtering>false</filtering>
<directory>src/main/java</directory>
<includes><include>**</include></includes>
<excludes><exclude>**/*.java</exclude></excludes>
</testResource>
</testResources>
分離リソースを維持する主な理由は、作業ロールの(私見)分離です。例えば。あなたは翻訳チームでプロジェクトを持っている場合は、コードからと異なるSCM権限で区切られた文字列とリソースを続けるだろう。