- 安裝 Gradle
- build.gradle
如果是用 eclipse 開發,在專案的根目錄下新增一個文字檔,檔名為 build.gradle,這個檔名不是強迫非取這個名稱不可,只不過這是預設的檔名,這一篇希望快速的用 gradle 來編譯、測試及包裝 war 檔,一切都採預設值。接下來還有一些目錄也都是 gradle 預設的,以後有空會說明怎麼使用非預設的目錄,但是這邊我們把程式都放到預設目錄,現在說明這些目錄的用處 (目錄當然要自己建立啦~)。
- src/main: 網站相關的檔案,像是 java、jsp、html、*.properties、*.xml ... 都放在這個目錄下的子目錄。
- src/main/java: 顧名思義,這裡是放 java 程式碼的地方。
- src/main/webapp: 這個目錄就相當於一般我們用 eclipse 產生一個 web project 時,eclipse 自動幫我們產生的 WebContent,這個目錄在部署後就會相當於網站的根目錄。
- src/test/java: 測試程式放這個目錄下,只要裡面有測試程式,每次執行 gradle 時,在 compile 並包裝成 war 這些工作完成後,gradle 還會來執行這些測試程式產生測試報告。
1 apply plugin: 'java' 2 apply plugin: 'war' 3 4 sourceCompatibility = 1.8 5 version = '1.0' 6 7 sourceSets { 8 main { 9 java { 10 srcDirs = ['src/main/java'] 11 } 12 resources { 13 srcDirs = ['config'] 14 } 15 } 16 test { 17 java { 18 srcDirs = ['src/test/java'] 19 } 20 } 21 } 22 23 buildDir = 'out' 24 25 repositories { 26 maven { url "http://maven.springframework.org/milestone" } 27 maven { url "http://repo.maven.apache.org/maven2" } 28 maven { url "http://repo1.maven.org/maven2/" } 29 maven { url "http://amateras.sourceforge.jp/mvn/" } 30 mavenCentral() 31 } 32 33 configurations.all { 34 exclude group: 'org.freemarker', module: 'freemarker' 35 exclude group: 'javax.el', module: 'el-api' 36 exclude group: 'xerces', module: 'xercesImpl' 37 exclude group: 'xml-apis', module: 'xml-apis' 38 exclude group: 'jboss', module: 'javassist' 39 exclude group: 'org.apache.tomcat.embed', module: 'tomcat-embed-core' 40 exclude group: 'org.apache.tomcat.embed', module: 'tomcat-embed-el' 41 exclude group: 'org.apache.tomcat.embed', module: 'tomcat-embed-websocket' 42 exclude group: 'org.apache.tomcat', module: 'tomcat-jdbc' 43 exclude group: 'org.apache.tomcat', module: 'tomcat-juli' 44 exclude group: 'org.apache.ant', module: 'ant' 45 46 resolutionStrategy { 47 force group: 'org.apache.ant', name: 'ant', version: '1.10.1' 48 } 49 } 50 51 dependencies { 52 def tomcatVersion = '9.0.0.M22' 53 def springVersion = '4.3.10.RELEASE' 54 def springBootVersion = '1.5.4.RELEASE' 55 def hibernateVersion = '5.2.10.Final' 56 def hibernateValidatorVersion = '6.0.1.Final' 57 58 compile fileTree(dir: 'library', include: ['*.jar']) 59 60 testCompile group: 'junit', name: 'junit', version: '4.+' 61 62 //javax 63 compile group: 'javax.inject', name: 'javax.inject', version: '1' 64 compile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.1.0' 65 compile group: 'javax.activation', name: 'activation', version: '1.1.1' 66 67 //spring framework 68 compile group: 'org.springframework', name: 'spring-context', version: "$springVersion" 69 compile group: 'org.springframework', name: 'spring-test', version: "$springVersion" 70 71 //spring boot 72 compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: "${springBootVersion}" 73 74 //Others 75 compile group: 'io.jsonwebtoken', name: 'jjwt', version: '0.7.0' 76 }
- apply plugin: 引入插件,這裡引入 java 及 war 兩個插件,這樣就可以編譯、測試並包裝 war 檔了 (一般 console、desktop 程式不需要引入 war 這個插件)。
- sourceCompatibility: 指出編譯要用的 JDK 版本,這裡指出是要用 1.8 版。
- version: 設定我們自己的這個專案的版本編號
- sourceSets: 裡面比較值的注意的是 resources,設定檔我們是放在專案的根目錄下的 config 目錄裡,所以 12~14 是必要的,不然 gradle 不會知道要把這個目錄下的檔案也包裝進 war。至於 main/java、test/java 這兩個設定因為值都是 gradle 的預設值,在這裡是可省略的。
- buildDir: 指出編譯後的產出要放到那個目錄下。
- repositories: 指出 gradle 要到那些網站抓 jar 檔。
- configurations.all: gradle 抓 jar 檔的時候,會把相依的 jar 檔一併抓下來,不然,我們要找到所有相依 jar 檔會浪費非常大量年輕寶貴的生命,但是,有時候我們不想要其中的某些 jar 檔時,可以在這裡以 exclude group 將它排除,或是 gradle 抓下來的 jar 版本不是我們想要的,可以用 force group 強制限定版本。
- dependencies: 這是一般人最熟悉的部份,把我們專案需要的 jar 檔寫在這裡,有些 framework 會有非常多的 jar 檔,版號又一樣,那麼,可以先用 def 定義版號的變數,省去每次換版本的麻煩。
- compile fileTree: 有一些 jar 檔不是到網路上的 jar repository 裡抓的,是放在自己的電腦某處,像這裡,這類的 jar 檔是放在專案根目錄的 library 目錄下,所以要這個指令指出來。
- testCompile group: 指出測試時要用的 framework,這裡使用的是 JUnit 4.+ 版。
- classes: java compile 後產生的 class 檔,都放在這個目錄下。
- libs: war 檔放在這裡。
- resources: 上面 build.gradle 中指定的資源檔會放在這個目錄下。
- reports、test-results: 這裡放的是測試報告,reports 放的是每個測試的結果,test-results 則有每個測試詳細資訊,有錯誤時可以來這看看是什麼錯誤。