2017年11月17日 星期五

Integration test (1) - Maven

Maven:
字意為:知識的累積者
- 標準化的建立專案,目的為一致的專案架構,統一的專案建構流程
- 不同的專案在code外有一套管理JARs的方式,能夠分享共同部分,補足差異檔案,且節省空間
- 用來建立專案的規則,包含原始檔案的相依性
- 自動測試與生成報告
- 從SVN GIT等取得原始碼

Pom:(Project Object Model)
- 專案建立標準化需要有共同的Metadata(對數據的一種說明),共同的目錄配置方式
- 舉例,像建立project物件,使用getXXX()取得資訊
- 格式為XML,能夠方便程式端的取用
- 格式內有

  1. <project> : 最上層的element
  2. <modelVersion>:哪一個model這個POM在使用,作為Maven驗證機制
  3. <groupId>:專案起始位置,如com.xxx
  4. <artifactId>:唯一可辨別的名字,這個名字是給產生的Jar檔使用的,會與版本變成一黨名 <artifactId>-<version>.<extension> (如, myapp-1.0.jar).
  5. <version>:專案版本,通常會加上-SNAPSHOT,表示最新的,但不保證是穩定會不會在改變(開發中,在release之前)。相反的,若不加上-SNAPSHOT,則表示此code不會再變動。也因此,版號也會
  6. <name> : 專案使用的名稱
  7. <url> : 專案的位址,通常會在Maven產生的文件中被使用到
  8. <description> : 專案描述,通常會在Maven產生的文件中被使用到
Artifact:
- 每個artifact都由以下三種組成唯一識別,需要使用的時候就需要放入repository
  1. groupId
  2. artifactId
  3. version
Repositories:
- 儲存Artifact
- 在pom聲明dependency後,就會去下載Artifact,供自己使用
- 自身開發的project也能夠使用mvn install放入Repository

目錄結構:
  • src/main/java - application/library sources
  • src/main/resources - application/library配置文件
  • src/main/filters - resource filter files
  • src/main/webapp - Web程式
  • src/test/java - 測試資源
  • src/test/resources - 測試配置文件
  • src/test/filters - 測試resource filter files
  • src/it - 使用integration test的plugins
  • src/assembly - 組合descriptors
  • src/stie - site
  • LiCENSE.txt - 專案license
  • NOTICE.txt - libraries使用的attributions即notice
  • README.txt - 專案readme
  • target - 所有build產生的output
  • src/main : 主要build artiface
  • src/test: unit test code或resources
Maven Command
以下為前置步驟:
  1. 至maven官網http://maven.apache.org/download.cgi下載apache-maven-3.5.2-bin.tar.gz
  2. 解壓縮至/usr/local/apache-maven-<version>
  3. 新增M2_HOME系統變數 
  4. export M2_HOME=/usr/local/apache-maven/apache-maven-<version>
  5. 新增M2系統變數 
  6. export M2=/usr/local/apache-maven/apache-maven-<version> 
  7. 可選擇是否要新增MAVEN_OPTS系統變數,可以提供Maven額外的選擇
  8. export MAVEN_OPTS="-Xms256m -Xmx512m" (ㄧInvalid maximum heap size: -Xmx512mi 的問題)
  9. 新增PATH
  10. export PATH=$M2:$PATH
  11. 確認JAVA_HOME JDK路徑設定正確
  12. echo $JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.8.0_152.jdk/Contents/Home 且必須確認PATH是否有包含$JAVA_HOME/bin的路徑
  13. 輸入 mvn --version 來卻確認版本
開始執行指令:
  • 建立新的Maven project: 
  • mvn archetype:generate
    Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 16: //可回上面的地16行看新建的type為何,可以選擇行數變更archtype
    Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
    1: 1.0
    2: 1.1
    Choose a number: 2: 2 //選擇版本
    Define value for property 'groupId': com.test //groupId
    Define value for property 'artifactId': test //artifactId
    Define value for property 'version' 1.0-SNAPSHOT: : //snapshot版本
    Define value for property 'package' com.test: : //package name,直接按enter就是預設
    Confirm properties configuration: 
    groupId: com.test
    artifactId: test
    version: 1.0-SNAPSHOT
    package: com.test
     Y: : //直接按enter確認
    
    完成以上指令可以看到目錄下多了test folder,進入還能看到pom.xml
  • mvn compile 能夠下載需要的plugins,及其他dependencies中需要的jar),有時會需要到4分鐘以上。若是第二次下此指令,則只會下載新加入需要下載的jar檔,則會比較快一點。
  • mvn compile
    
    完成以上指令可以在${basedir}/target/classes看到檔案。好處是maven知道所有東西的位置。
  • mvn test 能夠執行maven的test
  • mvn test
    
    Maven此次會下載其他的dependencies。這次是下載跑test所需要用到的dependencies和pugins。如果已經下載過了,則只會做compile,不會再下載一次。若只想要compile而不想要執行test,則可以下以下指令:
    mvn test-compile
    
  • 產生Jar檔並且安裝在local repository
  • mvn package
    
    在POM檔案內有一段<packaging>jar</packaging>,這也就是告訴Maven如果執行以上指令則需要產生jar檔。如此將在${basedir}/target下產生Jar檔。 若想在${user.home}/.m2/repository安裝檔案,則需要下以下指令
    mvn install
    


沒有留言:

張貼留言