构建工具是Java项目的基石。Maven稳定成熟,Gradle灵活高效。本文对比两者,并讲解多模块、CI/CD集成。
一、Maven核心
1.1 生命周期
clean
validate → compile → test → package → verify → install → deploy
1.2 依赖范围
| scope | 说明 |
|---|---|
| compile | 默认,全阶段 |
| provided | 编译和测试,运行时由容器提供 |
| runtime | 运行和测试 |
| test | 仅测试 |
| system | 本地jar(不推荐) |
1.3 依赖冲突
bash
复制
下载
mvn dependency:tree
Maven采用"最短路径优先"和"先声明优先"。
排除依赖:
xml
复制
下载
运行
<dependency> <groupId>com.example</groupId> <artifactId>lib-a</artifactId> <version>1.0</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency>
二、多模块项目
父POM:
xml
复制
下载
运行
<project> <groupId>com.example</groupId> <artifactId>parent</artifactId> <version>1.0.0</version> <packaging>pom</packaging> <modules> <module>common</module> <module>service</module> <module>web</module> </modules> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>3.2.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>
子模块:
xml
复制
下载
运行
<parent> <groupId>com.example</groupId> <artifactId>parent</artifactId> <version>1.0.0</version> </parent> <artifactId>common</artifactId>
三、Maven Profile
xml
复制
下载
运行
<profiles> <profile> <id>dev</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <env>dev</env> </properties> </profile> <profile> <id>prod</id> <properties> <env>prod</env> </properties> </profile> </profiles>
bash
复制
下载
mvn clean package -Pprod
四、Gradle核心
groovy
复制
下载
plugins { id 'java' id 'org.springframework.boot' version '3.2.0' } group = 'com.example' version = '1.0.0' java { toolchain { languageVersion = JavaLanguageVersion.of(21) } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation 'org.springframework.boot:spring-boot-starter-test' } tasks.named('test') { useJUnitPlatform() }Kotlin DSL:
kotlin
复制
下载
dependencies { implementation("org.springframework.boot:spring-boot-starter-web") testImplementation("org.springframework.boot:spring-boot-starter-test") }五、Maven vs Gradle
| 特性 | Maven | Gradle |
|---|---|---|
| 配置 | XML | Groovy/Kotlin |
| 性能 | 较慢 | 增量构建快 |
| 灵活性 | 低 | 高 |
| 学习曲线 | 平缓 | 陡峭 |
| 生态 | 成熟 | 活跃 |
六、CI/CD集成
6.1 GitHub Actions
yaml
复制
下载
name: Build on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-java@v3 with: java-version: '21' distribution: 'temurin' cache: 'maven' - run: mvn clean verify - run: mvn sonar:sonar
6.2 Jenkins Pipeline
groovy
复制
下载
pipeline { agent any stages { stage('Build') { steps { sh 'mvn clean package -DskipTests' } } stage('Test') { steps { sh 'mvn test' } } stage('Deploy') { steps { sh './deploy.sh' } } } post { always { junit 'target/surefire-reports/*.xml' } } }七、版本管理
语义化版本:
MAJOR.MINOR.PATCHSNAPSHOT:开发版
Release:正式版
统一版本:
revision属性
xml
复制
下载
运行
<version>${revision}</version> <properties> <revision>1.0.0</revision> </properties>八、总结
Maven适合传统企业项目,Gradle适合追求性能和灵活性的团队。掌握多模块、Profile、CI/CD,能提升团队交付效率。