基於Java的打包jar、war、ear包的做用與區別詳解

1、pom.xml

maven還生成了一個重要的文件pom.xml,maven就是經過這個文件來來管理整個project,能夠理解位相似於eclipse的.project文件。默認生成的pom.xml文件的內容以下:web

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <!-- 這個XML文件所使用的POM格式的版本 -->
  <modelVersion>4.0.0</modelVersion>
  <!-- 表明組織和整個項目的惟一標誌 -->
  <groupId>com.msc</groupId>
  <!-- 這個project最後所生成的文檔(jar、war)的名字 -->
  <artifactId>first</artifactId>
  <!-- 這個項目的打包的類型 -->
  <packaging>war</packaging>
  <!-- 項目的版本 -->
  <version>0.0.1-SNAPSHOT</version>
  <!-- 項目的名字,生成文檔等內容的時候會用的這個名字 -->
  <name>first Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <finalName>first</finalName>
  </build>
</project>

以最終客戶的角度來看,JAR文件就是一種封裝,他們不須要知道jar文件中有多少個.class文件,每一個文件中的功能與做用,一樣能夠獲得他們但願的結果。除jar之外對於J2EE來講還有war和ear。區別見下表:
 apache

  JAR WAR EAR
英文 Java Archive file Web Archive file Enterprise Archive file
包含內容 class、properties文件,是文件封裝的最小單元;包含Java類的普通庫、資源(resources)、輔助文件(auxiliary files)等 Servlet、JSP頁面、JSP標記庫、JAR庫文件、HTML/XML文檔和其餘公用資源文件,如圖片、音頻文件等 除了包含JAR、WAR之外,還包括EJB組件
部署文件 application-client.xml web.xml application.xml
容器 應用服務器(application servers) 小型服務程序容器(servlet containers) EJB容器(EJB containers)
級別

2、POM & archetype

archetype(原型)是一個Maven項目模板工具包。服務器

一個archetype指明瞭app

  • 1) 項目的目錄結構以及什麼目錄是放source code(源碼),哪些是放test source code(測試源碼),哪些目錄是放resource(資源)的。
  • 2) 一個默認的pom.xml文件,這個默認的pom.xml文件中的groupId,artifactId,version用佔位符表示,在建立project的時候經過參數傳進來。

pom.xml文件的POM全稱是Project Object Model,這個文件對於maven的使用者來講是一個和maven交互的渠道,pom.xml包含了一個maven project的配置,一個project該如何編譯打包,project有哪些依賴項等等。eclipse

仔細看一下咱們前面建立project的命令:mvn archetype:generate DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.mycompany.app -DartifactId=myappmaven

使用方法:用命令行進入指定文件夾輸入建立命令工具

1) archetype:generate, 這是一個maven的plugin,用來從一個archetype建立一個project,關於plugin後面再說。單元測試

2) DarchetypeGroupId,這個就是指的archetype的groupid,也就是說是用的哪一個archetype,或者說用哪一個項目模板。測試

3) 後面的兩個參數,用來放大pom.xml文件裏面,做爲當前建立的project的描述信息。ui

Project建立好了,看如何去編譯,直接進入的project的目錄,在命令行下:

mvn compile

編譯完後maven會建立一個target目錄去保存編譯結果。 咱們須要編譯成一個什麼樣的內容,以及要輸出到什麼地方等等,都是能夠在pom.xml文件裏面配置的,可是由於咱們目前並無指定這些內容,因此maven會使用默認值。

咱們還能夠用maven執行test:

mvn test

第一次執行時,maven會去下載一些依賴項。另外要注意的時,若是咱們更改了默認的目錄結構,maven會由於找bu到test而沒法去執行test。若是隻須要編譯test能夠執行:

mvn test-compile

要把項目打包,執行:

mvn package

mvn會根據pom.xml裏面的packaging選項打包成相應的文件。

3、repository & dependency

maven裏面有一個repository的概念,當咱們的項目依賴於某個jar時,maven會去repository裏面去找。repository分兩種,一種是遠程的,一種是本地的。若是有幾個project都用到junit,咱們能夠把junit放在repository裏面,幾個project能夠公用,節約存儲空間並且方便管理,這個repository的位置能夠在pom.xml裏面設置。

本地的默認的路徑是安裝用戶的目錄下的 .m2\repository 文件夾。若是一個依賴項在本地的repository裏面沒有,那麼maven會去他本身的遠程的repository http://repo.maven.apache.org/maven2 去下載後放到本地的repository裏面。

也就是說,咱們若是咱們的project須要要引用一個依賴項,咱們只須要在pom.xml文件中進行配置,maven會自動幫咱們去引用。 咱們以前的建立project裏面須要寫單元測試,引用到了junit,看pom中的配置:

<dependencies>

    <dependency>

        <groupId>junit</groupId>

        <artifactId>junit</artifactId>

        <version>3.8.1</version>

        <scope>test</scope>

    </dependency>

</dependencies>


每個須要爲每個 dependency 指明groupId,artifactId,version。scope很簡單,意思是說咱們須要怎麼引用,好比咱們上面的例子裏面設置的是test,意思是說只在test裏面引用junit。 可是咱們如何知道groupId,artifactId和version呢? 好比我如今想引用log4j,這個幾個值怎麼填? 能夠去http://mirrors.ibiblio.org/maven2/ 上去查找。好比log4j,咱們就在上面這個地址加上log4j,也就是http://mirrors.ibiblio.org/maven2/junit/。進去後會有一個maven-metadata.xml,打開就能夠知道這些值了而後添加這個dependency了。

若是要把一個project安裝到本地的repository裏面,能夠執行下面的命令:

mvn install

 

到這裏就說完了建立,編譯,測試,打包以及安裝,大部分的項目也就是作這些事情。

再介紹幾個其它命令:

  1. mvn site : 爲你的project建立一個站點
  2. mvn clean: 清除target目錄下的全部文件
  3. mvn eclipse:eclipse :爲project生成eclipse的工程文件和classpath文件
相關文章
相關標籤/搜索