gradle簡單配置跟模塊依賴

參考文章:

概述
  做爲一個項目管理工具,maven已經流行了好多年,近幾年gradle的項目慢慢多了起來,對其作一個基本的瞭解仍是很是必要的。
  二者定位相同,既然產生了gradle這個後來者,那maven有哪些不足呢?通常說來,maven的不足主要在2個方面:
  一、不夠簡便。尤爲當項目較大,依賴的jar包多的時候,pom文件會變的很是龐大,即便作了分段整理加了註釋,查找起來仍是感受內容太多,有些不方便;
  二、不夠靈活。其實這個多數時候還好說,至少個人感覺並不明顯。就是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 進行運行,能夠訪問:html

  示例代碼:java

  運行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。
相關文章
相關標籤/搜索