基于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文件
相关文章
相关标签/搜索