跳到主要內容

發表文章

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{    ...

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.s...

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 {     ...

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 fileDetail...

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{     ...

Gradle(1) -- 介紹

歷史介紹 當我們發展軟體過程由需求訪談、編寫程式、編譯、測試、打包,發佈,我們希望可以自動化將這些重複繁雜的步驟,這些工具幫我們完成自動化任務,可以稱為建構語言。建構語言必須由make腳本開始說起,在早期C語言,當專案發展到一定的大小,會漸漸出現瓶頸,這時make工具的誕生解決的這些大專案的問題,主要他解決的一個專案的編譯規則,定義哪些文件需要編譯、哪先不需要編譯等等。在Java程式語言Ant編譯工具想必很多人不陌生,在2000年所誕生,主要是使用XML去定義編譯編譯規則,但是發展一段時間,會發現他無法檢查系統模組相依性。這時為了解決相依問題才發展Ivy來輔助Ant編譯工具。Maven也是常耳聞的編譯工具之一,主要的優點透過一定的約定形式去撰寫編譯規則,但是缺點是當專案太大會使您的pom.xml過於忙亂,而無法正常工作。 專案自動化優點      (1) 防止人為錯誤      (2) 更容易建構專案      (3) 維持軟體品質 Gradle誕生原因 Gradle主要結合Ant和Maven的優點而誕生,主要有下列的優點 (1) 使用動態語言(Domain Specific Language,DSL)代替靜態語言,支援Groovy語言。 (2) 可以準確的編譯每個程式 (3) 解決編譯時的相依問題,富有彈性 (4) 支援多個專案建製,可以解決各專案之間的相依性 (5) gradle支援Ant和Maven的腳本 Gradle 安裝 (1) Gradle安裝需要的套件      A. Java JDK 6.0以上 :   http://www.oracle.com/technetwork/java/javase/downloads/index.html      B. Gradle安裝檔: http://gradle.org/gradle-download/ (2) Gradle安裝套件      A. gradle-[version]-all.zip : 包含原始檔,執行檔...

Python Study (8) – Function

Introduction Function is a Python’s basic structure. Function often is used to reuse code. you can repeat task that define a function for code reuse. Function Advantage  (1) Maximizing code reuse and minimizing redundancy      In developing software,  don't repeat yourself is a a principle . We use function to achieve the goal in Python.A section code is adopted many times or offer other to use. We need to package to a function and offer many time for reuse . (2) Procedural decomposition A flow program is combined from Function component  (1) def Syntax def name(arg1, arg2….) :     statements … Example def add(a, b):            print(a+b) >>>add(1,2) 3 (2) return Syntax def name(arg1, arg2….) :     statements … return result Example def add(a, b): return a+b >>>print(add(1,2)) 3 (3) lambda      lambda is...