Maven-08-核心概念 coordinates

在 Maven-05-一個簡單的POM範例 我們稍微給大家介紹了最基本的 POM 內容,也提到了 POM 一開始的 groupId, artifactId, version  這三個資訊可以構成一個該專案特有的識別名稱

pom

這回就針對這幾項做更進一步的說明

  • groupId: 團隊名稱,通常的命令慣例是把網址倒過來寫的表示方式,例如 com.appx, org.apache 等等
  • artifactId: 專案名稱
  • version: 版本號,如果是還在開發中的專案,通常會以 SNAPSHOT 結尾

以上三個資訊可以做為一個專案的唯一識別名稱,不會有兩個專案具有同樣的groupId:artifactId:version

packaging (打包方式) 不是唯一識別名稱的一部份,不過也是 maven coordinates 的組成之一,這幾個資訊就構成了我們在各個公私有的 maven repositories 茫茫大海中,找尋到特定專案的唯一識別名稱

除了 POM 一開始宣告了該專案的 coordinates,如果想為專案增加其它 dependencies ,也是透過  coordinates 來指向其它專案,如上圖 <dependency>  內容所示,甚至在使用 plugin 時,同樣也是透過 coordinates 來指明特定的 plugin,如下所示

plugins

Facebook Comments

Maven-07-核心概念 lifecycle

還記得我們在 Maven-04-建置專案 裡所執行的 mvn install 嗎?

這個指令讓我們完成了專案的編譯、測試、打包、安裝(到repository)等步驟,而在上一篇 Maven-06-核心概念 plugins and goals 我們知道這些任務都是由各種 plugins 來負責的。那為什麼這樣一個簡短的指令可以一次完成這麼多任務呢?

我們必須要先了解所謂的 maven lifecycle,區分為以下三個種類:

  • clean: 把建置好的專案相關產出檔案給清除掉 (刪除 target 資料夾)
  • site: 產生專案網站,如下圖範例

    Screen Shot 2017-03-14 at 2.52.21 PM
  • default:  內建的lifecycle,專案建置的流程都是在這裡定義的

maven lifecycle 裡還定義了多個 build phase,我們之前所執行的 mvn install,就是執行了 default lifecycle 裡 install 這個 build phase,有關 lifecycle build phases 的詳細定義,可以參考 https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference

從以上的 lifecycle 官方文件,我們可以看到 default lifecycle 有20幾個 build phase,而 install 是倒數第二個,這邊有一點要特別注意的是,雖然我們下的指令是 mvn install,但 maven 會從第一個 build phase (validate) 一路按順序執行到 install,這個現象其實也很容易理解,畢竟沒有之前 build phase 的產物的話,maven 也不知道應該 install 什麼東西

回到最一開始的問題:為什麼 mvn install 一個指令可以完成這麼多任務呢?原因在於  plugin goals 可以指定這個 goal 會在哪個 lifecycle build phase 裡執行 (如果沒有特別指定的話,也會有預設值)。所在在執行 mvn install 時,maven 會去找找有哪些 plugin goals 指定了  build phase,然後就依照 lifecycle 的順序執行下去。lifecycle 與 plugin goals 的對應關係,可參考 https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Built-in_Lifecycle_Bindings

我們可以非常靈活地使用 plugin goals 來完成各種任務,但不同的專案可能會有不同的plugin goals 使用方式,只有透過 lifecycle 這麼一套 maven 制定的標準流程,之後在轉換到開發其他 maven 專案時,我們還是可以使用一致的指令來建置專案,無形之中為開發人員減輕了不少負擔!

Facebook Comments

Maven-06-核心概念 plugins and goals

這一篇要給大家講講 Maven 之所以能夠完成各種任務的關鍵元件:plugins  and  goals

我們在 Maven-03-建立第一個 Maven專案 裡一開始使用了一道指令來建立專案,

01

  • 其中的 archetype 就是 plugin 名稱, archetype plugin 讓我們可以依照既有的專案樣版來產生專案,或是由既有專案產生出樣版,以方便之後重複使用
  • generate 代表 goal 名稱,四個參數 groupId, artifactId, package, version 是要傳給 generate 這個 goal 的參數。

一個 Maven plugin 其實就是多組 goal 所集合而成的,goal 所代表的是一個任務,並且允許我們在執行時輸入參數,下列出幾個常用的 plugin

更多的 plugins 可參考 https://maven.apache.org/plugins/maven-jar-plugin/

在了解了 plugin and goals 的定義之後,我們或許可以從另一個角度來解釋 maven:maven 本身是一個具有基本功能的核心平台,它只知道如何解析mvn指令、解析POM、下載所需的plugins並依照設定執行,所以像是對程式碼進行編繹、或打包專案檔,這些事情就會交由plugins 來完成。

我們已經知道了 maven plugins 可以完成開發專案時的各項任務,從以上範例大致也可以看出要產生一個jar檔需經過哪些步驟,但是如果每次都要依照這些步驟一個一個執行,恐怕會影響開發人員的工作效率。因此,下一篇將給大家介紹 maven 另一個核心概念 “lifecycle”,讓我們透過簡短的指令操作,就可以完成一連串相關的任務!

Facebook Comments

Maven-05-一個簡單的POM範例

我們先來看看Maven自動產生的pom.xml

Screen Shot 2017-03-07 at 9.34.58 PM

  • pom.xml 包含了整個 maven專案許多資訊,一般狀況下專案裡的pom.xml 遠比上面這個範例複雜的多,還會包含更多的dependency或是自定義的plugin等等。
  • 一開始的groupId, artifactId, version, packaging 通稱為maven coordinates (座標),前三個資訊可以構成一個該專案特有的識別名稱
  • name, url 則是定義了專案名稱、專案網站資訊。這邊的name是讓開發人員自己看的。通常我們使用各種支援maven的開發工具時(Eclipse, NetBeans, IntelliJ IDEA) ,這些開發工具會把artifactId當作專案名稱
  • properties 定義了 pom.xml 裡面的「全域屬性」,如上所示,定義了一個 “project.build.sourceEncoding = UTF-8″的property,如果在pom.xml其它地方需要參照”UTF-8″這個設定,我們可以直接使用 ${project.build.sourceEncoding} 這樣的表示方式
  • 一組dependency 包含了 groupId, artifactId, version 以及
    • packaging 可忽略不寫,默認為jar
    • scope 如果不寫,默認為compile,這邊的junit scope 為test,意思是說這個dependency只有在跑unit test時才會使用到,之後專案要打包釋出時,並不會包含scope為test的dependency,有關dependency scope ,會在之後的文章中詳細說明!

maven專案可以具有上下從屬關係,pom.xml 會繼承每一階層的設定。而單一階層的專案也會繼承自maven最上層的 super-POM (如同Java裡所有物件都繼承自Object),大家可以試著在專案根目錄執行 mvn help:effective-pom,看看「完整版」的pom會長什麼樣子!

咱們下回見囉~

Facebook Comments

從基本Java課程,到Git版本管理 完全免費的線上課程都在這~~

整理一下,最近看到的免費線上資源 方便大家參考~~

(*主要都是針對初學者,來介紹基本概念/操作的介紹。)

==============================================

 

基本的Java 程式語法介紹 (免費)

https://www.udemy.com/learn-java-programming/

 

善用 Eclipse 開發環境來加速 Java 開發 (免費)

https://www.udemy.com/luv2code-eclipse-ide-for-beginners/

 

Github 版本管理 初體驗 (免費)

https://www.udemy.com/git-started-with-github/

Android Programming Introduction  新手入門介紹  –  17 小時 !!! (免費 Free)

https://click.linksynergy.com/fs-bin/click?id=BoHFIyu6APU&subid=&offerid=323058.1&type=10&tmpid=14537&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Fandroid-tutorial-for-beginners%2F%3FcouponCode%3D743754385

 別忘了,還可以配合字幕進修英文 —  聽力跟字彙哦!!!

 

Facebook Comments

Maven-04-建置專案

建置 Maven專案

  1.  只需要一個簡單的 mvn install 指令,我們便可以建置maven專案。初次執行時會耗費一些時間,因為maven會自動下載所需的plugin並存放於 ~/.m2/repository底下,之後再次執行就只會出現如下簡單的執行歷程
    01
     

    建置的程過也包含了執行unit test!

    02

  2. That’s All!!  我們已經完成了編譯、測試、打包、安裝(到repository)一個最基本的maven專案。為了確定打包出來的jar檔沒有問題,可以執行以下測試,看到Hello World!就成功了!
    03
Facebook Comments

[職場觀察101]程式設計師 履歷該如何寫?

最近公司因為案件需求,所以開始尋找合適的人才。
在看了許多求職者的履歷後,不禁對目前一般人對履歷的寫法感到很大的問號~

原因不外如下,

一、履歷 看不出重點,沒有特別說明工作內容

履歷最主要的是希望讓面試官(公司)能夠很快地對求職者有一個概念,
所以放上工作的經歷是最基本的。甚至依年限排列(從最近一個 列至第一個工作)
所謂放上經歷,不只有列出前公司名稱及工作職位,如 OOO 公司 – XXX職位。
更重要的要寫上在這個職位工作的內容,
比如說 工程師,可以這樣寫
參與 YYY專案,負責專案裏的後端程式,利用 AAA技術透過BBB框架來達到CCC的功能。

而技術支援/測試人員可以這樣寫
參與 YYY專案,負責專案裏的測試,包含前端UI功能以及流程確認,並包含後端的資料驗證。

這樣子,才會讓面試官對求職者有多一點的了解,以及印象; 來增加面試的機會。

二、內容充滿錯字

這部份,就看的出來求職者用不用心,有沒有仔細準備。
在履歷寫錯字,如同一開始就像告訴人家,我不是小心的人,很容易出錯。
如果各位看官你是面試官,你希望找到一個不細心的人嗎?!
或是 希望找到一個很容易出狀況給你收拾的員工嗎?!

三、在人力資源網站 持續公開履歷

這部份,很多人可能以為沒有關係,
事實上 如果沒有要找工作,建議就關閉,不用讓各家公司一直收到你的履歷。
因為這就像跟大家說 我一直在找工作,有需要可以找我。
某個角度來說,會讓面試官(公司)覺得這個人可能有什麼狀況,一直都在找工作。
至於怎樣能增加面試的機會,列出幾點參考

  1. 明確的列出自己工作經驗/內容,讓對方可能盡可能了解自己的背景、能力,以及期待。
  2. 仔細地閱讀自己的履歷內容,避免有錯字或是文句不順的地方。
  3. 可以低調的在104尋找更好的機會,若有合適的工作機會,再寄給對方。

希望以上的幾點心得,能夠幫助到有需要的人 ~

當然,我們目前也正在尋找合適的人才,如果有興趣的人 也歡迎跟我們連絡 ~~

請將資料寄至 admin at appx.com.tw

Facebook Comments

Maven-01-Introduction

應該怎麼定義Maven 這樣一套工具..?

依照不同的使用者觀點,會有不同的答案

  • 大多數的開發人員會認為Maven是一套「建置工具」(Build tool);顧名思義就是把程式原始碼建置成可以部署的成品
  • 團隊裡的專案經理或是負責部署的工程師,可能會把Maven視為是一套專案管理工具(Project management tool);除了把原始碼建置為成品,還包括了產生報表、建置專案資訊網站…等等有助於團隊運作的進階功能

Continue reading →

Facebook Comments