より馴染みのあるモデルは Springboot+Maven のマルチモジュール構成方式ですが、最近 Gradle が非常に強力になっているので、Gradle の公式 Web サイトに掲載されている 5 つの耐圧テスト シナリオのデータによると、確かに Gradle の処理性能は Maven よりも高速です。 Gradle がマルチモジュールの構築と、さまざまな依存関係の導入と表示をどのように行うかを見てみましょう。
Gradle 公式 Web サイトが提供する Maven と Gradle の比較に興味がある場合は、https://gradle.org/maven-vs-gradle/ をクリックしてください。
材料:
- SpringBoot 2.3.12.RELEASE
- アイディア
- メイブン 3.6.0
- ガドル 7.4
クイックビュー:
1.IDEAのMavenマルチモジュール
公式ウェブサイト直撃: https://maven.apache.org/
一般的な建設工程
- 新しいプロジェクトを作成します。Spring Initializer を使用して初期化できます。Maven プロジェクトを選択します。
- src ディレクトリを削除し、外部 pom.xml だけを残します。
- 親プロジェクトを右クリックし、「新規」->「モジュール」->「Maven プロジェクト」をクリックし、プロジェクト名を入力して Maven サブプロジェクトを生成します。
- 親プロジェクトでは、pom.xml によってサブモジュール名が自動的に書き込まれ、サブモジュール pom.xml によって親プロジェクト名が自動的に書き込まれます。
- 親プロジェクトでバージョンの統一定義と依存関係の統一宣言が可能
Maven の一般的な手順
一般的な梱包指令
#跳过单测打包
mvn clean package -Dmaven.test.skip=true
#跳过单测打包,并把打好的包上传到本地仓库
mvn clean install -Dmaven.test.skip=true
#跳过单测打包,并把打好的包上传到远程仓库
mvn clean deploy -Dmaven.test.skip=true
その他の指示
#查看版本
mvn -v
#创建 Maven 项目
mvn archetype:create
#编译源代码
mvn compile
#编译测试代码
mvn test-compile
#运行应用程序中的单元测试
mvn test
#生成项目相关信息的网站
mvn site
#依据项目生成 jar 文件
mvn package
#在本地 Repository 中安装 jar
mvn install
#忽略测试文档编译
mvn -Dmaven.test.skip=true
#清除目标目录中的生成结果
mvn clean
#将.java类编译为.class文件
mvn clean compile
#进行打包
mvn clean package
#执行单元测试
mvn clean test
#部署到版本仓库
mvn clean deploy
#使其他项目使用这个jar,会安装到maven本地仓库中
mvn clean install
#创建项目架构
mvn archetype:generate
#查看已解析依赖
mvn dependency:list
#【*常用*】看到依赖树
mvn dependency:tree com.xx.xxx
#查看依赖的工具
mvn dependency:analyze
#从中央仓库下载文件至本地仓库
mvn help:system
#查看当前激活的profiles
mvn help:active-profiles
#查看所有profiles
mvn help:all-profiles
#查看完整的pom信息
mvn help:effective -pom
2.IDEAのGradleマルチモジュール
公式サイト直撃:https://gradle.org/
ビルドプロセス
基本的なプロセスは同じですが、Maven 構成と比較すると、gradle 親プロジェクトにサブプロジェクト構成があり、これを手動で調整する必要があります。
- 新しいプロジェクトを作成し、[Spring Initializer]を使用して初期化し、gradle プロジェクトを選択します
- src ディレクトリを削除し、外部 [build.gradle/gradlew/gradlew.bat/setting.gradle] を保持します。
- gradle ディレクトリは、プロジェクトの最上位ディレクトリ [gradle->wrapper->gradle-wrapper.jar/gradle-wrapper.preperties] の下に自動的に作成されます。自己構築プロジェクトの場合は、料金を支払う必要があります。導入に注意してください (ここでは、プロジェクト Maven プロジェクトにはさらに多くのファイルが含まれます)
- 親プロジェクトを右クリックし、[新規->モジュール->Gradle] プロジェクトを選択し、プロジェクト名を入力して Gradle サブプロジェクトを生成します。サブモジュールには [build.gradle] ファイルが 1 つだけあります
- サブモジュール名[include "submodule"]は親プロジェクトのsetting.gradleに自動で記述されますが、mavenと異なりサブモジュールの包含関係は別ファイルに記述されます。サブモジュールには親プロジェクトの痕跡はありません。
- 親プロジェクトでは、バージョン [ext] の統一定義と、サブプロジェクト内の依存関係の統一宣言を行うことができます{dependency{} dependencyManagement{}}
- Gradle プロジェクトとの違いは、サブモジュールの依存関係を親プロジェクトで個別に記述する必要があることです。
plugins {
id 'org.springframework.boot' version '2.3.12.RELEASE'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'com.learning'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
ext {
set('springCloudVersion', "Hoxton.SR12")
}
subprojects {
apply plugin: 'java'
apply plugin: 'org.springframework.boot' //引入外部定义的插件
apply plugin: 'io.spring.dependency-management' //引入外部定义的插件
ext {
springVersion = "2.3.12.RELEASE" //统一定义版本,后面引用
compileJava.options.encoding = 'UTF-8'
compileTestJava.options.encoding = 'UTF-8'
springCloudVersion = "Hoxton.SR12"
}
sourceCompatibility = 1.11
targetCompatibility = 1.11
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
//配置依赖
dependencies {
implementation 'org.springframework.boot:spring-boot-starter' //一次性定义子项目包含的依赖
implementation 'com.alibaba:fastjson:2.0.33' //指定版本
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
tasks.named('test') {
useJUnitPlatform()
}
}
Gradle の共通コマンド
- Gradle は、Groovy 言語に基づいて Google によって開発された構成言語であり、Ant ビルドを置き換えるために使用されます。
- gradle に基づいて構築されたプロジェクトには、gradle ラッパーと呼ばれる gradle ローカル エージェントがあります。これは、前の手順のプロジェクト ルート ディレクトリの下の gradle サブディレクトリのコンテンツです。
# 查看构建版本
./gradlew -v
# 清除build文件夹
./gradlew clean
a@b:~/files/gitFile/springcloudall$ ./gradlew clean
BUILD SUCCESSFUL in 827ms
3 actionable tasks: 2 executed, 1 up-to-date
# 检查依赖并编译打包
./gradlew build
./gradlew dependencies
a@b:~/files/gitFile/springcloudall/eurekaclient$ ../gradlew dependencies
> Task :eurekaclient:dependencies
------------------------------------------------------------
Project ':eurekaclient'
------------------------------------------------------------
annotationProcessor - Annotation processors and their dependencies for source set 'main'.
\--- org.projectlombok:lombok -> 1.18.20
apiElements - API elements for main. (n)
No dependencies
archives - Configuration for archive artifacts. (n)
No dependencies
bootArchives - Configuration for Spring Boot archive artifacts.
No dependencies
compileClasspath - Compile classpath for source set 'main'.
+--- org.projectlombok:lombok -> 1.18.20
+--- org.springframework.boot:spring-boot-starter -> 2.3.12.RELEASE
| +--- org.springframework.boot:spring-boot:2.3.12.RELEASE
| | +--- org.springframework:spring-core:5.2.15.RELEASE
| | | \--- org.springframework:spring-jcl:5.2.15.RELEASE
| | \--- org.springframework:spring-context:5.2.15.RELEASE
| | +--- org.springframework:spring-aop:5.2.15.RELEASE
| | | +--- org.springframework:spring-beans:5.2.15.RELEASE
| | | | \--- org.springframework:spring-core:5.2.15.RELEASE (*)
| | | \--- org.springframework:spring-core:5.2.15.RELEASE (*)
| | +--- org.springframework:spring-beans:5.2.15.RELEASE (*)
| | +--- org.springframework:spring-core:5.2.15.RELEASE (*)
| | \--- org.springframework:spring-expression:5.2.15.RELEASE
| | \--- org.springframework:spring-core:5.2.15.RELEASE (*)
| +--- org.springframework.boot:spring-boot-autoconfigure:2.3.12.RELEASE
| | \--- org.springframework.boot:spring-boot:2.3.12.RELEASE (*)
| +--- org.springframework.boot:spring-boot-starter-logging:2.3.12.RELEASE
| | +--- ch.qos.logback:logback-classic:1.2.3
| | | +--- ch.qos.logback:logback-core:1.2.3
| | | \--- org.slf4j:slf4j-api:1.7.25 -> 1.7.30
| | +--- org.apache.logging.log4j:log4j-to-slf4j:2.13.3
| | | +--- org.slf4j:slf4j-api:1.7.25 -> 1.7.30
| | | \--- org.apache.logging.log4j:log4j-api:2.13.3
| | \--- org.slf4j:jul-to-slf4j:1.7.30
| | \--- org.slf4j:slf4j-api:1.7.30
| +--- jakarta.annotation:jakarta.annotation-api:1.3.5
| +--- org.springframework:spring-core:5.2.15.RELEASE (*)
# 或者模组的 依赖
./gradlew app:dependencies
# 检索依赖库
./gradlew app:dependencies | grep CompileClasspath
# windows 没有 grep 命令
./gradlew app:dependencies | findstr "CompileClasspath"