跳到主要內容

發表文章

Java good part

套件(package) 我們知道在Java語法中,套件語法只要在前面宣告package的關鍵字並依照個人不同需求去 規劃套件的位置,今天我們就深入探討package語法的作用,我們知道套件的命名會影響整 理專案開發和日後的維護系統工作,易讀且統一的套件命名方式,讓人容易理解且易工作。 我們通常會以公司別為命名方式,例如Sun公司為com.sun,Apple公司為com.apple以此類 推。其次為系統層實務上依專案大小來規劃,例如Sun的人資系統為com.sun.hr或是Sun人資 系統中出勤系統com.sun.hr.pd。 最後一層為技術層依使用的框架或是技術來區分,例如Sun 人資系統使用MVC開發: model: com.sun.hr.model、com.sun.hr.view, com.sun.hr.controoler來 規劃。 匯入(import) 在JAVA中不同的套件之間,要互相引用時我們可以利用import來載入裡面的類別。 import com.sun.hr.utility.*               => 載入utility底下的class類別 import com.sun.hr.utility.salaryUtil   => 只載入salaryUtil的類別 不管是*還是salaryUtil編譯器會只會對有用到的類別參考使用,所既使載入全部以不會影響執 行效能,建議開發程式只需要載入用到的類別,以方便日後維護工作。 套件與存取控制 利用package套件系統只要可以建立不同的命名空間(namespace)來組合系統不同組件,當我 宣告不同修飾子(private、protected和public)分別是由嚴謹權限控制到鬆散權限控制。 修飾子 class extend 相同package下 不同package下 private V X X X protected V V V M (需要繼承才可以) public V V V V defult V X V V V: 支援  X:不支援...

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: 'mav...

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