使用Gradle打依賴包失敗的問(wèn)題及解決
使用Gradle打依賴包失敗
以前在使用Maven開(kāi)發(fā)java web的項(xiàng)目中,我們通常會(huì)用多模塊來(lái)開(kāi)發(fā),而使用Maven大大簡(jiǎn)化了多模塊的開(kāi)發(fā)。
現(xiàn)在Maven已經(jīng)十分穩(wěn)定了,而近期由于接觸Gradle,被其簡(jiǎn)約的配置,和靈活性所吸引!用Gradle來(lái)代替Maven是一個(gè)很不錯(cuò)的選擇。
Gradle使用Maven的命令只需要引入插件即可!
plugins { ? ? id 'java' ? ? id 'maven' ? ? id 'maven-publish' }
如上所示,引入maven插件就可以使用 gradlew install 來(lái)代替 mvn install命令了
我在開(kāi)發(fā)時(shí),需要開(kāi)發(fā)一個(gè)springboot-start的依賴,因此,因此需要單獨(dú)起一個(gè)項(xiàng)目來(lái)寫(xiě)該依賴
但是在gradlew install 時(shí) 卻報(bào)錯(cuò)了:
* What went wrong:
Execution failed for task ':install'.
> Could not publish configuration 'archives'
> Cannot publish artifact 'dynamic-datasource-spring-boot-starter.jar' (E:\dynamic-datasource-spring-boot-starter\build\libs\dynamic-datasource-spring-boot-starter-1.0-SNA
PSHOT.jar) as it does not exist.
提示找不到打好的jar包,然后去build目錄下面去找,果然沒(méi)有打好的jar包
然后使用 gradlew install -d 查看 install命令的詳細(xì)輸出發(fā)現(xiàn):
09:18:57.865 [LIFECYCLE] [class org.gradle.internal.buildevents.TaskExecutionLogger] > Task :jar SKIPPED
發(fā)現(xiàn) jar這個(gè)任務(wù)跳過(guò)去了。
經(jīng)過(guò)檢查后發(fā)現(xiàn)我的gradle依賴中添加了一個(gè)插件
org.springframework.boot
我把這個(gè)插件去掉后,就可以成功打包了,但是這個(gè)插件是我規(guī)范springboot的版本使用的,如果不使用這個(gè)插件,我就需要在使用的springboot的各個(gè)依賴中添加版本號(hào)
經(jīng)過(guò)測(cè)試后發(fā)現(xiàn)
該插件:
除了可以規(guī)定使用的springboot的版本外,同時(shí)還增加了名為bootRun和bootJar的gradle任務(wù),當(dāng)項(xiàng)目作為一個(gè)其他項(xiàng)目的依賴時(shí),不應(yīng)引入該插件,否則會(huì)提示打包失敗,找不到MainClass,當(dāng)項(xiàng)目是作為一個(gè)完整的項(xiàng)目時(shí),引入此依賴,那么即規(guī)定了springboot的版本,同時(shí)也可以使用 gradlew bootRun命令來(lái)運(yùn)行此項(xiàng)目
那么打包問(wèn)題解決了,如何解決版本問(wèn)題呢?gradle 如果像maven那樣引入spring-boot-starter-parent 的pom依賴呢
使用:
implementation platform("org.springframework.boot:spring-boot-starter-parent:2.1.8.RELEASE")
就可以了
如果 依賴 并不是一個(gè)單獨(dú)的項(xiàng)目,而是一個(gè)單獨(dú)的模塊,那么這個(gè)時(shí)候,就需要在這個(gè)單獨(dú)的模塊中去排除這個(gè)依賴
找到父模塊對(duì)應(yīng)的build.gradle 文件
修改
allprojects { ? ? ? ? ? ? // ? ?這些模塊不應(yīng)用 springboot插件 ? ? if (!name.startsWith("common") && !name.startsWith("domain")) { ? ? ? ? apply plugin: 'org.springframework.boot' ? ? ? ? apply plugin: 'io.spring.dependency-management' ? ? } ? }
即可。
在使用maven 時(shí),經(jīng)常會(huì)看到optional關(guān)鍵字,其表示可選依賴:
應(yīng)用場(chǎng)景
應(yīng)用場(chǎng)景:projectA 依賴projectB, projectB 依賴projectC時(shí)
<dependency> ? <groupId>com.itear.projectC</groupId> ? <artifactId>projectC</artifactId> ? <version>0.0.1-SNAPSHOT</version> ? <optional>true</optional> </dependency>
當(dāng)projectB的<optional>true</optional>時(shí), projectA中如果沒(méi)有顯式的引入projectC, 則projectA不依賴projectC, 即projectA可以自己選擇是否依賴projectC
默認(rèn)<optional>的值為false, 及子項(xiàng)目必須依賴
而在gradle中沒(méi)有這個(gè)關(guān)鍵字,可以使用 compileOnly 代替 implementation 來(lái)引入依賴 以達(dá)到maven optional關(guān)鍵字的效果
Gradle不能加載依賴包的處理
大早上的公司突然斷了一次電,來(lái)電后,我開(kāi)啟機(jī)器,發(fā)現(xiàn)我的工程就是拉取不到本地maven上的依賴包,一下子就懵逼了。
我檢查網(wǎng)絡(luò)是通的
拉取第三方的依賴庫(kù)沒(méi)有問(wèn)題
我使用其他同事的機(jī)器進(jìn)行Sync Project,OK的。
一下子,就有點(diǎn)不知所措了,昨天都是好好的,斷個(gè)電就突然不行了,還以為是我Gradle文件被改過(guò)了,但事實(shí)上并沒(méi)有。
于是想baidu下看看有沒(méi)有其他人曾經(jīng)碰到過(guò)這個(gè)問(wèn)題,發(fā)現(xiàn)并沒(méi)有什么卵用。
仔細(xì)看了下Gradle的輸出日志,發(fā)現(xiàn)了一點(diǎn)信息,Could not load module metadata from XXX,于是我就去那個(gè)路徑下看了看,確實(shí)發(fā)現(xiàn)了
C:\Users\Administrator\.gradle\caches\modules-2\metadata-2.23\descriptors\XXX
因?yàn)槭莄aches目錄下,所以我就刪除了XXX下面的所有文件,然后重新Sycn,就正常了。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
HTTP基本認(rèn)證(Basic Authentication)的JAVA實(shí)例代碼
下面小編就為大家?guī)?lái)一篇HTTP基本認(rèn)證(Basic Authentication)的JAVA實(shí)例代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11Java配置win10環(huán)境變量過(guò)程圖解
這篇文章主要介紹了Java配置win10環(huán)境變量過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05詳解Java動(dòng)態(tài)加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)
本篇文章主要介紹了詳解Java動(dòng)態(tài)加載數(shù)據(jù)庫(kù)驅(qū)動(dòng),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05Java實(shí)現(xiàn)把excel xls中數(shù)據(jù)轉(zhuǎn)為可直接插入數(shù)據(jù)庫(kù)的sql文件
這篇文章主要介紹了Java實(shí)現(xiàn)把excel xls中數(shù)據(jù)轉(zhuǎn)為可直接插入數(shù)據(jù)庫(kù)的sql文件 的相關(guān)資料,需要的朋友可以參考下2016-03-03Java如何按16進(jìn)制發(fā)送和接收TCP指令
這篇文章主要介紹了Java如何按16進(jìn)制發(fā)送和接收TCP指令問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09Mybatis應(yīng)用mysql存儲(chǔ)過(guò)程查詢數(shù)據(jù)實(shí)例
下面小編就為大家分享一篇Mybatis應(yīng)用mysql存儲(chǔ)過(guò)程查詢數(shù)據(jù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12Mybatis中的@Param及動(dòng)態(tài)SQL詳解
這篇文章主要介紹了Mybatis中的@Param及動(dòng)態(tài)SQL詳解,@Param是MyBatis所提供的作為Dao層的注解,作用是用于傳遞參數(shù),從而可以與SQL中的的字段名相對(duì)應(yīng),需要的朋友可以參考下2023-10-10