跳到主要內容

發表文章

目前顯示的是 1月, 2015的文章

Gradle(9)- 品質保證

我們需要利用一些工具來保持程式的穩定,好的程式是容易維護、花費的成本比較低。本章介紹一些工具可以搭配Gralde來達到公司的軟體政策並制定一些標準。例如Checkstyle, JDepend, PMD, FindBugs, CodeNarc, and Sonar。 (1) Checkstyle plugin 在Gradle腳本可以載入checkstyle,當它執行build任務時,check 任務也會執行,

Gradle(8) 最後一哩路-發佈版本

通常在Java專案會把程式打包為JAR、ZIP檔或是其他檔案,在Gradle中打包程式任務為build<configurationName>且上傳的任務為upload<configurationName>。我們定義 (1) 版本庫上傳 jar檔上傳 apply plugin: 'java' archivesBaseName = 'sample' version = '1.0' repositories {     flatDir {         name 'uploadRep'         dirs   'upload'     } } uploadArchives {         repositories {                //檔案上傳的設定環境為uploadRep         add project.repositories.uploadRep               //額外jar上傳目的檔         flatDir {             dirs 'C:\\libs'         }     } } Maven版本上傳 apply plugin: 'java' apply plugin: 'maven' archivesBaseName = 'sample' group =  ‘com.sample’ version = '1.0' uploadArchives {      repositories {          mavenDeployer {             repository(‘C:\\libs’)               } } (2)打包檔案 在通常我們開發網頁程式,會將JAVA專案打包成Web application Archive (WAR) or Enterprise Archive (EAR)。如果對Web開發不了解請您參考 Gossip@openhome 。 Gradle網頁架構預設 src/main/webapp/WEB-INF  環境配置檔(web.xml

Gradle(7) 軟體品質把關-測試

開發程式最重要的事情就是測試我們的程式,Gradle支援JUnit和TestNG測試框架。我們開始學習如何自動化的測試程式。 (1)測試之道 在gradle預設測試的目錄為src/test/java/<test_package>,如果你要修改測試的目錄可以參考下列範例 sourceSets {     test {           java {               srcDir 'testSrc'            }    }} Junit dependencies {         testCompile group: 'junit', name: 'junit', version: '4.+'         } $ gradle test :compileJava :processResources :classes :compileTestJava :processTestResources :testClasses :test BUILD SUCCESSFUL TestNG dependencies {        testCompile 'org.testng:testng:6.5.1'        } 範例一 寫一個計算機,可以做四則運算(加、減、乘、除)並做測試 Gradle.build apply plugin: 'java' repositories{     flatDir{         dirs 'C:\\Program Files\\Apache Software Foundation\\Tomcat 7.0\\lib'              }     mavenCentral() } dependencies {         compile group: 'org.springframework', name: 'servlet-api'         compile group: 'org.springframework', name: 'jsp-api'         t

Gradle(6) 相依管理-抓取程式版本

(2)定義相依規則 當我們定義好哪裡抓取的規則後,接下來我們會介紹實際抓取jar檔的動作規則設定,在Gralde中會把抓取的規則寫在dependencies{ }區塊中。 由下面的範例我們可以知道,dependencies區塊會定義抓取{組織}{檔名}{版本}規則讓它可以抓取,complie方法會比complie group更簡潔和方便。 apply plugin: 'java' repositories {        mavenCentral() } dependencies {   compile group : 'org.springframework', name: 'spring-core', version: '3.1.1.RELEASE'   compile 'org.springframework:spring-core:3.1.1.RELEASE’ } 如果我們可以將jar檔的組織與版本可以使用變數定義,會讓我們開發專案時候,更容易維護gradle的腳本與彈性 ext{    springVersion : ‘'3.1.1.RELEASE'’    springGroup : ‘'org.springframework'’ } dependencies {   compile group : '$springGroup’ , name: 'spring-core', version: '$springVersion'   } 遞移相依(Transitive Dependency) wiki解說 當管理多個版本相依時,發生遞移相依時不需要下載可以設定為transitive = false 排除相依性 dependencies {     compile group: 'org.slf4j', name: 'slf4j-simple', version: '1.6.4', transitive: false } 排除部分相依 dependencies {        compile('org.slf4j:slf4j-sim

Gradle(5) 相依管理-抓取版本庫設定

當我們開發程是會使用third-party或是函式庫,這些jar之間版本相依不同會造成錯誤,我們可以利用Gradle來管理這些jar,讓我們開發程式更容易管理參照不同版本的jar檔。 相依環境設定 Maven和Ivy都有相依管理的機制,然而Gralde是使用Ivy API的相依管理的函式,但是也加入一些額外的功能。ralde (1) 版本庫(Repositories) 版本庫裡面定義函式模組之間的路徑方式,Gradle可以去定義如何存取方式、版本等等,例如使用HTTP、SSH或是file system或是其他協定來存取程式。它定義很多的環境可以使用或是可依照你需求去定義環境。Gradle是繼承Maven或是Ivy的方式來管理相依性。 版本類型 方法 說明 Maven repository   使用Maven方式去存取遠端版本庫 Maven central repository mavenCentral() 使用Maven方式從 Maven官方版本庫 去抓取程式 Maven local repository mavenLocal () 使用Maven方式從自己本機端抓取版本庫,如果你先在本機定義Maven的版本庫 Ivy repository   使用Ivy方式去抓取本機端或是遠端 Flat directory repository flatDir() 直接抓取本機端或是遠端   案例一、從Maven官方抓取檔案 repositories {          mavenLocal()          mavenCentral() }                  案例二、自訂版本庫抓取的方式 repositories {      maven {            // Name is optional. If not set url property is used            name = 'Main Maven repository'            url = 'http://20.1.10.50/spring '            artifactUrls ''http://20.1.10.51/spring&

Gradle(3)–– 檔案處理

我們在開發軟體時,我們時常需要對檔案和目錄作處理,例如我們需要複製檔案到另外一個目錄理或是需要移動某些檔案到其他目錄。常用的型態 type 說明 copy 複製 zip 壓縮 檔案操作 (1)檔案顯示: 我們使用gradle的file()它用來解析檔案的目錄和檔案,file()是使用java.io.File的物件來操作。 範例一、 txt目錄中有兩個檔案為a.txt和b.txt,可以顯示txt底下所有的檔案 File txt = file('txt/') for(File f : txt.listFiles()){     println(f.getName()) } 範例二、使用Url和Uri操作 URL url = new URL('file: D:\\gradle\txt') URI uri = new URI(‘file: D:\\gradle\txt’) (2) 檔案樹(file tree): 我們利用fileTree()函式顯示目錄和ZIP的檔案樹狀結構,我們也可以利用pattern來做檔案的過濾。matching方法閉包用來自訂方法include、includes、exclude和excludes來自訂過濾的樣式 pattern :   *  -> 符合任何字串樣式   ?  –> 符合單一字串樣式 **  –> 符合任何檔案或是目錄的字串樣式 範例一、顯示txt目錄底下的java檔 def treeFiles = fileTree(dir:'txt').matching{                     include '**.java'                 } treeFiles.visit{FileVisitDetails fileDetails ->     if(fileDetails.directory){         println "directory: ${fileDetails.relativePath}"     }else{         println("filename: ${fileDetails.name}")  

Gradle(2)–– 專案與任務

前言 在Gradle中, 專案和任務 是重要基本慨念, 專案(projects) 可以說是一個目的或是專案,例如: 開發一個函式庫、網頁應用程式或是複製某個檔案到目錄中等等。 任務(task) 可以是專案的最小單位元,也就是專案可以由很多任務所完成,任務區塊中有很多 動作(action) 所組成,這些動作可以自行定義。 Project 屬性 屬性 說明 name 唯讀,需要透settings.gradle設定 parent 唯讀 version 專案版本 description 專案說明 任務 (1)基本 我們由上面可以知道任務是構成專案的主要元素,我們開始示範一個簡單的範例,來做解說, 在gradle專案裡面預設專案檔名為 build.gradle ,寫完建構腳本後,需要執行建構指令,在執行指令時,只要輸入first任務就會執行腳本內定義的任務並執行裡面的動作。如果當你儲存成不同檔名需要加上 --build-file的參數來指定檔名。 預設執行檔名: build.gradle project.description = 'first project' task first << {     println 'Running first task for project ' + project.description } 程式說明 : 屬性為 description是用來說明這個專案的註解,print函式是顯示console的訊息 這些動作是比較常用到的方法: 動作 說明 doFirst 會被先執行 doLast 會最後直行 << 附加元素 defaultTasks 範例一、doLast和doFirst範例 // defaultTasks用來定義將會被執行的任務,只有first區塊會被執行 // 會先執行doFirst,在執行doLast defaultTasks "first" version= "1.0" description = " test " task first {     doLast{