gradle簡單配置跟模塊依賴


參考文章:

概述
  作為一個項目管理工具,maven已經流行了好多年,近幾年gradle的項目慢慢多了起來,對其做一個基本的了解還是非常必要的。
  兩者定位相同,既然產生了gradle這個后來者,那maven有哪些不足呢?一般說來,maven的不足主要在2個方面:
  1、不夠簡便。尤其當項目較大,依賴的jar包多的時候,pom文件會變的非常龐大,即使做了分段整理加了注釋,查找起來還是感覺內容太多,有些不方便;
  2、不夠靈活。其實這個多數時候還好說,至少我的感受並不明顯。就是maven的構建過程是嚴格線性的( 參見文章),如果要做額外的操作,需要借助插件或者干脆自定義插件,這都是相對繁瑣的;
  而gradle由於grovvy語言的支持,可以做到比xml簡化很多的配置文件,也可以自己靈活的控制編譯打包的過程。
目標
  搭建一個springboot的項目,實現controller跟service的分離依賴
構建及打包測試
  spring的gradle項目,可以利用https://start.spring.io進行構建,比如:

  點擊Generate Project,即可下載到一個壓縮包,解壓導入idea,結構如下:

  目錄結構跟maven項目非常類似,只是原來的pom.xml替換成了settings.gradle跟build.gradle兩個文件。settings主要用於設置父子模塊依賴一類的配置,用於跟其它模塊的交互,build則用於項目構建。
  默認settings.gradle的內容只有項目名一行:rootProject.name = 'zzzgradletest'
  默認build.gradle內容如下:

plugins{
    id 'java'   //這是個java項目,因為gradle可以構建多種語言項目
    id 'org.springframework.boot' version '2.1.3.RELEASE'     
}
apply plugin: 'io.spring.dependency-management'
group 'com.study.wzy'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8

jar {   // 打jar包的配置
    baseName = 'mytest'
    version = '0.0.1'
    manifest {
        attributes "Manifest-Version": 1.0,
                'Main-Class': 'com.study.wzy.GradletestApplication'
    }
}
repositories { //maven資源庫配置
    mavenLocal() //優先使用本地庫,win下可以跟maven共用,mac os下未找到如何配置共用
    mavenCentral()
}
configurations {
    compileOnly { //僅在編譯時依賴,此處為lombok使用,相關注解在編譯時生成getter、setter等
        extendsFrom annotationProcessor
    }
}

dependencies {  //依賴jar包,每個jar包坐標包含三個基本元素:group,name,version
    annotationProcessor 'org.projectlombok:lombok:1.18.6'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.1.3.RELEASE'
    testCompile group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: '2.1.3.RELEASE'
    testCompile group: 'junit', name: 'junit', version: '4.12'     //testCompile 表示作用域
}

  運行idea右邊gradle下的build,可以生成jar包,java -jar xxx.jar 進行運行,可以訪問:

  示例代碼:

  運行jar:
  訪問結果
 拆解項目
  將項目拆為2個module,分別存放controller跟service,利用gradle設置依賴關系,並進行測試。
  idea中,file -> new Module ,選擇gradle跟java,next到底。創建service如下:
@Service
public class TestService {
    public String getName(){
        return "jack";
    }
}
web項目的啟動類代碼為:  
@RequestMapping("/test")
@RestController
@SpringBootApplication
public class GradletestApplication {
    public static void main(String[] args) {
        SpringApplication.run(GradletestApplication.class, args);
    }
    @Autowired
    private TestService testService;
    @RequestMapping("/mytest")
    public String mytest(){
        return "hello " + testService.getName();
    }
}
  在web項目,settings.gradle中引入service模塊:
rootProject.name = 'zzzgradletest'
includeFlat  'zzzservicetest'
  在web項目的build.gradle中設置
compile project(':zzzservicetest')
  引入service並進行依賴,gradle分別進行編譯后就可以進行訪問測試了
  另:以上建立的兩個模塊是獨立的,沒有在同一個project下,因此本例中將共同的依賴放到了service中,這樣web在依賴了service后會根據依賴傳遞,依賴到spring的相關jar。若service跟web兩個module都在同一個gradle的project下,則可以將共同的配置放到project的build.gradle中,而且在new module后會自動在project的setting.gradle中生成 include 'zzzservice' 類似的代碼,此時,則不用在web中配置includeFlat ‘xxxxxxx’了,includeFlat的含義是引用一個同級模塊。
  鑒於gradle的版本不同,有些配置也會略有區別,比如2.1及以上版本用plugins,而低版本則用apply plugin 。
 
  暫時這樣,一個簡單的demo,用於熟悉gradle。
 
 


免責聲明!

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



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