Construction du framework de développement multi-modules Gradle (Springboot)

processus de construction

Environnement de construction : IDEA 2202.3.2
Structure du projet : Springboot3.0.2
Nom du projet : Muhammad
Structure du projet : Muh-app (sous-module : entrée de démarrage du projet, appel des ressources du module Muh-Design), Muh-Design (sous-module, module de conception)

1. État d'origine

Créer un projet à l'aide Spring Initializerde la sélection de l'outil de constructionGradle

Une fois le projet créé avec succès, la structure du répertoire est :
xxxxx
  |— .gradle
  |— .idea
  |— gradle
    |— wrapper : wrapper de commande Gradle, qui permet à la machine d'exécuter le programme sans installer Gradle, ce qui est pratique pour unifier Gradle dans le processus de développement de l'équipe Version de build
  |— src
  |— .gitignore
  |— build.gradle : fichier de configuration pour la gestion des packages dépendants (équivalent au pom.xml de Maven)
  |— gradlew : wrapper de commande Gradle (version Linux), lorsqu'il n'y a pas Gradle sur la machine, vous pouvez utiliser la commande gradlew pour construire le projet
  |— gradlew.bat : le wrapper de la commande Gradle (version Windows), lorsqu'il n'y a pas de Gradle sur la machine, vous pouvez utiliser la commande gradlew pour construire le projet
  |— HELP.md
  |— settings.gradle : peut être considéré comme multi-module Le répertoire général du projet, Gradle construit chaque module à travers cette configuration, et organise la relation entre les modules

2. Une fois la construction terminée, supprimez le répertoire redondant

Supprimez srcle répertoire (le projet parent ne fournit pas de code à exécuter, il ne sert qu'à la gestion des modules)

3. Créer des sous-modules

  1. Créer le sous-module Muh-app : module de démarrage du projet (entrée unifiée)
  2. Créer le sous-module Muh-design : connaissances liées à la conception de la base
  3. Supprimez les fichiers et dossiers redondants pour deux sous-modules : .gitignore, HELP.md,settings.gradle
  4. Une fois les deux modules construits, effacez build.gradletoutes les informations de configuration dans les fichiers de configuration des deux modules (la configuration associée des sous-modules peut être build.gradlegérée dans le fichier de configuration du projet racine à l'avenir)
  5. src/main/java/com/xfather/muhdesign/MuhDesignApplication.javaSupprimez la classe de démarrage et testez la classe de démarrage du sous-module Muh-designsrc/test/java/com/xfather/muhdesign/MuhDesignApplicationTests.java

4. Modifier build.gradlele fichier du projet racine

  1. Ajouter une configuration globaleallprojects

    allprojects {
       // 将以下内容移动到allprojects配置中
        group = 'com.xfather'
        version = '0.0.1-SNAPSHOT'
        sourceCompatibility = '17'
        targetCompatibility = '17'
    
       // 将plugins中的所有插件引入到全局配置中(根据默认初始化的plugins逐一添加)
        apply plugin:'java'
        apply plugin: 'org.springframework.boot'
        apply plugin: 'io.spring.dependency-management'
    
        repositories {
            mavenCentral()
        }
    }
    
  2. Ajouter une configuration de sous-modulesubprojects

    // 适用于子模块配置
    subprojects {
       dependencies {
          implementation 'org.springframework.boot:spring-boot-starter'
          developmentOnly 'org.springframework.boot:spring-boot-devtools'
          testImplementation 'org.springframework.boot:spring-boot-starter-test'
       }
    }
    
  3. Ajouter une configuration de module spécifique (la configuration personnalisée de chaque sous-module est ajoutée ici)

    // 特定项目配置
    project(':Muh-app'){
       dependencies {
          // Muh-app项目是Web应用启动入口,需要引入spring-boot-starter-web
          implementation 'org.springframework.boot:spring-boot-starter-web'
          // 添加项目依赖(给Muh-app项目引入Muh-design项目依赖)
          implementation project(':Muh-design')
       }
    }
    
    // 特定项目配置
    project(':Muh-design'){
    
    }
    
  4. Supprimer task.name('test')la configuration redondante

  5. Pièce jointe : build.gradleconfiguration complète du fichier

    // 插件管理
    plugins {
        id 'java'
        // springboot插件依赖
        id 'org.springframework.boot' version '3.0.2'
        // 版本管理插件依赖
        id 'io.spring.dependency-management' version '1.1.0'
    }
    
    // 全局配置管理(适用于所有模块【含子模块】)
    allprojects {
        group = 'com.xfather'
        version = '0.0.1-SNAPSHOT'
        sourceCompatibility = '17'
        targetCompatibility = '17'
    
        apply plugin:'java'
        apply plugin: 'org.springframework.boot'
        apply plugin: 'io.spring.dependency-management'
    
        repositories {
            mavenCentral()
        }
    }
    
    // 适用于子模块配置
    subprojects {
        dependencies {
            implementation 'org.springframework.boot:spring-boot-starter'
            developmentOnly 'org.springframework.boot:spring-boot-devtools'
            testImplementation 'org.springframework.boot:spring-boot-starter-test'
        }
    }
    
    // 特定项目配置
    project(':Muh-app'){
        dependencies {
            implementation 'org.springframework.boot:spring-boot-starter-web'
            // 添加项目依赖(声明对Muh-design模块的依赖)
            implementation project(':Muh-design')
        }
    }
    
    // 特定项目配置
    project(':Muh-design'){
    
    }
    

5. Modifier settings.gradlele fichier de configuration du projet racine

Introduisez les références du projet et ajoutez la configuration suivante

// 此处要按照加载顺序依次配置
include('Muh-design','Muh-app')

6. Muh-designCréez un service de test dans le module

  1. créercom.xfather.muhdesign.service.TestService
  2. Ajouter un service de test
    public String hello(){
         return "Hello,I'm Muh-design";
    }
    
  3. TestServiceAjouter @Servicedes commentaires à

7. Muh-appCréer des contrôles de test dans les modules

  1. créercom.xfather.muhapp.controller.TestController
  2. Ajouter un appel test
    TestService service;
    
    TestController(TestService service){
      this.service = service;
    }
    
    @GetMapping("hello")
    public String hello(){
      return service.hello();
    }
    
  3. TestControllerAjouter @RestControllerdes commentaires à

8. Modifier l'analyse du package Springboot

Étant donné que Springboot ne peut pas identifier automatiquement les classes sous d'autres modules, il doit être traité manuellement. Il existe trois méthodes :

  1. Le premier : utiliser @Importla classe correspondante importée
    , par exemple : ajouter dans le contrôleur@Import(TestService.class)
  2. Le deuxième type : @SpringBootApplicationajouter scanBasePackageClassesdes paramètres sur ce qui précède
    , c'est-à-dire :@SpringBootApplication(scanBasePackageClasses = {TestService.class})
  3. Le troisième type : @SpringBootApplicationajouter scanBasePackagedes paramètres sur ce qui précède
    , c'est-à-dire :@SpringBootApplication(scanBasePackages = "com.xfather")

9. Lancez le test

Commencez MuhAppApplication, visitez http://127.0.0.1:8080/hello pour voir les résultats en cours d'exécution

Problème commun

  1. Tâche "prepareKotlinBuildScriptModel" introuvable dans le projet :
    cause du problème : ce problème peut exister dans certaines versions de Gradle. Il est suspecté d'être lié au plug-in Kotlin.
    Solution 1 : ajoutez une tâche vide au fichier build.gradle pour couvrir résoudre ce problème

    task prepareKotlinBuildScriptModel {}
    

    ou

    tasks.register("prepareKotlinBuildScriptModel"){}
    

    Solution 2 : Désactiver le plug-in Kotlin d'IDEA

    文件 ——> 设置 ——> 插件 ——> 已安装 ——> 禁用Kotlin
    
  2. Impossible d'assembler automatiquement, pas de
    problème de Bean de type "XXX" Raison : étant donné que Springboot ne peut pas identifier automatiquement les classes sous d'autres modules, il doit être traité manuellement. Il existe trois méthodes : Solution 1 : Importer la classe correspondante
    sur le contrôleur correspondant@Import

    如:在controller中增加`@Import(TestService.class)`
    

    Solution 2 : @SpringBootApplicationajouter scanBasePackageClassesdes paramètres sur

    即:`@SpringBootApplication(scanBasePackageClasses = {TestService.class})`
    

    Solution 3 : @SpringBootApplicationajouter scanBasePackagedes paramètres sur

    即:`@SpringBootApplication(scanBasePackages = "com.xfather")` 
    
  3. Comment empaqueter et tester Gradle
    :
    Ouvrez le projet à tester dans le panneau Gradle sur le côté droit d'IDEA, qui sont : Tasks ——> verification ——> testVous pouvez commencer à tester
    Packaging :
    Ouvrez le projet à empaqueter dans le panneau Gradle sur le côté droit d'IDEA, dans l'ordre : Tasks ——> build ——> bootJarvous pouvez commencer à empaqueter, une fois l'empaquetage terminé, il sera généré build/libsdans le répertoire du projet

  4. Soumettre l'erreur git : aucun commit n'a été extrait
    Raison : lorsque le sous-module est créé, un dossier caché .git est créé en même temps, ce qui fait que le sous-module est reconnu comme une version gérée de manière indépendante Solution : supprimez
    le dossier .git sous le sous-module et re simplement soumettre

Guess you like

Origin blog.csdn.net/Asgard_Hu/article/details/128832478