Maven学习记录(三)——Maven命令

写在前面

  1. 本文主要基于命令行进行mvn操作。
  2. 实际开发中应该很少用到这样的操作,但是掌握这些操作有助于理解Maven的运行机制。
  3. 技术小白,写的不对,请批评指正。

(一)安装和配置

  1. 安装其实没啥可讲的,官网http://maven.apache.org/download.cgi 下载编译好的 binary zip 压缩包,解压到目录即可。
    在这里插入图片描述
  2. 配置环境变量MAVEN_HOME 或 M2_HOME即Maven的解压目录,我的是M2_HOME=F:\dev\plugins\maven\apache-maven-3.6.0,并在Path中引用,追加%MAVEN_HOME%\bin; 或 %M2_HOME%\bin。

    TIPS: 在网上有配MAVEN_HOME,也有M2_HOME的。MAVEN_HOME是使用的Maven 1,M2_HOME 是使用的MAVEN 2.0 及以上版本。
          在这里插入图片描述
          在这里插入图片描述
    完成后,cmd输入 mvn -version 有信息弹出表示ok。
    在这里插入图片描述

(二)Maven命令介绍

本部分参考了 https://blog.csdn.net/u012152619/article/details/51473410 ,解开了我很多的疑问,也让我对目标和生命周期有了更好的理解和认识。

1. 命令格式及说明

  1. maven的所有任务都是通过命令调用插件来完成的,它本身只是一个空空如也的框架,不具备执行具体任务的能力。
  2. 格式:mvn [plugin-name]:[goal-name]
  3. 说明:执行“plugin-name”插件的“goal-name”目标(或者称为动作)。
  4. 常用命令列表:
    在这里插入图片描述

2. 调用命令的两种方式

  1. 第一种方式是将插件 目标生命周期阶段(lifecycle phase)绑定,这样用户在命令行只是输入生命周期阶段而已,例如Maven默认将maven-compiler-plugin的compile目标与compile生命周期阶段绑定,因此命令mvn compile实际上是先定位到compile这一生命周期阶段,然后再根据绑定关系调用maven-compiler-plugin的compile目标。
  2. 第二种方式是直接在命令行指定要执行的插件目标,例如mvn archetype:generate 就表示调用maven-archetype-plugin的generate目标,这种带冒号的调用方式与生命周期无关。

    TIPS:运行maven命令的时候,首先需要定位到maven项目的目录,也就是项目的pom.xml文件所在的目录。否则,必以通过参数来指定项目的目录。

3. 命令的参数

  1. -D 传入属性参数
    例如:mvn package -Dmaven.test.skip=true,告诉maven打包的时候跳过单元测试.

  2. -P 使用指定的Profile配置
    比如项目开发需要有多个环境,一般为开发,测试,预发,正式4个环境,在pom.xml中的配置如下:

<profiles>
      <profile>
             <id>dev</id>
             <properties>
                    <env>dev</env>
             </properties>
             <activation>
                    <activeByDefault>true</activeByDefault>
             </activation>
      </profile>
      <profile>
             <id>qa</id>
             <properties>
                    <env>qa</env>
             </properties>
      </profile>
      <profile>
             <id>pre</id>
             <properties>
                    <env>pre</env>
             </properties>
      </profile>
      <profile>
             <id>prod</id>
             <properties>
                    <env>prod</env>
             </properties>
      </profile>
</profiles>
......
<build>
      <filters>
             <filter>config/${env}.properties</filter>
      </filters>
      <resources>
             <resource>
                    <directory>src/main/resources</directory>
                    <filtering>true</filtering>
             </resource>
      </resources>
      ......
</build>

<profiles>定义了各个环境的变量id,filters中定义了变量配置文件的地址,其中地址中的环境变量就是上面profile中定义的值。
<resources>中是定义哪些目录下的文件会被配置文件中定义的变量替换。
通过maven可以实现按不同环境进行打包部署,命令为: mvn package -P dev
说明:其中“dev“为环境的变量id,代表使用Id为“dev”的profile。

  1. -e 显示maven运行出错的信息

  2. -o 离线执行命令,即不去远程仓库更新包

  3. -X 显示maven允许的debug信息

  4. -U 强制去远程更新snapshot的插件或依赖,默认每天只更新一次

(三)命令实例

1.使用命令创建java项目

  1. cd 到你想创建工程的目录
    TIPS: 在我的电脑地址栏直接输入cmd回车,可快速进入当前地址的命令行。
  2. 操作命令 : mvn archetype:generate -DgroupId=com.doudou -DartifactId=Hello -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
  3. 说明:
组成部分说明
mvn所有的maven命令都以mvn开头 mvn
archetype:generate告诉Maven我需要使用模板生成一个项目(archetype 指的就是maven中的模板)
-DgroupId=com.doudou指明生产项目的组织ID(maven坐标组成部分之一)
-DartifactId=Hello指明项目的名称 (maven坐标组成部分之一)
-DarchetypeArtifactId=maven-archetype-quickstart指明需要使用的模板(maven-archetype-quickstart 是一种常用的创建java工程的模板)
-DinteractiveMode=false表示禁用交互方式创建,因为我们已经在命令中指明了所需要的参数,如果只是mvn archetype:generate 命令的话,就不需要写-DinteractiveMode=false 了,因为他会通过交互方式列出或让我们输入参数

maven提供的一些模板原型分别是:

序号模板名称模板说明
1:appfuse-basic-jsf创建一个基于Hibernate,Spring和JSF的Web应用程序的原型
2:appfuse-basic-spring创建一个基于Hibernate,Spring和Spring MVC的Web应用程序的原型
3:appfuse-basic-struts创建一个基于Hibernate,Spring和Struts 2的Web应用程序的原型
4:appfuse-basic-tapestry创建一个基于Hibernate,Spring 和 Tapestry 4的Web应用程序的原型
5:appfuse-core创建一个基于Hibernate,Spring 和 XFire的jar应用程序的原型
6:appfuse-modular-jsf创建一个基于Hibernate,Spring和JSF的模块化应用原型
7:appfuse-modular-spring创建一个基于Hibernate, Spring 和 Spring MVC 的模块化应用原型
8:appfuse-modular-struts创建一个基于Hibernate, Spring 和 Struts 2 的模块化应用原型
9:appfuse-modular-tapestry创建一个基于 Hibernate, Spring 和 Tapestry 4 的模块化应用原型
10:maven-archetype-j2ee-simple一个简单的J2EE的Java应用程序
11:maven-archetype-marmalade-mojo一个Maven的 插件开发项目 using marmalade
12:maven-archetype-mojo一个Maven的Java插件开发项目
13:maven-archetype-portlet一个简单的portlet应用程序
14:maven-archetype-profiles
15:maven-archetype-quickstart
16:maven-archetype-site-simple简单的网站生成项目
17:maven-archetype-site更复杂的网站项目
18:maven-archetype-webapp一个简单的Java Web应用程序
19:jini-service-archetypeArchetype for Jini service project creation
20:softeu-archetype-seamJSF+Facelets+Seam Archetype
21:softeu-archetype-seam-simpleJSF+Facelets+Seam (无残留) 原型
22:softeu-archetype-jsfJSF+Facelets 原型
23:jpa-maven-archetypeJPA 应用程序
24:spring-osgi-bundle-archetypeSpring-OSGi 原型
25:confluence-plugin-archetypeAtlassian 聚合插件原型
26:jira-plugin-archetypeAtlassian JIRA 插件原型
27:maven-archetype-harHibernate 存档
28:maven-archetype-sarJBoss 服务存档
29:wicket-archetype-quickstart一个简单的Apache Wicket的项目
30:scala-archetype-simple一个简单的scala的项目
31:lift-archetype-blank一个 blank/empty liftweb 项目
32:lift-archetype-basic基本(liftweb)项目
33:cocoon-22-archetype-block-plain[http://cocoapacorg2/maven-plugins/]
34:cocoon-22-archetype-block[http://cocoapacorg2/maven-plugins/]
35:cocoon-22-archetype-webapp[http://cocoapacorg2/maven-plugins/]
36:myfaces-archetype-helloworld使用MyFaces的一个简单的原型
37:myfaces-archetype-helloworld-facelets一个使用MyFaces和Facelets的简单原型
38:myfaces-archetype-trinidad一个使用MyFaces和Trinidad的简单原型
39:myfaces-archetype-jsfcomponents一种使用MyFaces创建定制JSF组件的简单的原型
40:gmaven-archetype-basicGroovy的基本原型
41:gmaven-archetype-mojoGroovy mojo 原型
  1. 结果:cmd窗口的结果
    生成的目录结构如下所示(tree.txt是我之前生成的目录结构不用管它):
        在这里插入图片描述

    TIPS: 在windows下,可以通过tree命令导出当前目录结构,如
       在这里插入图片描述
    /f 表示带上后缀名
    >tree.txt表示导入将当前结构导入到tree.txt文档

2. 使用命令创建web工程

  • 创建web工程和java工程命令基本一致,只是参数不同
  1. 操作命令:mvn archetype:generate -DgroupId=com.doudou -DartifactId=HelloFriend -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
  2. 说明
命令说明
-DarchetypeArtifactId=maven-archetype-webappmaven-archetype-webapp 是maven一种常用的创建web项目的模板
  1. 结果
    在这里插入图片描述
    生成的文档结构如下:
    在这里插入图片描述

3.将一个Maven Java项目转化成一个Eclipse项目

  1. cd至项目文件夹
  2. 操作命令:mvn eclipse:eclipse
  3. 说明 :
    1 . 运行该命令前可以先运行另外两个命令:mvn cleanmvn eclipse:clean.原因是先清理Maven项目的target目录,接着清理.classpath.project,最后再去执行mvn eclipse:eclipse.
  4. 结果:
    在这里插入图片描述
    这是转换后的目录结构(tree.txt是我之前生成的目录结构不用管它):
    在这里插入图片描述
    可以看到,多了.classpath.project 文件,这样我们在eclipse中可以直接Import进入该工程了。

4.将一个Maven Web项目转化成一个Eclipse项目

  • 转化web工程和java工程命令基本一致,只是多了一个参数
  1. 操作命令:mvn eclipse:eclipse -Dwtpversion=2.0
  2. 说明:-Dwtpversion=2.0 负责告诉 Maven 将项目转换到 Eclipse 的 Web 项目(WAR),而不是默认的Java项目(JAR)
  3. 结果:
    在这里插入图片描述
    项目目录结构如下:
    在这里插入图片描述
    可以看到,多了.classpath.project 文件的同时,还创建了target目录和其下的classes目录,用户存放编译后的结果文件。这样我们在eclipse中可以直接Import进入该工程了。

5.部署至服务器运行

  • maven可以通过配置tomcat服务器插件,运行创建的项目。
  1. 命令:mvn tomcat:run
  2. pom.xml 配置如下内容:
    (1) maven tomcat插件
<plugins>
	...
	<plugin>
	  <groupId>org.apache.tomcat.maven</groupId>
	  <artifactId>tomcat7-maven-plugin</artifactId>
	  <version>2.2</version>
	  <configuration>
		 <port>8080</port>
		 <path>/HelloFriend</path>
		 <uriEncoding>UTF-8</uriEncoding>
		 <finalName>HelloFriend</finalName>
		 <server>tomcat7</server>
	  </configuration>
	</plugin>
</plugins>

(2) 配置jsp,servlet依赖

<dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
      <scope>provided</scope>
</dependency>
<dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.2</version>
      <scope>provided</scope>
</dependency>
<dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
</dependency>
<dependency>
      <groupId>jsptags</groupId>
      <artifactId>pager-taglib</artifactId>
      <version>2.0</version>
      <scope>provided</scope>
</dependency>

说明:<scope>的作用时:指明依赖作用于maven的那些生命周期。
通常有 compile、provided、runtime、test、system 等选项:
【1】 compile,缺省值,适用于所有阶段,会随着项目一起发布。
【2】provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
【3】runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
【4】 test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
【5】system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。

  1. 运行命令:mvn tomcat:run
    此时会报错
    在这里插入图片描述
    在这里插入图片描述
    虽然我们在插件中配置的是tomcat7-maven-plugin,但是maven默认会启用tomcat6,导致访问jsp时报错,无法编译JSP.
    解决办法:mvn tomcat7:run
    此时后台就不会报错,页面正常访问。
    在这里插入图片描述
    TIPS:控制台不会打xxx started,而是一直在Starting状态,此时已经运行成功,访问页面即可。
    在这里插入图片描述

6.安装Jar至本地仓库(针对在中央仓库找不到的jar,以kaptcha.jar为例)

  1. kaptcha.jar 介绍
    kaptcha是一个流行的第三方java库,可以用来生成 “验证码” 的图片,以组织恶意访问或垃圾邮件。但是他不在maven的中央仓库中。
  2. 下载kaptcha.jar
  3. 执行命令
    mvn install:install-file -Dfile=[kaptcha.jar所在路径] -DgroupId=[jar对应的组织Id] -DartifactId=[jar对应的项目名称] -Dversion=[jar的版本号] -Dpackaging=jar
    示例:
    mvn install:install-file -Dfile=c:\kaptcha-2.3.jar -DgroupId=com.google.code -DartifactId=kaptcha -Dversion=2.3 -Dpackaging=jar
  4. 结果
    ​​在这里插入图片描述
    在本地仓库中现在可以找到kaptcha-2.3.jar
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值