maven的常用命令与多模块项目构建

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lchq1995/article/details/84069382

      本节介绍几个maven常用的命令,以备遗忘时可以查看。

mvn -version                 查看maven的版本及配置信息

mvn archetype:create   -DgroupId=    DartifactId=    构建java项目

mvn archetype:create   -DgroupId=    DartifactId=    -DarchetypeArtifactId=maven-archetype-webapp 创建web项目

mvn compile                编译项目代码

mvn package               打包项目

mvn package -Dmaven.test.skip=true   打包项目时跳过单元测试

mvn test                      运行单元测试

mvn clean                    清除编译产生的target文件夹内容,可以配合相应命令一起使用,如mvn clean package, mvn clean test

mvn install                   打包后将其安装在本地仓库

mvn deploy                  打包后将其安装到pom文件中配置的远程仓库

mvn eclipse:eclipse      将maven生成eclipse项目结构

mvn eclipse:clean         清除maven项目中eclipse的项目结构

mvn site                       生成站点目录

mvn dependency:list      显示所有已经解析的所有依赖

mvn dependency:tree     以树的结构展示项目中的依赖

mvn dependency:analyze  对项目中的依赖进行分析,依赖未使用,使用单未引入

mvn dependency:analyze -DfailOnWarning=true  对项目中的依赖进行分析,未使用的依赖项或未声明的已使用依赖项时,输出中都会显示警告

跳过测试的运行:你可以用mvn package -DskipTests=true。或者,您可以将该属性缩短为-DskipTests.

跳过测试的编译和运行(不建议):你可以用mvn package -Dmaven.test.skip=true。你可以把财产缩短到-Dmaven.test.skip.

调试单元测试:你可以用mvn package -Dmaven.surefire.debug.

调试集成测试:你可以用mvn package -Dmaven.failsafe.debug.

mvn tomcat:run              启动tomcat

mvn clean install        构建项目

mvn clean dependency:copy-dependencies package    清理和打包

处理并显示清理生命周期的所有阶段: mvn post-clean

介绍

POM代表项目对象模型。它是 Maven 中工作的基本单位,这是一个 XML 文件。它始终保存在该项目基本目录中的 pom.xml 文件。
POM 包含的项目是使用 Maven 来构建的,它用来包含各种配置信息。
POM 也包含了目标和插件。在执行任务或目标时,Maven 会使用当前目录中的 POM。它读取POM得到所需要的配置信息,然后执行目标。部分的配置可以在 POM 使用如下:

  • project dependencies
  • plugins
  • goals
  • build profiles
  • project version
  • developers
  • mailing list

创建一个POM之前,应该要先决定项目组(groupId),它的名字(artifactId)和版本,因为这些属性在项目仓库是唯一标识的。

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>com.yiibai.project-group</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
<project>

XML

要注意的是,每个项目只有一个POM文件。

  • 所有的 POM 文件要项目元素必须有三个必填字段: groupIdartifactIdversion
  • 在库中的项目符号是:groupId:artifactId:version
  • pom.xml 的根元素是 project,它有三个主要的子节点。
节点 描述
groupId 这是项目组的编号,这在组织或项目中通常是独一无二的。 例如,一家银行集团com.company.bank拥有所有银行相关项目。
artifactId 这是项目的ID。这通常是项目的名称。 例如,consumer-banking。 除了groupId之外,artifactId还定义了artifact在存储库中的位置。
version 这是项目的版本。与groupId一起使用,artifact在存储库中用于将版本彼此分离。 例如:com.company.bank:consumer-banking:1.0com.company.bank:consumer-banking:1.1

超级POM

所有的POM继承自父类(尽管明确界定)。这个基础的 POM 被称为超级 POM,并包含继承默认值。 Maven使用有效的POM(超级POM加项目配置的配置)执行有关目标。它可以帮助开发人员指定最低配置的详细信息写在 pom.xml 中。虽然配置可以很容易被覆盖。 一个简单的方法来看看超级POM的默认配置,通过运行下面的命令:mvn help:effective-pom 创建一个 pom.xml 。 在下面的例子中,已经创建了一个 pom.xmlC:\MVN\ 项目文件夹中。 现在,打开命令控制台,进入包含 pom.xml 文件夹并执行以下 mvn 命令。

C:\MVN\project> mvn help:effective-pom

Maven将开始处理,并显示有效的 effective-pom 。

[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'help'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.project-group:project-name:jar:1.0
[INFO]    task-segment: [help:effective-pom] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [help:effective-pom {execution: default-cli}]
[INFO]

.....

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Thu Jul 05 11:41:51 IST 2012
[INFO] Final Memory: 6M/15M
[INFO] ------------------------------------------------------------------------

在控制台显示结果:有效POM,继承,插值,应用配置文件。

生命周期

构建生命周期阶段的目标是执行顺序是一个良好定义的序列。
这里使用一个例子,一个典型的 Maven 构建生命周期是由下列顺序的阶段:

阶段 处理 描述
准备资源 资源复制 资源复制可以进行定制
编译 执行编译 源代码编译在此阶段完成
包装 打包 创建JAR/WAR包如在 pom.xml 中定义提及的包
安装 安装 这一阶段在本地/远程Maven仓库安装程序包

默认(或生成)生命周期

这是 Maven 主要的生命周期,用于构建应用程序。它有以下 23 个阶段。

生命周期阶段 描述
validate 验证项目是否正确,并且所有必要的信息可用于完成构建过程
initialize 建立初始化状态,例如设置属性
generate-sources 产生任何的源代码包含在编译阶段
process-sources 处理源代码,例如,过滤器值
generate-resources 包含在包中产生的资源
process-resources 复制和处理资源到目标目录,准备打包阶段
compile 编译该项目的源代码
process-classes 从编译生成的文件提交处理,例如:Java类的字节码增强/优化
generate-test-sources 生成任何测试的源代码包含在编译阶段
process-test-sources 处理测试源代码,例如,过滤器任何值
test-compile 编译测试源代码到测试目标目录
process-test-classes 处理测试代码文件编译生成的文件
test 运行测试使用合适的单元测试框架(JUnit)
prepare-package 执行必要的任何操作的实际打包之前准备一个包
package 提取编译后的代码,并在其分发格式打包,如JAR,WAR或EAR文件
pre-integration-test 完成执行集成测试之前所需操作。例如,设置所需的环境
integration-test 处理并在必要时部署软件包到集成测试可以运行的环境
pre-integration-test 完成集成测试已全部执行后所需操作。例如,清理环境
verify 运行任何检查,验证包是有效的,符合质量审核规定
install 将包安装到本地存储库,它可以用作当地其他项目的依赖
deploy 复制最终的包到远程仓库与其他开发者和项目共享

有涉及到Maven 生命周期值得一提几个重要概念:

  • 当一个阶段是通过 Maven命令调用,例如:mvn compile,只有阶段到达并包括这个阶段才会被执行。

  • 不同的 Maven 目标绑定到 Maven生命周期的不同阶段这是这取决于包类型(JAR/WAR/EAR)。 

Maven多模块项目

  Maven多模块项目,适用于一些比较大的项目,通过合理的模块拆分,实现代码的复用,便于维护和管理。尤其是一些开源框架,也是采用多模块的方式,提供插件集成,用户可以根据需要配置指定的模块。

  项目结构如下:

      test-hd-parent   (父级)
             ---pom.xml
             ---test-hd-api          (第三方接口层)
                    ----pom.xml    
           ---test-hd-foundation     (基础工具层)
                    ----pom.xml
             ---test-hd-resource     (资源层) 
                    ----pom.xml
             ---test-hd-service       (逻辑业务层)
                    ----pom.xml
           ---test-hd-modules     (web层)
                    ----pom.xml
                ---test-hd-www         (web模块1)
                            ----pom.xml
                ---test-hd-admin        (web模块2)
                            ----pom.xml     

创建一个父maven工程

  •   新建一个maven项目,选择存储位置,并选择创建一个简单的maven工程

   

  •   输入Group Id、Artifact Id、Packaging,packaging选择pom包

  •   生成父工程,pom.xml如下

  •   删除工程中的src 目录

创建子模块

  •   右击父工程名---》New---》Project,然后选择新建一个maven module工程

  •   设置子工程名以及父工程,再设置快速创建模式

  •   得到子工程(test-hd-api,第三方接口层),设置编译的jdk

  •   同理设置,子模块:test-hd-foundation(基础工具层)、test-hd-resource(资源层) 、test-hd-service(逻辑业务层)
  •   新建test-hd-modules (web层),选择创建一个a simple project,输入Group Id、Artifact Id、Packaging,packaging选择pom包

创建web子模块

  •   web子模块在建在test-hd-modules (web层)里面,右击test-hd-modules 工程名---》New---》Project,然后选择新建一个maven module工程,设置子工程名以及父工程,选择新建web项目

配置个模块的依赖

  •   在parent项目pom.xml中建立依赖管理(dependencyManagement)
     1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     3     <modelVersion>4.0.0</modelVersion>
     4     <groupId>com.hd</groupId>
     5     <artifactId>test-hd-parent</artifactId>
     6     <version>0.0.1-SNAPSHOT</version>
     7     <packaging>pom</packaging>
     8     <modules>
     9         <module>test-hd-api</module>
    10         <module>test-hd-service</module>
    11         <module>test-hd-resource</module>
    12         <module>test-hd-foundation</module>
    13         <module>test-hd-modules</module>
    14     </modules>
    15 
    16 
    17     <!-- maven依赖 -->
    18     <dependencyManagement>
    19 
    20         <dependencies>
    21             <!-- hd -->
    22             <dependency>
    23                 <groupId>com.hd</groupId>
    24                 <artifactId>test-hd-api</artifactId>
    25                 <version>0.0.1-SNAPSHOT</version>
    26             </dependency>
    27 
    28             <dependency>
    29                 <groupId>com.hd</groupId>
    30                 <artifactId>test-hd-service</artifactId>
    31                 <version>0.0.1-SNAPSHOT</version>
    32             </dependency>
    33 
    34             <dependency>
    35                 <groupId>com.hd</groupId>
    36                 <artifactId>test-hd-resource</artifactId>
    37                 <version>0.0.1-SNAPSHOT</version>
    38             </dependency>
    39 
    40             <dependency>
    41                 <groupId>com.hd</groupId>
    42                 <artifactId>test-hd-foundation</artifactId>
    43                 <version>0.0.1-SNAPSHOT</version>
    44             </dependency>
    45 
    46             <!-- Servlet -->
    47             <dependency>
    48                 <groupId>javax.servlet</groupId>
    49                 <artifactId>javax.servlet-api</artifactId>
    50                 <version>3.0.1</version>
    51                 <scope>provided</scope>
    52             </dependency>
    53             <dependency>
    54                 <groupId>javax.servlet.jsp</groupId>
    55                 <artifactId>jsp-api</artifactId>
    56                 <version>2.2</version>
    57                 <scope>provided</scope>
    58             </dependency>
    59 
    60             <!-- jstl -->
    61             <dependency>
    62                 <groupId>javax.servlet</groupId>
    63                 <artifactId>jstl</artifactId>
    64                 <version>1.2</version>
    65             </dependency>
    66 
    67             <dependency>
    68                 <groupId>taglibs</groupId>
    69                 <artifactId>standard</artifactId>
    70                 <version>1.1.2</version>
    71             </dependency>
    72 
    73             <dependency>
    74                 <groupId>junit</groupId>
    75                 <artifactId>junit</artifactId>
    76                 <version>3.8.1</version>
    77                 <scope>test</scope>
    78             </dependency>
    79 
    80         </dependencies>
    81     </dependencyManagement>
    82 
    83 </project>
  •     test-hd-foundation中的依赖
     1 <?xml version="1.0"?>
     2 <project
     3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
     4     xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
     5     <modelVersion>4.0.0</modelVersion>
     6     <parent>
     7         <groupId>com.hd</groupId>
     8         <artifactId>test-hd-parent</artifactId>
     9         <version>0.0.1-SNAPSHOT</version>
    10     </parent>
    11     <artifactId>test-hd-foundation</artifactId>
    12 
    13     <dependencies>
    14 
    15         <!-- servlet -->
    16         <dependency>
    17             <groupId>javax.servlet</groupId>
    18             <artifactId>jstl</artifactId>
    19         </dependency>
    20 
    21         <dependency>
    22             <groupId>taglibs</groupId>
    23             <artifactId>standard</artifactId>
    24         </dependency>
    25 
    26         <dependency>
    27             <groupId>junit</groupId>
    28             <artifactId>junit</artifactId>
    29         </dependency>
    30     </dependencies>
    31 
    32     <build>
    33         <plugins>
    34             <!-- define the project compile level -->
    35             <plugin>
    36                 <groupId>org.apache.maven.plugins</groupId>
    37                 <artifactId>maven-compiler-plugin</artifactId>
    38                 <version>2.3.2</version>
    39                 <configuration>
    40                     <source>1.7</source>
    41                     <target>1.7</target>
    42                 </configuration>
    43             </plugin>
    44         </plugins>
    45     </build>
    46 </project>

    以下几个同上

  •     test-hd-api中的依赖关系
  •     test-hd-resource中的依赖关系
  •     test-hd-service中的依赖关系
  •  test-hd-module中的依赖关系
  •     test-hd-www中的依赖关系
  •     最后使用maven-update整个工程,右击父工程名--》Maven--》Update Project

打包和发布

  •   打包,右击父工程名 test-hd-parent---->Run As--->Maven Install 
  •   打包web子工程,右击工程名test-hd-www--->Run As ---> Maven Build...---> Goals: clean package--->Run

   

      

  •   右击工程名test-hd-www,进行刷新,找到war包,放到tomcat的webapps中,启动tomcat,即可访问工程http://localhost:8080/test-hd-www

    

             

  •   可以去tomcat下面webapps》test-hd-www》WEB-INF》lib中,看到引用的jar包

    

猜你喜欢

转载自blog.csdn.net/lchq1995/article/details/84069382