從零開始,跟我一起做jblog項目(三)從Maven到Gradle
上一節講到項目構建工具Maven,對JAR包的管理不可謂不強大
博主在使用maven引入Spring框架時,了解到Spring推薦使用gradle工具來構建項目
百度了一下,發現Gradle也是一套很優秀的項目構建工具
Gradle使用Groovy語言配置項目和依賴,在極大地提升靈活性和配置性之外,甚至配置代碼要比XML結構的POM文件少很多
鑒於我希望將jblog打造成一款modern的小型個人博客系統
而gradle的首頁上介紹自己為Modern Open-Source Enterprise Build Automation
所以我決定將項目原型從maven構建轉移為gradle構建
目前關於Gradle的教程還比較零散,下面我會一步一步演示如何將Gradle集成到myeclipse中去
首先,到Gradle官網下載最新版的gradle
下載地址是http://gradle.org/gradle-download/
博主下載的是2.8版本,寫這篇文章的時候已經更新到2.9了
下載下來解壓到任意目錄
然后配置Windows環境變量,一共要配置三個,分別如下:
GRADLE_HOME:你的gradle解壓路徑,例如:D:\Workspaces\gradle-2.8
GRADLE_USER_HOME:你希望作為本地倉庫的路徑,自己建一個名為.gradle的路徑,例如:D:\Workspaces\.gradle
path:這個不用說,系統路徑,可以在cmd中直接敲gradle命令的,在path最后添加:%GRADLE_HOME%\bin;
這三個配置好了,我們初步驗證一下,打開cmd,任意路徑下敲入gradle -v命令,出現下面的響應就算安裝成功了
關於gradle的詳細命令和用法,大家可以參考下面的教程
http://wiki.jikexueyuan.com/project/gradle/
建議快速閱讀上面的教程后,我們來將gradle植入eclipse/myeclipse中
打開eclipse,進入marketplaces,搜索gradle,找到Gradle IDE Pack,經過博主測試這個插件是最好用的
安裝好Gradle IDE Pack插件后,重啟eclipse,新建一個最簡單的JAVA Project,或者試試Web Projec也可以
在項目根目錄下新建一個build.gradle文件,如圖所示
編輯build.gradle配置文件,示例如下:
apply plugin: "java" apply plugin: "eclipse" sourceCompatibility = 1.8 version = '1.0' configurations { provided } sourceSets { main.compileClasspath += configurations.provided test.compileClasspath += configurations.provided test.runtimeClasspath += configurations.provided } repositories { mavenLocal() maven {url "http://maven.oschina.net/content/groups/public/"} mavenCentral() } dependencies { compile "org.hibernate:hibernate-core:5.+" testCompile "junit:junit:4.7" provided "javax.servlet:javax.servlet-api:4.+" } //注意下面這個配置,新版本gradle如果不使用數組添加的話會導致eclipse頻繁報錯 eclipse.classpath.plusConfigurations += [configurations.provided]
保存build.gradle文件后,右鍵project,選擇configure,選擇convert to gradle project,為項目添加gradle特性
添加完gradle特性后,我們來讓eclipse將build.gradle中定義的幾個依賴包加入到項目中來
在這之前還需要配置一下Gradle IDE Pack插件,eclipse的window->preferencecs->Gradle,配置我們本地的gradle路徑
配置好了以后就萬事具備了,我們來試驗一下,如何將build.gradle文件中定義的依賴引入eclipse環境中
右擊project項目,選擇gradle,選擇Enable Dependency Management,讓插件來打開依賴管理
打開之后,仍然右鍵項目,gradle->Refresh Dependencies,刷新一下依賴列表
在后台,gradle將按照上述文件的定義,依次檢索我們系統中的maven本地倉庫,chinaos提供的中國鏡像倉庫,以及maven中央倉庫
將所需要的包下載到配置的gradle本地倉庫中,再引入到eclipse的classpath中,效果如下圖所示:
至此,關於gradle集成到eclipse的所有工作就結束了,項目編寫過程中,如果要繼續引入JAR包,就在build.gradle文件中添加
然后刷新一下gradle的依賴,就能實時添加到eclipse的環境中去了
最后着重講解一下provided的scope(有效依賴范圍),上一篇講到maven,其中配置依賴的scope常用的有下面幾種
compile:編譯,測試,打包時都需要依賴,比如spring、hibernate、struts等
test:測試時需要依賴,常見的有junit
provided:一般由容器提供,只有寫代碼時需要依賴,比如servlet
runtime:打包運行時需要依賴
轉移到gradle以后,gradle默認只為我們提供了四種scope,如下:
compile:編譯范圍依賴在所有的 classpath 中可用,同時它們也會被打包
runtime:依賴在運行和測試系統的時候需要,但在編譯的時候不需要。比如,你可能在編譯的時候只需要 JDBC API JAR,而只有在運行的時候才需要 JDBC 驅動實現
testCompile:測試期編譯需要的附加依賴
testRuntime:測試運行期需要
可以看到gradle默認並未提供類似provided的scope,那比如我們需要寫web project,則需要引入servlet包,而這時就比較麻煩
我們可以向eclipse的build path手工添加tomcat下的servlet包,但那樣未免顯得太low了,畢竟我們已經選擇使用項目構建工具來管理我們的JAR包了
別着急,gradle畢竟是使用一種編程語言來配置項目構建的,所以它的靈活性相當高,在上述的配置文件中,我們人為定義了一個provided的scope
並且將這個provided使用sourceSet集合定義了范圍,明確了在main目錄的compile期間需要依賴,在test目錄的編譯期間和運行期間需要依賴
言下之意就是在main目錄的運行期間不需要依賴嘍,也就是運行時不需要將此provided范圍的依賴打包
最后配合eclipse插件,向eclipse的classpath中添加了這一provided范圍,結果eclipse會將servlet引入到項目依賴中。