gradle新建工程,多項目依賴,聚合工程


感謝gradle完全的文檔。開始完全沒想過新建項目會弄我一天時間,都說gradle構建項目簡單,我現在回復他們呵呵。

gradle是個非常復雜的工具,從他的完整包80M和72章官方文檔就可以看出一二。

 

一、平級項目依賴includeFlat

我的環境是gradle3.2.1,eclipse-neon,eclipse插件是(Buildship 1.0),jdk1.8

最常見的項目就是多工程平級的項目項目構造如下:

A

B

C

三個工程完全平級A是基礎工程打成jar包給C引用,B是jar工程 也是打成jar給C引用。C是web工程打成war包發布。

網上的坑爹教程都是騙人的,沒一個能解決這個問題。還是官方文檔靠譜,只是72章太多了。

這樣的工程配置其實非常簡單,新建三個gradle工程

A中的build.gradle完全不用改

B中的settings.gradle

 

[plain]  view plain  copy
 
  1. rootProject.name = 'B'  
  2. includeFlat  'A'  



 

 

 
        

記得請使用includeFlat表示水平級別。最開始寫成了include ‘A’結果坑了我4個多小時。

 

B中的build.gradle

 

[plain]  view plain  copy
 
  1. dependencies {  
  2.    compile project(':A')  
  3.    testCompile 'junit:junit:4.12'  
  4. }  


請注意

[plain]  view plain  copy
 
  1. compile project(':A')  

 

這個是gradle的依賴工程的寫法。有多個就寫多個就好

到這里B工程就配置完成了,打B的jar包就可以A一起打了。

 

C中的settings.gradle,和B的一樣加上

 

[plain]  view plain  copy
 
  1. includeFlat  'A','B'  

C中的build.gradle就需要改一下完整的如下

[plain]  view plain  copy
 
  1. apply plugin: 'war'  
  2. apply plugin: 'java'  
  3. apply plugin: 'eclipse'  
  4.   
  5. repositories {  
  6.     mavenLocal()  
  7.     mavenCentral()  
  8. }  
  9.   
  10. dependencies {  
  11.     compile project(':A')  
  12.     compile project(':B')  
  13.     compile 'org.slf4j:slf4j-api:1.7.21'  
  14.     testCompile 'junit:junit:4.12'  
  15. }  

修改了幾個地方 

 

1,加上了war的引用  加上之后插件中就顯示有war的選項了,build的時候也會默認安裝war的方式去打包。

2,中央庫被我改成默認使用maven的中央庫了

3,同時依賴了A B2個工程

 

到這里多個平級工程就建好了!其實真的挺簡單。

 

二、聚合工程,模塊式開發include

然后開發中還會有一種需求,在maven中叫聚合工程。項目結構如下:

C

|------C1

|------C2

就是一個工程被分為多個模塊,每個模塊需要在eclipse中顯示為單獨的工程。

其實寫法非常簡單,只是把之前的includeFlat改成include就好了

C中settings.gradle

[plain]  view plain  copy
 
  1. rootProject.name = 'C'  
  2. include 'C1','C2'  

 

 

C1和C2都不需要修改任何代碼,只是要在根目錄下新增一個名為C1和C2的文件夾,C1和C2的文件夾下需要存在一個語法正確的build.gradle。

然后刷新gradle就可以看到工程已經出來了。

 

三、多工程,多模塊依賴(bt依賴)

假設

A

|----A1

C

|----C1

現在如果C1需要依賴A1,那么問題來了,這2個子模塊根本沒啥關系,如何依賴呢!

A中的settings.gradle

 

[plain]  view plain  copy
 
  1. rootProject.name = 'A'  
  2. include 'A1'  

A1貌似不需要修改啥

 

C中的settings.gradle

 

[plain]  view plain  copy
 
  1. rootProject.name = 'C'  
  2. include 'C1'  
  3. includeFlat 'A'  
  4. include 'A:A1'  

一般來說我們是不會在子模塊中放入settings.gradle。即使放了C1中的settings.gradle也是不生效的,所以只能在C中的配置中寫入。
C1中就可以在build.gradle

 

 

 

[plain]  view plain  copy
 
  1. dependencies {  
  2.     compile project(':A:A1')  
  3.     testCompile 'junit:junit:4.12'  
  4. }  
 
刷新gradle,這里的依賴請注意,因為gradle是默認帶有依賴傳遞的,所以已經在A1引入的jar包在C1中也會默認引入,請注意jar包沖突。
如果有重復的jar包,會以C1中的為准,這種工程非常容易出現重復的jar,請注意jar的依賴。

 

總結:其實gradle是個很好用的工具,只是現在資料不好找。而且網上誤導不全的一大把! 所以學gradle還是老老實實去看官方文檔吧。

另:如果讓我在選一次,我是不會選擇gradle的!!!!! 因為他的tomcat插件太難用了,而且國外一般都是linux開發環境,一堆命令行,在我們這種用習慣eclipse的人來說太不友好了。我是出現tomcat插件在eclipse中永遠8%的問題了的,在命令行就可以啟動。瑪德,這樣起了斷點怎么調試,簡直蛋疼。最后還是引入了spring boot才把調試問題搞定,引入了spring boot之后又要把web.xml去掉,解決一個問題就要連鎖反應,這個就不太好了。所以差評!!差評!!差評!!

不是gradle不強大,而且我太low。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM