5

3 つのアプリで構成される Java システムを開発します。このアプリは同じパッケージを使用します。たとえば、IntelliJ IDEA でこのプロジェクトを整理するにはどうすればよいですか? パッケージの 1 つの階層に編成されたすべてのソースをプロジェクト上に置くか、ライブラリを使用するさまざまなプロジェクトに置く必要があります。専門的な解決策を教えてください。

4

3 に答える 3

12

専門的な解決策は、ソフトウェアの構築に IDE に依存しないことです。ビルド ツールを使用してソフトウェアをビルドします。多くのビルド ツールから選択できます。

  1. 作る
  2. メイヴン
  3. レーキ
  4. グラドル
  5. ビルダー

どのツールを選択するかは、ソフトウェアを構築する方法によって異なります。

たとえば、Make や ANT などのツールは、ソフトウェアを構築するために「言われたとおりに実行する」アプローチを採用しています。これは、何をどのように実行したいかを正確に説明する必要がある場合に適しています。

Maven などのツールは、「設定より規約」のアプローチを採用しています。彼らは、慣例に従えば、ビルドツールに標準的なことを行う方法を繰り返し伝える必要はないと言われています。たとえば、Maven を使用すると、Java ソースコードをsrc/main/javaディレクトリに配置すると、Maven が自動的にコンパイルします。テスト ソース コードを入れるとsrc/test/java、Maven がそれをコンパイルし、すべてのテストを実行します。

Mavenは万人向けではありません...ビルドツールに何をすべきかを正確に伝え、ソフトウェアを書く時間を減らしたいと思う人もいるようです...それは問題ありません...それは私ではありません(私はMavenを使用しています) PMC...私のお気に入りのビルドツールが何であるかを推測するのは驚くことではありません)...しかし、これらの人々はMavenが提供する「構成よりも規約」のもののいくつかを好みます...必要なときにオーバーライドするより柔軟な方法が欲しいだけです慣習から抜け出すには... Gradle や Buildr などのツールは、その考え方を持つ人々によって使用されます。

優れた IDE はビルド ファイルを取得し、そのビルド ツールからプロジェクト構造を推測します。IntelliJ、Eclipse、および NetBeans はすべて、Maven のpom.xmlビルド ファイルを認識します。これにより、IDE のセットアップがノーオペレーションになります。私は個人的に Maven と IntelliJ を使用しているため、他のビルド ツールが IDE でどのように公平であるかは調査していません。

ビルド ツールを選択して、それがどのように機能するかを確認してください。バージョン管理システムを使用していると思います...ビルドツールを変更することは大したことではありません。

Maven を使用することを選択した場合は、4 つまたは 5 つのモジュール プロジェクト (親モジュールと 3 つの子モジュール、場合によっては共有共通モジュール) から開始します。

コードは次のように構成されます

+- pom.xml (the root parent pom)
+- common (the common module directory)
|    +- pom.xml (the common module pom)
|    \- src
|         +- main
|         |    +- java
|         |    |    \- com... (your package dirs for common classes)
|         |    \- resources
|         |         \- com... (your package dirs for common classpath resources)
|         \- test
|              +- java
|              |    \- com... (your package dirs for tests of common classes)
|              \- resources
|                   \- com... (your package dirs for common test classpath resources)
+- app1 (the app1 module directory)
|    +- pom.xml (the app1 module pom)
|    \- src
|         +- main
|         |    +- java
|         |    |    \- com...
|         |    \- resources
|         |         \- com...
|         \- test
|              +- java
|              |    \- com...
|              \- resources
|                   \- com...
+- app2 (the app2 module directory)
|    +- pom.xml (the app2 module pom)
|    \- src
|         +- main
|         |    +- java
|         |    |    \- com...
|         |    \- resources
|         |         \- com...
|         \- test
|              +- java
|              |    \- com...
|              \- resources
|                   \- com...
\- app3 (the app3 module directory)
     +- pom.xml (the app3 module pom)
     \- src
          +- main
          |    +- java
          |    |    \- com...
          |    \- resources
          |         \- com...
          \- test
               +- java
               |    \- com...
               \- resources
                    \- com...

ルートpom.xmlは次のようになります

<project>    
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mydomain.something</groupId>
    <artifactId>something-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modules>
        <module>common</module>
        <module>app1</module>
        <module>app2</module>
        <module>app3</module>
    </modules>
</project>

そして、は次のcommon/pom.xmlようになります

<project>    
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.mydomain.something</groupId>
        <artifactId>something-parent</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>something-common</artifactId>
    <dependencies>
        <!-- insert the 3rd party dependencies you want -->
    </dependencies>
</project>

そして、各アプリのポンは次のようになります

<project>    
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.mydomain.something</groupId>
        <artifactId>something-parent</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>something-app1</artifactId>
    <dependencies>
        <dependency>
            <groupId>com.mydomain.something</groupId>
            <artifactId>something-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!-- insert any 3rd party dependencies you want for app1 only -->
    </dependencies>
</project>

お役に立てれば

于 2013-01-15T12:04:34.040 に答える
3

私は次のアプローチを使用します:root-projectいくつかのサブプロジェクトで構成されています。それらのいくつかは、プロジェクトのコードベースを使用するために他のものに依存しています(これはプロジェクトのプロパティで構成されています)。

root-project
+---- project1
+---- project2
+---- project3
+---- shared-code-project
于 2013-01-15T12:00:43.387 に答える
2

本当に専門的な場合は、 Maven の概念に沿って Maven とレイアウト フォルダーを使用してプロジェクトをビルドする必要があると仮定します。コマンド ラインからビルドしない場合でも、最近の優れた IDE のほとんどは Maven プロジェクトをサポートしているはずです。将来、Maven を使用する必要が生じる可能性が非常に高く、移行の手間が軽減されます。

更新: これは執筆時のものです。ここで、Maven よりも人気が高まっているgradleを使用することをお勧めします。

于 2013-01-15T12:02:52.343 に答える