Javaソースコードパッケージを1つの大きな階層型名前空間と考えてください。商用アプリケーションは通常、「com.mycompany.myapp」の下にあります(このアプリケーションのWebサイトは「http://myapp.mycompany.com」である可能性がありますが、常にそうであるとは限りません)。
myappパッケージの下でどのように整理するかは、主にあなた次第です。実行可能ファイル(.exe)、DLL、および低レベルクラスをC#で区別することは、Javaでは同じ形式では存在しません。すべてのJavaソースコードは.classファイル(その内容は「バイトコード」と呼ばれます)にコンパイルされ、多くのプラットフォームでJava仮想マシン(JVM)によって実行できます。したがって、パッケージを介してそのようなレベルを特定しない限り、高レベル/低レベルのクラスに固有の区別はありません。パッケージ化の一般的な方法は次のとおりです。
- com.mycompany.myapp:メインクラス; MyApp(メインメソッド付き)
- com.mycompany.myapp.model:ドメインモデルクラス; 顧客、注文など
- com.mycompany.myapp.ui:ユーザーインターフェイス(プレゼンテーションまたはビュー)コード
- com.mycompany.myapp.service:アプリケーション内のサービス、つまり「ビジネスロジック」
- com.mycompany.myapp.util:いくつかの場所で使用されるヘルパークラス
これはスタンドアロンのJavaアプリを示唆していますが、多くのフレームワークの1つを使用するWebアプリの場合は異なる可能性があります。
これらのパッケージは、プロジェクトのディレクトリ階層に対応しています。Eclipseを使用する場合、そのような階層のルートは「ソースディレクトリ」と呼ばれます。プロジェクトは、複数のソースディレクトリ、通常は「メイン」および「テスト」ソースディレクトリを定義できます。
プロジェクト内のファイルの例:
src/test/java/com/acme/foo/BarTest.java
src/main/java/com/acme/foo/Bar.java
lib/utilities_1_0.jar
そして、utilities_1_0.jar内:
com/acme/foo/BarUtils.class
BarUtils.classこれはコンパイルされたJavaクラスであるため、プラットフォームに依存しないバイトコード形式で、任意のJVMで実行できます。通常、jarファイルにはコンパイルされたクラスのみが含まれますが、ソース(.java)ファイルも含むバージョンのjarをダウンロードできる場合もあります。これは、使用しているjarファイルの元のソースコードを読み取れるようにする場合に役立ちます。
上記の例では、Bar、BarTest、およびBarUtilsはすべて同じパッケージcom.acme.fooにありますが、物理的にはハードディスク上の異なる場所にあります。
ソースディレクトリに直接存在するクラスは「デフォルトパッケージ」にあります。クラスがどの会社とアプリケーションに属しているかが明確でなく、jarファイルがあると名前の競合が発生する可能性があるため、通常はクラスをそこに保持することはお勧めできません。クラスパスに追加すると、デフォルトのパッケージに同じ名前のクラスが含まれます。
このアプリケーションをデプロイすると、通常は.classファイルにコンパイルされ、.jarにバンドルされます(これは基本的に.zipファイルといくつかのマニフェスト情報の名前です)。.jarを作成することは、アプリケーションを実行するために必要ではありませんが、アプリケーションをデプロイ/配布するときに便利です。マニフェスト情報を使用すると、.jarファイルを「実行可能」にして、ユーザーが簡単に実行できるようにすることができます。[a]を参照してください。
通常、複数のライブラリ、つまりインターネットから取得した既存の.jarファイルも使用します。非常に一般的な例は、log4j(ロギングフレームワーク)またはデータベースにアクセスするためのJDBCライブラリなどです。また、個別のjarファイル(上記の「utilities_1_0.jar」など)にデプロイされた独自のサブモジュールがある場合もあります。jarファイルにどのように分割されるかはデプロイメント/ディストリビューションの問題ですが、それらはすべてJavaソースコードのユニバーサル名前空間を共有しています。したがって、実際には、必要に応じて、すべてのjarファイルを解凍し、内容を1つの大きなディレクトリ構造に配置することができます(ただし、通常はそうしません)。
複数のライブラリを使用/構成するJavaアプリケーションを実行すると、一般に「クラスパス地獄」と呼ばれるものに遭遇します。私たちが知っているように、Javaの最大の欠点の1つ。(注:ヘルプはおそらく途中です)。コマンドラインで(つまり、Eclipseからではなく)Javaアプリケーションを実行するには、クラスパス上のすべての.jarファイルの場所を指定する必要があります。Javaの多くのフレームワーク(Maven、Spring、OSGi、Gradle)のいずれかを使用している場合、通常、この問題を軽減するための何らかの形式のサポートがあります。Webアプリケーションを構築している場合は、通常、選択したWebコンテナー(Tomcat、Jetty、Glassfish)にオブジェクトを簡単にデプロイできるように、その階層化/デプロイメントの規則に従う必要があります。
これにより、Javaでの動作に関する一般的な洞察が得られることを願っています。
[a] MyAppアプリケーションの実行可能jarを作成するには、パスにJDKが必要です。次に、コンパイル(binまたはtarget)ディレクトリで次のコマンドラインを使用します。
jar cvfe myapp.jar com.mycompany.myapp.MyApp com\mycompany\myapp
次に、コマンドラインから次のコマンドを使用して実行できます。
java -jar myapp.jar
または、jarファイルをダブルクリックします。この場合、Javaコンソールは表示されないため、これは、独自のGUIを備えたアプリケーション(Swingアプリなど)またはバックグラウンドで実行される可能性のあるアプリケーション(ソケットサーバーなど)でのみ役立ちます。