0
点赞
收藏
分享

微信扫一扫

Maven构建与管理项目(二)


Maven构建与管理项目(二)

Maven核心概念

Maven坐标

什么是坐标?

  在平面几何中坐标(x,y)可以标识平面中唯一的一点。

Maven坐标主要组成

  • groupId:组织标识(包名)
  • artifactId:项目名称
  • version:项目的当前版本
  • packaging:项目的打包方式,最为常见的jar和war两种

样例:

  

Maven构建与管理项目(二)_maven

  

Maven构建与管理项目(二)_xml_02

Maven为什么使用坐标?

  • Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范。
  • 拥有了统一规范,就可以把查找工作交给机器。

 

依赖管理

依赖配置

  依赖配置主要包含如下元素:

<!--添加依赖配置-->
      <dependencies>
          <!--项目要使用到junit的jar包,所以在这里添加junit的jar包的依赖-->
          <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>4.9</version>
              <scope>test</scope>
          </dependency>
        <!--项目要使用到Hello的jar包,所以在这里添加Hello的jar包的依赖-->
         <dependency>
             <groupId>me.gacl.maven</groupId>
             <artifactId>Hello</artifactId>
             <version>0.0.1-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>    
     </dependencies>

依赖范围

  依赖范围scope用来控制依赖和编译,测试,运行的classpath的关系. 主要的是三种依赖关系如下:
    1.compile: 默认编译依赖范围。对于编译,测试,运行三种classpath都有效
    2.test:测试依赖范围。只对于测试classpath有效
    3.provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api
    4.runtime:运行时提供。例如:jdbc驱动

传递性依赖

  MakeFriends.jar直接依赖于HelloFriends.jar,而HelloFriends.jar又直接依赖于Hello.jar,那么MakeFriends.jar也依赖于Hello.jar,这就是传递性依赖,只不过这种依赖是间接依赖,如下图所示:

  

Maven构建与管理项目(二)_maven_03

可选依赖

 

仓库管理

Maven仓库

  用来统一存储所有Maven共享构建的位置就是仓库

Maven仓库布局

  根据Maven坐标定义每个构建在仓库中唯一存储路径,大致为:groupId/artifactId/version/artifactId-version.packaging

仓库的分类

3.3.1、本地仓库

  每个用户只有一个本地仓库,默认是在~/.m2/repository/,~代表的是用户目录

3.3.2、远程仓库

  1、中央仓库:Maven默认的远程仓库,URL地址:http://search.maven.org/

Maven构建与管理项目(二)_xml_04

  2、私服:是一种特殊的远程仓库,它是架设在局域网内的仓库

  

Maven构建与管理项目(二)_maven_05

 

生命周期

何为生命周期?

  Maven生命周期就是为了对所有的构建过程进行抽象和统一,包括项目清理,初始化,编译,打包,测试,部署等几乎所有构建步骤

Maven三大生命周期

  Maven有三套相互独立的生命周期,请注意这里说的是"三套",而且"相互独立",这三套生命周期分别是:

  1. Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
  2. Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。
  3. Site Lifecycle 生成项目报告,站点,发布站点。

  再次强调一下它们是相互独立的,你可以仅仅调用clean来清理工作目录,仅仅调用site来生成站点。当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。 
  clean生命周期每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比如,运行mvn clean ,这个的clean是Clean生命周期的一个阶段。有Clean生命周期,也有clean阶段。Clean生命周期一共包含了三个阶段:

  1. pre-clean 执行一些需要在clean之前完成的工作
  2. clean 移除所有上一次构建生成的文件
  3. post-clean 执行一些需要在clean之后立刻完成的工作

  "mvn clean" 中的clean就是上面的clean,在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行,也就是说,"mvn clean"等同于 mvn pre-clean clean ,如果我们运行 mvn post-clean ,那么 pre-clean,clean 都会被运行。这是Maven很重要的一个规则,可以大大简化命令行的输入。 
  Site生命周期pre-site 执行一些需要在生成站点文档之前完成的工作

  1. site 生成项目的站点文档
  2. post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
  3. site-deploy 将生成的站点文档部署到特定的服务器上

  这里经常用到的是site阶段和site-deploy阶段,用以生成和发布Maven站点,这可是Maven相当强大的功能,Manager比较喜欢,文档及统计数据自动生成,很好看。
  Default生命周期Default生命周期是Maven生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。这里,只解释一些比较重要和常用的阶段:

  • validate
  • generate-sources
  • process-sources
  • generate-resources
  • process-resources 复制并处理资源文件,至目标目录,准备打包。
  • compile 编译项目的源代码。
  • process-classes
  • generate-test-sources
  • process-test-sources
  • generate-test-resources
  • process-test-resources 复制并处理资源文件,至目标测试目录。
  • test-compile 编译测试源代码。
  • process-test-classes
  • test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
  • prepare-package
  • package 接受编译好的代码,打包成可发布的格式,如 JAR 。
  • pre-integration-test
  • integration-test
  • post-integration-test
  • verify
  • install 将包安装至本地仓库,以让其它项目依赖。
  • deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享。

  运行任何一个阶段的时候,它前面的所有阶段都会被运行,这也就是为什么我们运行mvn install 的时候,代码会被编译,测试,打包。此外,Maven的插件机制是完全依赖Maven的生命周期的,因此理解生命周期至关重要。

Maven插件

  1. Maven的核心仅仅定义了抽象的生命周期,具体的任务都是交由插件完成的。
  2. 每个插件都能实现多个功能,每个功能就是一个插件目标。
  3. Maven的生命周期与插件目标相互绑定,以完成某个具体的构建任务,例如compile就是插件maven-compiler-plugin的一个插件目标。

 

聚合

  如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合

聚合配置代码

<modules>
       <module>模块一</module>
       <module>模块二</module>
       <module>模块三</module>
 </modules>

 例如:对项目的Hello、HelloFriend、MakeFriends这三个模块进行聚合

<modules>
       <module>../Hello</module>  
       <module>../HelloFriend</module>        
       <module>../MakeFriends</module>
 </modules>

 其中module的路径为相对路径。

 

继承

  继承为了消除重复,我们把很多相同的配置提取出来,例如:grouptId,version等

继承配置代码

<parent>  
          <groupId>me.gacl.maven</groupId>
          <artifactId>ParentProject</artifactId>
          <version>0.0.1-SNAPSHOT</version>
          <relativePath>../ParentProject/pom.xml</relativePath>  
 </parent>

继承代码中定义属性

  继承代码过程中,可以定义属性,例如:

<properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <junit.version>4.9</junit.version>
     <maven.version>0.0.1-SNAPSHOT</maven.version>
 </properties>

  访问属性的方式为${junit.version},例如:

<dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version>${junit.version}</version>
     <scope>test</scope>
 </dependency>

父模块用dependencyManagement进行管理

<dependencyManagement>
     <dependencies>
     <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>${junit.version}</version>
         <scope>test</scope>
     </dependency>    
      <dependency>
             <groupId>cn.itcast.maven</groupId>
             <artifactId>HelloFriend</artifactId>
             <version>${maven.version}</version>
             <type>jar</type>
             <scope>compile</scope>
        </dependency>
      </dependencies>
 </dependencyManagement>

  这样的好处是子模块可以有选择行的继承,而不需要全部继承。

聚合与继承的关系

  聚合主要为了快速构建项目,继承主要为了消除重复

 

聚合与继承实战演练

  创建四个Maven项目,如下图所示:

  

Maven构建与管理项目(二)_maven_06

  这四个项目放在同一个目录下,方便后面进行聚合和继承

  

Maven构建与管理项目(二)_maven_07

  Parent项目是其它三个项目的父项目,主要是用来配置一些公共的配置,其它三个项目再通过继承的方式拥有Parent项目中的配置,首先配置Parent项目的pom.xml,添加对项目的Hello、HelloFriend、MakeFriends这三个模块进行聚合以及jar包依赖,pom.xml的配置信息如下:

  Parent项目的pom.xml配置

<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/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
 
     <groupId>me.gacl.maven</groupId>
     <artifactId>Parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
     <packaging>pom</packaging>
 
     <name>Parent</name>
     <url>http://maven.apache.org</url>
     
     <!-- 对项目的Hello、HelloFriend、MakeFriends这三个模块进行聚合 -->
     <modules>
         <module>../Hello</module>
         <module>../HelloFriend</module>
         <module>../MakeFriends</module>
     </modules>
     
    <!-- 定义属性 -->
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <junit.version>4.9</junit.version>
         <maven.version>0.0.1-SNAPSHOT</maven.version>
     </properties>
 
     <!-- 用dependencyManagement进行jar包依赖管理 -->
     <dependencyManagement>
         <!-- 配置jar包依赖 -->
         <dependencies>
             <dependency>
                 <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                 <!-- 访问junit.version属性 -->
                 <version>${junit.version}</version>
                 <scope>test</scope>
             </dependency>
             <dependency>
                 <groupId>me.gacl.maven</groupId>
                 <artifactId>Hello</artifactId>
                 <!-- 访问maven.version属性 -->
                 <version>${maven.version}</version>
                 <scope>compile</scope>
             </dependency>
             <dependency>
                 <groupId>me.gacl.maven</groupId>
                 <artifactId>HelloFriend</artifactId>
                 <!-- 访问maven.version属性 -->
                 <version>${maven.version}</version>
             </dependency>
         </dependencies>
     </dependencyManagement>
 </project>

  在Hello项目的pom.xml中继承Parent项目的pom.xml配置

<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/xsd/maven-4.0.0.xsd">
   
   <modelVersion>4.0.0</modelVersion>
   <artifactId>Hello</artifactId>
   
       <!-- 继承Parent项目中的pom.xml配置 -->
        <parent>  
           <groupId>me.gacl.maven</groupId>
          <artifactId>Parent</artifactId>
           <version>0.0.1-SNAPSHOT</version>
           <!-- 使用相对路径 -->
         <relativePath>../Parent/pom.xml</relativePath>  
     </parent>
     
     <dependencies>
        <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
         </dependency>
     </dependencies>
 </project>

 在HelloFriend项目的pom.xml中继承Parent项目的pom.xml配置

<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/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <artifactId>HelloFriend</artifactId>
     <name>HelloFriend</name>
     
     <!-- 继承Parent项目中的pom.xml配置 -->
     <parent>
         <groupId>me.gacl.maven</groupId>
         <artifactId>Parent</artifactId>
         <version>0.0.1-SNAPSHOT</version>
         <relativePath>../Parent/pom.xml</relativePath>
     </parent>
     <dependencies>
         <dependency>
             <!-- Parent项目的pom.xml文件配置中已经指明了要使用的Junit的版本号,因此在这里添加junit的依赖时,
             可以不指明<version></version>和<scope>test</scope>,会直接从Parent项目的pom.xml继承 -->
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
         </dependency>
         <!-- HelloFriend项目中使用到了Hello项目中的类,因此需要添加对Hello.jar的依赖 
         Hello.jar的<version>和<scope>也已经在Parent项目的pom.xml文件配置中已经指明了
         因此这里也可以省略不写了
         -->
         <dependency>
             <groupId>me.gacl.maven</groupId>
             <artifactId>Hello</artifactId>
         </dependency>
     </dependencies>
 </project>

 在MakeFriends项目的pom.xml中继承Parent项目的pom.xml配置

<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/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
    <artifactId>MakeFriends</artifactId>
     <!-- 继承Parent项目中的pom.xml配置 -->
     <parent>
         <groupId>me.gacl.maven</groupId>
         <artifactId>Parent</artifactId>
         <version>0.0.1-SNAPSHOT</version>
         <relativePath>../Parent/pom.xml</relativePath>
     </parent>
     <dependencies>
         <dependency>
        <!-- Parent项目的pom.xml文件配置中已经指明了要使用的Junit的版本号,因此在这里添加junit的依赖时,
            可以不指明<version></version>和<scope>test</scope>,会直接从Parent项目的pom.xml继承 -->
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
         </dependency>
         <dependency>
         <!-- MakeFriends项目中使用到了HelloFriend项目中的类,因此需要添加对HelloFriend.jar的依赖 
         HelloFriend.jar的<version>和<scope>也已经在Parent项目的pom.xml文件配置中已经指明了
         因此这里也可以省略不写了
         -->
             <groupId>me.gacl.maven</groupId>
            <artifactId>HelloFriend</artifactId>
        </dependency>
     </dependencies>
 </project>

  以上的四个项目的pom.xml经过这样的配置之后,就完成了在Parent项目中聚合Hello、HelloFriend、MakeFriends这三个子项目(子模块),而Hello、HelloFriend、MakeFriends这三个子项目(子模块)也继承了Parent项目中的公共配置,这样就可以使用Maven一次性构建所有的项目了,如下图所示:

  

Maven构建与管理项目(二)_Maven构建与管理项目(二)_08

  选中Parent项目的pom.xml文件→【Run As】→【Maven install】,这样Maven就会一次性同时构建Parent、Hello、HelloFriend、MakeFriends这四个项目,如下图所示:

  

Maven构建与管理项目(二)_Maven构建与管理项目(二)_09

 

Maven构建多模块项目

在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分层开发,最常见的就是分为domain(域模型层)、dao(数据库访问层)、service(业务逻辑层)、web(表现层),这样分层之后,各个层之间的职责会比较明确,后期维护起来也相对比较容易,今天我们就是使用Maven来构建以上的各个层。

  项目结构如下:

  system-parent
        |----pom.xml
        |----system-domain
                |----pom.xml
        |----system-dao
                |----pom.xml
        |----system-service
                |----pom.xml
        |----system-web
                |----pom.xml

 

创建system-parent项目

  创建system-parent,用来给各个子模块继承。

  进入命令行,输入以下命令:

mvn archetype:create -DgroupId=me.gacl -DartifactId=system-parent -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

 如下图所示:

  

Maven构建与管理项目(二)_maven_10

  命令执行完成之后可以看到在当前目录(C:\Documents and Settings\Administrator)生成了system-parent目录,里面有一个src目录和一个pom.xml文件,如下图所示:

  

Maven构建与管理项目(二)_Maven构建与管理项目(二)_11

  将src文件夹删除,然后修改pom.xml文件,将<packaging>jar</packaging>修改为<packaging>pom</packaging>,pom表示它是一个被继承的模块,修改后的内容如下:

<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/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
 
   <groupId>me.gacl</groupId>
   <artifactId>system-parent</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <name>system-parent</name>
   <url>http://maven.apache.org</url>
 
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>
 
   <dependencies>
     <dependency>
       <groupId>junit</groupId>
      <artifactId>junit</artifactId>
     <version>3.8.1</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
 </project>

 

创建sytem-domain模块

  在命令行进入创建好的system-parent目录,然后执行下列命令:

mvn archetype:create -DgroupId=me.gacl -DartifactId=system-domain -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

  如下图所示:

  

Maven构建与管理项目(二)_xml_12

  命令执行完成之后可以看到在system-parent目录中生成了system-domain,里面包含src目录和pom.xml文件。如下图所示:

  

Maven构建与管理项目(二)_maven_13

  

Maven构建与管理项目(二)_生命周期_14

  同时,在system-parent目录中的pom.xml文件自动添加了如下内容:

<modules>
    <module>system-domain</module>
</modules>

  这时,system-parent的pom.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
 2 <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/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
 
   <groupId>me.gacl</groupId>
   <artifactId>system-parent</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <name>system-parent</name>
   <url>http://maven.apache.org</url>
 
   <properties>

     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>   </properties>
 
   <dependencies>
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <version>3.8.1</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
   <modules>
     <module>system-domain</module>
   </modules>
 </project>

 修改system-domain目录中的pom.xml文件,把<groupId>me.gacl</groupId>和<version>1.0-SNAPSHOT</version>去掉,加上<packaging>jar</packaging>,因为groupId和version会继承system-parent中的groupId和version,packaging设置打包方式为jar

  修改过后的pom.xml文件如下:

<?xml version="1.0"?>
 <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <modelVersion>4.0.0</modelVersion>
   <parent>
     <groupId>me.gacl</groupId>
     <artifactId>system-parent</artifactId>
     <version>1.0-SNAPSHOT</version>
   </parent>
   
  <artifactId>system-domain</artifactId>
   <packaging>jar</packaging>
   
   <name>system-domain</name>
   <url>http://maven.apache.org</url>
 </project>

 

创建sytem-dao模块

  在命令行进入创建好的system-parent目录,然后执行下列命令:

mvn archetype:create -DgroupId=me.gacl -DartifactId=system-dao -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

如下图所示:

Maven构建与管理项目(二)_xml_15

命令执行完成之后可以看到在system-parent目录中生成了system-dao,里面包含src目录和pom.xml文件。如下图所示:

Maven构建与管理项目(二)_maven_16

Maven构建与管理项目(二)_生命周期_17

同时,在system-parent目录中的pom.xml文件自动变成如下内容:

<?xml version="1.0" encoding="UTF-8"?>
 <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/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
 
   <groupId>me.gacl</groupId>
   <artifactId>system-parent</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <name>system-parent</name>
   <url>http://maven.apache.org</url>
 
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>
 
   <dependencies>
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <version>3.8.1</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
   <modules>
     <module>system-domain</module>
     <module>system-dao</module>
   </modules>
 </project>

  修改system-dao目录中的pom.xml文件,,把<groupId>me.gacl</groupId>和<version>1.0-SNAPSHOT</version>去掉,加上<packaging>jar</packaging>,因为groupId和version会继承system-parent中的groupId和version,packaging设置打包方式为jar,同时添加对system-domain模块的依赖,修改后的内容如下:

<?xml version="1.0"?>
 <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <modelVersion>4.0.0</modelVersion>
   <parent>
     <groupId>me.gacl</groupId>
     <artifactId>system-parent</artifactId>
     <version>1.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>system-dao</artifactId>
   <packaging>jar</packaging>
 
   <name>system-dao</name>
   <url>http://maven.apache.org</url>
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>
   <dependencies>
     <!--system-dao需要使用到system-domain中的类,所以需要添加对system-domain模块的依赖-->
      <dependency>
       <groupId>me.gacl</groupId>
       <artifactId>system-domain</artifactId>
       <version>${project.version}</version>
     </dependency>
   </dependencies>
 </project>

 

创建system-service模块

  在命令行进入创建好的system-parent目录,然后执行下列命令:

mvn archetype:create -DgroupId=me.gacl -DartifactId=system-service -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

  如下图所示:

Maven构建与管理项目(二)_Maven构建与管理项目(二)_18

  命令执行完成之后可以看到在system-parent目录中生成了system-service,里面包含src目录和pom.xml文件。如下图所示:

Maven构建与管理项目(二)_生命周期_19

Maven构建与管理项目(二)_maven_20

  同时,在system-parent目录中的pom.xml文件自动变成如下内容:

<?xml version="1.0" encoding="UTF-8"?>
 <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/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
 
   <groupId>me.gacl</groupId>
   <artifactId>system-parent</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <name>system-parent</name>
   <url>http://maven.apache.org</url>
 
  <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>
 
   <dependencies>
     <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
       <version>3.8.1</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
   <modules>
     <module>system-domain</module>
     <module>system-dao</module>
     <module>system-service</module>
   </modules>
</project>

 修改system-service目录中的pom.xml文件,,把<groupId>me.gacl</groupId>和<version>1.0-SNAPSHOT</version>去掉,加上<packaging>jar</packaging>,因为groupId和version会继承system-parent中的groupId和version,packaging设置打包方式为jar,同时添加对system-dao模块的依赖,system-service依赖system-dao和system-domain,但是我们只需添加system-dao的依赖即可,因为system-dao已经依赖了system-domain。修改后的内容如下:

<?xml version="1.0"?>
 <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <modelVersion>4.0.0</modelVersion>
   <parent>
     <groupId>me.gacl</groupId>
     <artifactId>system-parent</artifactId>
     <version>1.0-SNAPSHOT</version>
    </parent> 
   <artifactId>system-service</artifactId>
   <packaging>jar</packaging>  
   <name>system-service</name> 
  <url>http://maven.apache.org</url>
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>
   <dependencies>
     <!--
     system-service依赖system-dao和system-domain,
     但是我们只需添加system-dao的依赖即可,因为system-dao已经依赖了system-domain
     -->
     <dependency>
       <groupId>me.gacl</groupId>
       <artifactId>system-dao</artifactId>
       <version>${project.version}</version>
    </dependency>
   </dependencies>
 </project>

 

创建system-web模块

  在命令行进入创建好的system-parent目录,然后执行下列命令:

mvn archetype:create -DgroupId=me.gacl -DartifactId=system-web -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

  如下图所示:

Maven构建与管理项目(二)_Maven构建与管理项目(二)_21

  命令执行完成之后可以看到在system-parent目录中生成了system-web,里面包含src目录和pom.xml文件。如下图所示:

Maven构建与管理项目(二)_生命周期_22

Maven构建与管理项目(二)_生命周期_23

  在\system-web\src\main\webapp目录中还生成了一个简单的index.jsp,如下图所示:

Maven构建与管理项目(二)_maven_24

  里面的内容为

<html>
<body>
<h2>Hello World!</h2>
</body>
</html>

  system-web\src\main\webapp\WEB-INF目录中生成了web.xml

 

Maven构建与管理项目(二)_生命周期_25

  同时,在system-parent目录中的pom.xml文件自动变成如下内容:

<?xml version="1.0" encoding="UTF-8"?>
  <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/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
 
   <groupId>me.gacl</groupId>
   <artifactId>system-parent</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <name>system-parent</name>
   <url>http://maven.apache.org</url>
 
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>
 
   <dependencies>
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <version>3.8.1</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
   <modules>
    <module>system-domain</module>
     <module>system-dao</module>
     <module>system-service</module>
     <module>system-web</module>
   </modules>
 </project>

 修改system-web目录中的pom.xml文件,,把<groupId>me.gacl</groupId><version>1.0-SNAPSHOT</version>去掉,因为groupId和version会继承system-parent中的groupId和version,同时添加对system-service模块的依赖,修改后的内容如下:

<?xml version="1.0"?>
 <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <modelVersion>4.0.0</modelVersion>
    <parent>
     <groupId>me.gacl</groupId>
     <artifactId>system-parent</artifactId>
     <version>1.0-SNAPSHOT</version>
   </parent>

   <artifactId>system-web</artifactId>
  <packaging>war</packaging>
   
   <name>system-web Maven Webapp</name>
   <url>http://maven.apache.org</url>
   <dependencies>
     <!--
    system-web依赖system-service
     -->
      <dependency>
       <groupId>me.gacl</groupId>
       <artifactId>system-service</artifactId>
       <version>${project.version}</version>
     </dependency>
   </dependencies>
   <build>
     <finalName>system-web</finalName>
  </build>
</project>

  注意,web项目的打包方式是war。

 

编译运行项目

  经过上面的五个步骤,相关的模块全部创建完成,怎么运行起来呢。由于最终运行的是system-web模块,所以我们对该模块添加jetty支持,方便测试运行。修改system-web项目的pom.xml如下:

<?xml version="1.0"?>
 <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <modelVersion>4.0.0</modelVersion>
   <parent>
     <groupId>me.gacl</groupId>
     <artifactId>system-parent</artifactId>
     <version>1.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>system-web</artifactId>
   <packaging>war</packaging>
   
   <name>system-web Maven Webapp</name>
  <url>http://maven.apache.org</url>
   <dependencies>
     <!--
     system-web依赖system-service
     -->
      <dependency>
       <groupId>me.gacl</groupId>
       <artifactId>system-service</artifactId>
       <version>${project.version}</version>
     </dependency>
   </dependencies>
   <build>
     <finalName>system-web</finalName>
     <plugins>
         <!--配置Jetty插件-->
         <plugin>
             <groupId>org.mortbay.jetty</groupId>
             <artifactId>maven-jetty-plugin</artifactId>
         </plugin>
     </plugins>
   </build>
 </project>

 在命令行进入system-parent目录,然后执行下列命令:

mvn clean install

 如下图所示:

 

Maven构建与管理项目(二)_Maven构建与管理项目(二)_26

 

Maven构建与管理项目(二)_生命周期_27

  命令执行完后,在system-web目录下多出了target目录,里面有了system-web.war,如下图所示:

 

Maven构建与管理项目(二)_Maven构建与管理项目(二)_28

  命令行进入sytem-web目录,执行如下命令,启动jetty

mvn jetty:run

 如下图所示:

Maven构建与管理项目(二)_xml_29

Maven构建与管理项目(二)_Maven构建与管理项目(二)_30

  启动jetty服务器后,访问http://localhost:8080/system-web/ 运行结果如下图所示:

Maven构建与管理项目(二)_Maven构建与管理项目(二)_31

 

导入Eclipse中进行开发

操作步骤如下所示:

  

Maven构建与管理项目(二)_Maven构建与管理项目(二)_32

  

Maven构建与管理项目(二)_maven_33

  

Maven构建与管理项目(二)_xml_34

  

Maven构建与管理项目(二)_生命周期_35

  

Maven构建与管理项目(二)_生命周期_36

 

举报

相关推荐

0 条评论