IDEAでjavaマルチモジュールプロジェクトをどうやって作成するか教えます。


一、spring initializrを使ってjavaプロジェクトを作成する
  •  1、IDEAを起動し、javaプロジェクトを新設し、ガイドを使ってspringbootフレームを作成するプロジェクト
  • 在这里插入图片描述
  • .プロジェクト情報を設定し、javaバージョン選択8
  • 在这里插入图片描述
  • 、プロジェクトをチェックするために必要な依存度
  • 在这里插入图片描述
  • 、項目名を設定し、
  • をクリックして完成します。
    在这里插入图片描述
  • 5.mavenがプロジェクトに必要な依存度を全部ダウンロードして、プロジェクト構造を展開します。下図のように、springbootの枠組みを作成する簡単なプロジェクトを完成します。
  • 在这里插入图片描述 
    二、プロジェクトを修正し、webモジュールを追加する
  • 1、appdemoプロジェクトのpomファイルを修正して、工程の包装方式を改正してpomとなり、プロジェクトは父工程
  • になりました。
    
    <packaging>pom</packaging>
    在这里插入图片描述
  • 、ファイルを開く-新規作成-モジュールを開き、新しいモジュールを開いてウィザードを作成し、mavenモードを選択し、テンプレートを選択する必要がなく、次のステップをクリックしてください。
    在这里插入图片描述
  • 、モジュール名をウェブに設定し、親プロジェクトがappdemoであることを確認し、
  • をクリックして完成しました。
    在这里插入图片描述
  • 4、maven導入モジュールが終了するのを待って、プロジェクト構造を展開します。以下の図のように、appdemoプロジェクトにwebモジュール
  • が追加されました。
    在这里插入图片描述
  • 、appdemoのpomファイルには、モジュール情報
  • が自動的に追加されます。
    
    <modules>
            <module>web</module>
        </modules>
  • 、webモジュール内のpomファイルを修正し、パッケージ方式を追加する<packaging>jar</packaging>

  • 在这里插入图片描述
  • 、プロジェクトのフレームワークを展開し、親プロジェクトのカバン:comp.example.appdemo、および起動ファイルは、すべてウェブモジュールのjavaフォルダの下に移動します。
    マルチモジュールプロジェクトでは、プロジェクト起動はwebモジュールで管理されていますので、起動ファイルとパッケージ構造をwebモジュールの下に移動する必要があります。
    在这里插入图片描述
    移動が完了しました。プロジェクトアーキテクチャは以下の通りです。
    在这里插入图片描述
  • 8、無駄なファイルやファイルを削除し、赤枠の中身を削除する
  • 多モジュール工程では、それぞれモジュールの中でコードを開発して、父工程の中開発ではないので、父工程のappdemoの中のsrcフォルダは使えなくなります。
    在这里插入图片描述 
    三、entity、service、serviceImpl、daoモジュールを追加する。
  • 1、webモジュールを追加するように、entity、service、serviceImpl、daoモジュール
  • を追加する。
  • 、各モジュールのpomファイルを修正し、パッケージ方式を追加します。<packaging>jar</packaging>
  • 、親工程のpomファイルは、モジュール情報
  • を自動的に増加させます。
    
    <modules>
            <module>web</module>
            <module>entity</module>
            <module>service</module>
            <module>serviceImpl</module>
            <module>dao</module>
        </modules>
    
  • 、モジュールが全部追加された後、プロジェクトのファイル構造は以下の通りです。
    在这里插入图片描述 
    四、修正項目依存情報
    親項目の依存性を変更
  • 1、最初のステップでspringbootフレームワークプロジェクトを作成した後、pomファイルに自動的にプロジェクトに必要な依存性が追加されました。これはしばらく修正する必要がありません。
    
    <dependencies>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
  • 、各サブモジュールを依存として親プロジェクトに導入する(webモジュールを導入していない。webモジュールは他のモジュールに依存するが、他のモジュールはwebモジュールに依存しない)
  • 
    <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>com.example</groupId>
                    <artifactId>entity</artifactId>
                    <version>0.0.1-SNAPSHOT</version>
                </dependency>
                <dependency>
                    <groupId>com.example</groupId>
                    <artifactId>service</artifactId>
                    <version>0.0.1-SNAPSHOT</version>
                </dependency>
                <dependency>
                    <groupId>com.example</groupId>
                    <artifactId>serviceImpl</artifactId>
                    <version>0.0.1-SNAPSHOT</version>
                </dependency>
                <dependency>
                    <groupId>com.example</groupId>
                    <artifactId>dao</artifactId>
                    <version>0.0.1-SNAPSHOT</version>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
    dependencyManagementを使用して依存関係を管理しており、サブモジュールが引用管理に依存する場合は、バージョン番号を設定しなくてもいいです。
    webモジュールのpomファイルを変更し、次のような依存性を追加します。
    
    <dependencies>
            <dependency>
                <groupId>com.example</groupId>
                <artifactId>entity</artifactId>
            </dependency>
            <dependency>
                <groupId>com.example</groupId>
                <artifactId>service</artifactId>
            </dependency>
            <dependency>
                <groupId>com.example</groupId>
                <artifactId>serviceImpl</artifactId>
            </dependency>
        </dependencies>
    
    serviceモジュールpomファイルを修正し、次のような依存性を追加します。
    
    <dependencies>
            <dependency>
                <groupId>com.example</groupId>
                <artifactId>entity</artifactId>
            </dependency>
        </dependencies>
    
    serviceImplモジュールのpomファイルを修正し、次のような依存性を追加します。
    
    <dependencies>
            <dependency>
                <groupId>com.example</groupId>
                <artifactId>entity</artifactId>
            </dependency>
            <dependency>
                <groupId>com.example</groupId>
                <artifactId>dao</artifactId>
            </dependency>
            <dependency>
                <groupId>com.example</groupId>
                <artifactId>service</artifactId>
            </dependency>
        </dependencies>
    
    entityモジュールpomファイルを修正し、次のような依存性を追加します。
    
    <dependencies>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
            </dependency>
        </dependencies>
    
    daoモジュールのpomファイルを修正し、次のような依存性を追加します。
    
    <dependencies>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
            </dependency>
        </dependencies>
    
    親プロジェクトのappdemoのpomファイルを修正し、データベースに関する依存性を削除します。
    
    <!--<dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
            </dependency>-->
    
    親プロジェクトで設定された依存性は、サブモジュールで自動的に継承され、参照を繰り返す必要はないが、サブモジュールごとにデータの接続、操作が必要となるというわけではないので、親プロジェクトのpomファイルでは、これらの依存性は削除され、データベースの接続、オペレーティングデータベースのdaoモジュール、およびエンティティクラスを使用してテーブルを作成するentityモジュールに関連しています。これらの必要な依存性を個別に導入すれば良い。
    五、起動プロファイルを変更する
    起動クラスAppdemoApplicationはすでにウェブモジュールに移動しており、ウェブモジュールから起動する項目が要求されているので、親プロジェクトの起動プロファイルを削除し、ウェブのpomファイルに起動プロファイルを追加する必要があります。
  • 1、親項目pomファイル中のbuild部分を注釈する
  • 
    <!--<build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <excludes>
                            <exclude>
                                <groupId>org.projectlombok</groupId>
                                <artifactId>lombok</artifactId>
                            </exclude>
                        </excludes>
                    </configuration>
                </plugin>
            </plugins>
        </build>-->
    
  • 、webモジュールのpomファイルにbuild構成
  • を追加する。
    
    	<build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <excludes>
                            <exclude>
                                <groupId>org.projectlombok</groupId>
                                <artifactId>lombok</artifactId>
                            </exclude>
                        </excludes>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
    比較的簡単な方法は、親プロジェクトのこのbuildプロファイルをウェブモジュールのpomにコピーすることです。
    起動項目の修正をしないと、起動クラスを実行する時に、mainメソッドが見つからなくなり、プロジェクトが起動できなくなります。
    六、各モジュールでコードを作成する
    entityモジュールに実体ファイルのResonseとStuInfoを追加します。
    在这里插入图片描述
  • 、Reponse類は、controlorでフロントエンドに結果を返すために使用されます。コードは以下の通りです。
    
    package com.example.entity.common;
    import lombok.Data;
    
    @Data
    public class Response<T> {
        private int code;
        private String message;
        private T data;
    
        public Response(int code, String message, T data) {
            this.code = code;
            this.message = message;
            this.data = data;
        }
    }
    
  • 、StuInfo類はデータベース作成テーブル、前後端データ転送、dao層操作データのデータテンプレートとして使用されています。コードは以下の通りです。
    
    package com.example.entity.stuEntity;
    import lombok.Data;
    import javax.persistence.*;
    import java.sql.Timestamp;
    
    @Data
    @Entity
    @Table(name = "stuinfo")
    public class StuInfo{
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;//id,  ,  
        private int stuid;//  id
        private String name;//  
        private int gender;//  
        private int age;//  
        private int grade_num;//  
        private int class_num;//  
        private int status;//  ,1-    ,2-    
        private Timestamp createtime;//    
        private Timestamp updatetime;//    
    }
    
    @Table(name=「stuinfo」)は赤い糸を申し込みます。赤い線を表示したくないなら、プロジェクトにデータベース情報を配置して、関連を作ってもいいです。処理しなくても大丈夫です。
    daoモジュールでは、データベース操作インターフェースを追加します。
    在这里插入图片描述
  • 、データベースを操作するので、jpaを使っています。japは多くのパッケージを提供しています。ここではdemoを作るために使われています。あまり複雑ではなく、JpaRepositoryインターフェースを継承すればいいです。コードは以下の通りです。
  • 
    package com.example.dao;
    
    import com.example.entity.stuEntity.StuInfo;
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.stereotype.Repository;
    
    @Repository
    public interface StuInfoDao extends JpaRepository<StuInfo, Long> {
    
    }
    
  • 、データベース接続の追加、およびjpaプロファイル
  • 開発環境、テスト環境、プリ配布環境、オンライン環境など様々な環境がありますので、異なる環境を切り替えやすいように複数のプロファイルを設定できます。プロファイルの名前は、「appication-XX.yml」です。開発環境のように、「appication-dev.yml」と書くことができます。
    devを参照するこのプロファイルは、プロファイルappration.ymlでのみアクティブにすることができます。フォーマットは以下の通りです。
    
    spring:
      profiles:
        active: dev
    appication-dev.ymlには、データベース接続やjpaなどの情報が配置されています。内容は以下の通りです。
    
    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/demo_db?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&serverTimezone=UTC
    #    url: jdbc:mysql://localhost:3306/demo_db?serverTimezone=UTC&useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true
        username: root
        password: root
        driver-class-name: com.mysql.cj.jdbc.Driver
      jpa:
        database: mysql
        show-sql: true
        hibernate:
          ddl-auto: create
          naming:
            implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
    
    以上のプロファイルでは、
    mysqlデータベースに接続するurlは、ネット上で多く紹介されています。
    username、password:選択する時、data-username、data-passwordと書かないでください。そうでないとプロジェクトをスタートさせる時、接続データベースのアカウントが無効か無権限の状況を報告します。
    driver-class-name:この駆動配置は、バージョンによって要求が異なりますが、現在の高バージョンの駆動は全部これです。
    serviceモジュールでインターフェースStuServiceを定義する
    在这里插入图片描述
    インターフェースコードは以下の通りです
    
    package com.example.service;
    
    import com.example.entity.stuEntity.StuInfo;
    
    public interface StuService {
    
        Boolean save(StuInfo stuInfo);
    }
    
    serviceImplモジュールにインターフェースの実現類を編纂します。
    在这里插入图片描述
    コードは以下の通りです
    
    package com.example.serviceImpl;
    
    import com.example.dao.StuInfoDao;
    import com.example.entity.stuEntity.StuInfo;
    import com.example.service.StuService;
    import lombok.extern.log4j.Log4j2;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import java.sql.Timestamp;
    
    @Service
    @Log4j2
    public class StuServiceImpl implements StuService {
        @Autowired
        private StuInfoDao stuInfoDao;
    
        @Override
        public Boolean save(StuInfo stuInfo) {
            stuInfo.setStatus(1);
            stuInfo.setCreatetime(new Timestamp(System.currentTimeMillis()));
            stuInfo.setUpdatetime(new Timestamp(System.currentTimeMillis()));
            log.error("    ");
            return Boolean.TRUE;
        }
    }
    
    @Serviceは、インターフェース実現類として表示し、springスキャン注入が可能です。
    @Log 4 j 2,ログツール
    @Autowired、StuInfoDaoを注入します。
    webモジュールでは、フロントエンドの呼び出しを要求するために、controlorクラスを作成します。
    在这里插入图片描述
    コードは以下の通りです
    
    package com.example.appdemo.controllor;
    
    import com.example.entity.common.Response;
    import com.example.entity.stuEntity.StuInfo;
    import com.example.service.StuService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/stu")
    public class StuInfoControllor {
        @Autowired
        private StuService stuService;
    
        @PostMapping("/addStu")
        public Response<Boolean> addStu(@RequestBody StuInfo stuInfo) {
            if (stuService.save(stuInfo)) {
                return new Response<>(200, "    ", Boolean.TRUE);
            } else {
                return new Response<>(400, "    ", Boolean.FALSE);
            }
        }
    }
    
    スタートクラスのAppdemoApplicationを修正し、スキャンの注釈を追加します。
    プロジェクトは起動過程で、スプリングは工程内のクラスをスキャンして、自動的にオブジェクトを生成してプログラムの呼び出しに用いますが、プロジェクトの自動スキャン時にはいくつかの種類を無視します。これはスキャンが必要なパケットを明確に指定する必要があります。起動コードは以下の通りです。
    
    package com.example.appdemo;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.autoconfigure.domain.EntityScan;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
    
    @SpringBootApplication(scanBasePackages = "com.example")
    @ComponentScan({"com.example"})
    @EnableJpaRepositories("com.example")
    @EntityScan("com.example.entity")
    public class AppdemoApplication {
        public static void main(String[] args) {
            SpringApplication.run(AppdemoApplication.class, args);
        }
    }
    
    七、整理、取り付け、運行、テスト
    在这里插入图片描述
  • 1、mavenツール「clean」を使って前回包装したファイル
  • 、クリーンアップが完了したら、【install】プログラムは、各モジュールをコンパイルし、モジュール間の依存度と呼び出しが便利です。
  • 、インストールが完了したら、右クリックで起動類を実行し、
  • を実行しました。
  • 4、postmanを使ってインターフェースを呼び出すと、contentt-typeは【appliation/json】に設定されます。charset=utf-8】
  • 在这里插入图片描述 
    八、棚を作る時にぶつかる問題
  • 、データベース接続の設定ファイルが間違っていて、データベース・タイムズのユーザー名が接続できなくなりました。この注意構成のキーワードは
  • を間違えないようにしてください。
  • 、各モジュールの依存性、一部の依存性は親プロジェクトと衝突します。これは調整が必要で、引用の依存性を繰り返します。依存するクリーンアップ
  • が必要です。
  • 、springのいくつかの自動注入は実現できません。springスキャンが無視されていることが多く、スタートクラスにスキャンを追加する必要がある
  • です。
  • 、プロジェクトの変更によって、Error:java:JDK isn't specified for moduleエラーが発生しました。これはプロジェクトの親プロジェクトの「.idea」フォルダを削除し、新たに作成を更新すれば解決できます。
  • 、注意すべきところは、各モジュールのパッケージ名構造は同じであるべきです。たとえば、私のものは、すべてcomp.exampleの
  • です。
    九、面白い配置
  • 1、オンラインでbannerファイル形式を生成する
  • 、生成した文字をファイルbanner.txtにコピーする
  • 、banner.txtファイルをwebモジュールのresourceに入れます。起動項目はあなたが設定した文字
  • を見ます。
    この記事ではIDEAでjavaマルチモジュールプロジェクトを作成する方法について紹介します。より多くの関連IDEAでjavaマルチモジュールプロジェクトの内容を作成します。以前の記事を検索してください。または下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。