Gradle實戰及Maven專案遷移採坑記錄
最近準備把專案從maven遷移到gradle。由於之前也沒接觸過gradle,中途也遇到了一些坑,這裡記錄一下供後來者參考,適合gradle新手小白參考。後續如果有其他gradle相關問題也會繼續更新。
這裡的版本採用的是6.7。環境安裝參考官方文章,通過gradle -version 判斷環境是否正確。
如何使用全域性引數
在gradle.properties中可以定義全域性引數,如以下:
springBootVersion=2.3.6.RELEASE
在build.gradle中通過${xxx}引用:
...
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
...
父子專案工程如何定義
這裡定義了一個demo-core,目錄結構如下:
/demo-core
/demo-core-common
build.gradle
/demo-core-service
build.gradle
build.gradle
settings.gradle
gradle.properties
在setting.gradle中定義子專案包名
rootProject.name = 'demo-core'
include 'demo-core-common'
include 'demo-core-service'
在頂層的build.gradle可以通過subprojects,設定全域性子專案的配置
subprojects {
apply plugin: 'java'
apply plugin: 'idea'
group = 'com.lwtxzwt'
version = '1.0.0-SNAPSHOT'
sourceCompatibility = 11
targetCompatibility = 11
repositories {
mavenLocal()
maven { url 'http://xxx.xxx.xxx/repository/maven-public/' }
mavenCentral()
}
jar {
enabled = true
}
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
}
如何上傳到私服倉庫
這裡我們需要將demo-core-common打包上傳到私服倉庫,配置demo-core-common目錄下的build.gradle
apply plugin: 'java'
apply plugin: 'maven'
uploadArchives {
repositories {
def nexusUrl = '這裡配置maven的倉庫'
mavenDeployer {
def releasesRepoUrl = "$nexusUrl/repository/maven-releases/"
def snapshotsRepoUrl = "$nexusUrl/repository/maven-snapshots/"
repository(url: version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl) {
authentication(userName: "$mavenUser", password: "$mavenPassword")
}
}
}
}
這樣在gradle的task中就會出現upload,也可以通過upload命令上傳。
如何在service中依賴common的jar
我們需要在demo-core-service中依賴demo-core-common的jar包,配置demo-core-service
dependencies {
implementation project(':demo-core-common')
...
}
外部依賴更新後,本地未生效
當外部依賴的程式碼更新後,本地未生效。這是由於gradle存在快取機制,需要關閉快取機制,或者刪除本地jar包,才會觸發更新。這裡將快取期限設定為0,每次執行都會重新下載依賴。
configurations.all {
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
implementation和api的區別
implementation 表示依賴,即只依賴不打包進來。個人理解有點類似maven中的optional設定為true。
api 表示打包,即不僅依賴還打包進來,這樣上層就不用重複依賴。
compileOnly編譯時可用
compileOnly 表示編輯時用,即不參與打包。最經典的例子就是lombok,一般配合annotationProcessor使用。
annotationProcessor 表示用於註解處理器的依賴配置。不太常用,目前只在lombok中用到。
dependencies {
compileOnly 'org.projectlombok:lombok:1.18.16'
annotationProcessor 'org.projectlombok:lombok:1.18.16'
}
gradle外掛
類似maven的外掛,gradle也提供了很多基礎功能外掛。
- 做maven上傳到私服時,我們就用了maven的外掛’maven’。
- 當應用’io.spring.dependency-management’外掛的時候,Spring Boot外掛將自動從使用的Spring
Boot版本匯入spring-boot-dependencies,你可以省略bom中宣告依賴的版本號。 - 對於IDE的外掛’idea’或者’eclipse’等。
其他更多外掛可以到官方查閱:https://plugins.gradle.org
相關文章
- maven 專案轉化成 gradle 專案實踐MavenGradle
- ssts-hospital-web-master專案實戰記錄三十一:專案遷移-核心模組實現(useDeviceDriver)WebASTdev
- ssts-hospital-web-master專案實戰記錄三十二:專案遷移-核心模組實現(useFlow)WebAST
- Gradle自動化專案構建之Gradle學習及實戰Gradle
- ssts-hospital-web-master專案實戰記錄五十:專案遷移-業務頁面實現(主框架-檔案結構)WebAST框架
- ssts-hospital-web-master專案實戰記錄三十三:專案遷移-核心模組實現(useDeviceDriver-刷卡器)WebASTdev
- ssts-hospital-web-master專案實戰記錄三十三:專案遷移-核心模組實現(useDeviceDriver-文件印表機)WebASTdev
- ssts-hospital-web-master專案實戰記錄三十三:專案遷移-核心模組實現(useDeviceDriver-標籤印表機)WebASTdev
- iOS – RxSwift 專案實戰記錄iOSSwift
- ssts-hospital-web-master專案實戰記錄三十三:專案遷移-核心模組實現(useDeviceDriver-身份證讀卡器)WebASTdev
- ssts-hospital-web-master專案實戰記錄三十三:專案遷移-核心模組實現(useDeviceDriver-非接讀卡器)WebASTdev
- React專案踩坑記錄React
- vuePC專案踩坑記錄Vue
- ssts-hospital-web-master專案實戰記錄三十三:專案遷移-核心模組實現(useDeviceDriver-銀行卡讀卡器)WebASTdev
- ssts-hospital-web-master專案實戰記錄三十三:專案遷移-核心模組實現(useDeviceDriver-社保卡讀卡器)WebASTdev
- 專案實戰之gradle在實際專案中的使用Gradle
- ssts-hospital-web-master專案實戰記錄三十三:專案遷移-核心模組實現(useDeviceDriver-髮卡機&髮卡機讀卡器)WebASTdev
- 記錄一次餘額遷移的坑(測試角度)
- mpvue框架搭建採坑記錄Vue框架
- GORM之ErrRecordNotFound採坑記錄GoORM
- Gradle Kotlin DSL遷移指南GradleKotlin
- 阿里雲NAS檔案遷移專案實踐阿里
- Maven教程(Eclipse配置及maven專案)MavenEclipse
- 將maven、gradle倉庫遷移到d盤MavenGradle
- 專案遷移的思考
- Laravel-admin 的採坑記錄Laravel
- 實戰 | 使用maven 輕鬆重構專案Maven
- Mysql百萬級資料遷移實戰筆記MySql筆記
- Centos8.3、docker部署springboot專案實戰記錄CentOSDockerSpring Boot
- 【開源系列】專案開源實戰記錄-序
- svn專案遷移至gitlab流程(保留提交記錄)Gitlab
- maven專案遇到的一些問題記錄Maven
- 100爬蟲專案遷移爬蟲
- django+jquery 用post方式上傳檔案採坑記錄DjangojQuery
- jenkins 遷移踩坑Jenkins
- 【Maven實戰技巧】「外掛使用專題」Maven-Archetype外掛建立自定義maven專案骨架Maven
- 如何在maven專案或者gradle專案中搭建swagger-本地測試工具MavenGradleSwagger
- Maven專案沒有resources目錄Maven