使用Gradle打依賴包失敗的問題及解決
使用Gradle打依賴包失敗
以前在使用Maven開發(fā)java web的項目中,我們通常會用多模塊來開發(fā),而使用Maven大大簡化了多模塊的開發(fā)。
現在Maven已經十分穩(wěn)定了,而近期由于接觸Gradle,被其簡約的配置,和靈活性所吸引!用Gradle來代替Maven是一個很不錯的選擇。
Gradle使用Maven的命令只需要引入插件即可!
plugins { ? ? id 'java' ? ? id 'maven' ? ? id 'maven-publish' }
如上所示,引入maven插件就可以使用 gradlew install 來代替 mvn install命令了
我在開發(fā)時,需要開發(fā)一個springboot-start的依賴,因此,因此需要單獨起一個項目來寫該依賴
但是在gradlew install 時 卻報錯了:
* 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目錄下面去找,果然沒有打好的jar包
然后使用 gradlew install -d 查看 install命令的詳細輸出發(fā)現:
09:18:57.865 [LIFECYCLE] [class org.gradle.internal.buildevents.TaskExecutionLogger] > Task :jar SKIPPED
發(fā)現 jar這個任務跳過去了。
經過檢查后發(fā)現我的gradle依賴中添加了一個插件
org.springframework.boot
我把這個插件去掉后,就可以成功打包了,但是這個插件是我規(guī)范springboot的版本使用的,如果不使用這個插件,我就需要在使用的springboot的各個依賴中添加版本號
經過測試后發(fā)現
該插件:
除了可以規(guī)定使用的springboot的版本外,同時還增加了名為bootRun和bootJar的gradle任務,當項目作為一個其他項目的依賴時,不應引入該插件,否則會提示打包失敗,找不到MainClass,當項目是作為一個完整的項目時,引入此依賴,那么即規(guī)定了springboot的版本,同時也可以使用 gradlew bootRun命令來運行此項目
那么打包問題解決了,如何解決版本問題呢?gradle 如果像maven那樣引入spring-boot-starter-parent 的pom依賴呢
使用:
implementation platform("org.springframework.boot:spring-boot-starter-parent:2.1.8.RELEASE")
就可以了
如果 依賴 并不是一個單獨的項目,而是一個單獨的模塊,那么這個時候,就需要在這個單獨的模塊中去排除這個依賴
找到父模塊對應的build.gradle 文件
修改
allprojects { ? ? ? ? ? ? // ? ?這些模塊不應用 springboot插件 ? ? if (!name.startsWith("common") && !name.startsWith("domain")) { ? ? ? ? apply plugin: 'org.springframework.boot' ? ? ? ? apply plugin: 'io.spring.dependency-management' ? ? } ? }
即可。
在使用maven 時,經常會看到optional關鍵字,其表示可選依賴:
應用場景
應用場景:projectA 依賴projectB, projectB 依賴projectC時
<dependency> ? <groupId>com.itear.projectC</groupId> ? <artifactId>projectC</artifactId> ? <version>0.0.1-SNAPSHOT</version> ? <optional>true</optional> </dependency>
當projectB的<optional>true</optional>時, projectA中如果沒有顯式的引入projectC, 則projectA不依賴projectC, 即projectA可以自己選擇是否依賴projectC
默認<optional>的值為false, 及子項目必須依賴
而在gradle中沒有這個關鍵字,可以使用 compileOnly 代替 implementation 來引入依賴 以達到maven optional關鍵字的效果
Gradle不能加載依賴包的處理
大早上的公司突然斷了一次電,來電后,我開啟機器,發(fā)現我的工程就是拉取不到本地maven上的依賴包,一下子就懵逼了。
我檢查網絡是通的
拉取第三方的依賴庫沒有問題
我使用其他同事的機器進行Sync Project,OK的。
一下子,就有點不知所措了,昨天都是好好的,斷個電就突然不行了,還以為是我Gradle文件被改過了,但事實上并沒有。
于是想baidu下看看有沒有其他人曾經碰到過這個問題,發(fā)現并沒有什么卵用。
仔細看了下Gradle的輸出日志,發(fā)現了一點信息,Could not load module metadata from XXX,于是我就去那個路徑下看了看,確實發(fā)現了
C:\Users\Administrator\.gradle\caches\modules-2\metadata-2.23\descriptors\XXX
因為是caches目錄下,所以我就刪除了XXX下面的所有文件,然后重新Sycn,就正常了。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
HTTP基本認證(Basic Authentication)的JAVA實例代碼
下面小編就為大家?guī)硪黄狧TTP基本認證(Basic Authentication)的JAVA實例代碼。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-11-11Java實現把excel xls中數據轉為可直接插入數據庫的sql文件
這篇文章主要介紹了Java實現把excel xls中數據轉為可直接插入數據庫的sql文件 的相關資料,需要的朋友可以參考下2016-03-03