Maven日常使用

一、Maven简介

Maven是属于apache软件基金会下一个开源免费的项目,是跨平台的项目管理工具, Maven采用了一种被称之为Project Object Model (POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理,可以在代码进行部署的过程中自动解决项目中代码的依赖环境,需要从maven的镜像仓库中进行下载依赖环境,通常下载比较慢,企业中会在公司内部搭建nexus(私服),将构建项目中的依赖环境保存到nexus服务器中,提高访问速度。

POM项目对象模型,是Maven工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖等等。
执行任务或目标时,Maven会在当前目录中查找POM。读取POM,获取所需的配置信息,然后执行目标。

POM中可以指定以下配置:项目依赖、插件、执行目标、项目构建profile、项目版本、项目开发列表、相关邮件列表信息。

1.1 Maven的功能

  • mavne模型的Java项目对源代码、单元测试代码、资源、jar包等有规范和目录规划;
  • 解决项目间的依赖关系、版本不一致、版本冲突问题;
  • 合理的jar管理机制;

1.2 Maven使用场景

  • 原来项目中的jar包必须手动复制、粘贴到WEB-INF/lib项目下,而借助maven,可以将jar包仅仅保存在仓库中,有需要使用的工程只需要引用这个文件,并不需要重复复制到工程中;
  • 原来的项目中所需要的jar包都是提前下载好的,而maven在联网状态下会自动下载所需要的jar包。首先在本地仓库中找,找不到就在网上进行下载;
  • 原来的项目中一个jar包所依赖的其他jar包必须手动导进来,而maven会自动将被依赖的jar包导进来;
  • 原来的项目一个项目就是一个工程,而借助maven可以将一个项目拆分成多个工程;

项目构建过程包括:【清理项目】→【编译项目】→【测试项目】→【生成测试报告】→【打包项目】→【部署项目】这几个步骤,这六个步骤就是一个项目的完整构建过程。

1.3 Maven仓库类型

在Maven的专业术语中,仓库是指一个位置,Maven仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。在Maven中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。Maven仓库能帮助我们管理构件(主要是Jar),它就是放置所有JAR文件(WAR、ZIP、POM等等)的地方。

Maven仓库有三种类型:

  • 本地
  • 中央
  • 远程
1、本地仓库

Maven 的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。默认情况下,不管Linux还是 Windows,每个用户在自己的用户目录下都有一个路径名为 ~/.m2/respository/ 的仓库目录。

2、中央仓库

Maven中央仓库是由Maven社区提供的仓库,其中包含了大量常用的库。maven内置了远程公用仓库:http://repo1.maven.org/maven2 。中央仓库包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。一般来说,简单的Java项目依赖的构件都可以在这里下载到。

3、第三方仓库

第三方仓库又称为内部中心仓库,也称为私服。私服:一般是由公司自己设立的,只为公司内部共享使用。它既可以作为公司内部构件协作和存档,也可以作为公用类库镜像缓存,减少在外部访问和下载的频率(使用了私服就减少了对中央仓库的访问)。如需了解更多,可以移步这篇文档:Maven教程

二、Maven简单使用

安装Maven需依赖java环境,所以应实现部署jdk环境!

2.1 安装部署jdk环境

下载Linux环境下的jdk1.8,请去(官网)中下载jdk的安装文件;

$ mkdir /usr/local/java/
$ tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local/java/
$ vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_171
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
$ source /etc/profile
$ java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

2.2 maven安装

Maven下载地址

$ wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
$ tar zxvf apache-maven-3.6.3-bin.tar.gz -C /usr/local/
$ ln -sf /usr/local/apache-maven-3.6.3/ /usr/local/maven
$ vim /etc/profile
export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$MAVEN_HOME/bin
$ source /etc/profile
$ mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /usr/local/maven
Java version: 1.8.0_171, vendor: Oracle Corporation, runtime: /usr/local/java/jdk1.8.0_171/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"

2.3 更换maven使用的仓库地址

由于使用maven官网的地址。下载较慢,所以直接更改为阿里云提供的maven仓库地址!

$ vim /usr/local/maven/conf/settings.xml
.......
 49   <!-- localRepository    # 本地仓库配置
 50    | The path to the local repository maven will use to store artifacts.
 51    |
 52    | Default: ${user.home}/.m2/repository
 53   <localRepository>/path/to/local/repo</localRepository>   # 可更换本地仓库目录位置
 54   -->
.......
159     <mirror>
160       <id>aliyun</id>
161       <mirrorOf>central</mirrorOf>
162             <name>aliyun maven</name>
163       <url>https://maven.aliyun.com/nexus/content/groups/public/</url>
164     </mirror>
165   </mirrors>    # 必须写在这个标签里面,这个大标签默认是存在的
# mirror就是镜像,主要提供一个方便地切换远程仓库地址的途径
# <mirrorOf>central</mirrorOf>里是要替代的仓库的id。代理原有仓库,如果填写*表示替换所有仓库  

2.4 构建项目测试

$ mkdir /tmp/test && cd /tmp/test
$ mvn archetype:generate -DgroupId=com.lzj.maven.quickstart -DartifactIdk=test_app -DarchetypeArtifactId=maven-archetype-quickstart
# 输入执行命令时指定的项目名称,接下来的直接按回车保持默认即可
                     ...........................#省略部分内容
[INFO] Using property: groupId = com.lzj.maven.quickstart
Define value for property 'artifactId': test_app # 需手动指定项目名称,可自定义,接下来保持默认即可! 
Define value for property 'version' 1.0-SNAPSHOT: : 
[INFO] Using property: package = com.lzj.maven.quickstart
Confirm properties configuration:
groupId: com.lzj.maven.quickstart
artifactId: test_app
version: 1.0-SNAPSHOT
package: com.lzj.maven.quickstart
 Y: : y
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Value: /tmp/test
[INFO] Parameter: package, Value: com.lzj.maven.quickstart
[INFO] Parameter: groupId, Value: com.lzj.maven.quickstart
[INFO] Parameter: artifactId, Value: test_app
[INFO] Parameter: packageName, Value: com.lzj.maven.quickstart
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: /tmp/test/test_app
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  02:41 min
[INFO] Finished at: 2021-03-10T10:44:40+08:00
[INFO] ------------------------------------------------------------------------
# 最后出现 BUILD SUCCESS 即表示成功!

上述命令解释如下:

  • archetype:generate:创建一个简单的java项目;
  • archetype 也就是原型,是一个 Maven 插件,准确说是一个项目模板,它的任务是根据模板创建一个项目结构。使用 quickstart 原型插件创建一个简单的 java 应用程序
  • -DgroupId:组织名,公司网址的反写(反向域名)+项目名称;
  • -DartifactIdk:项目名或者模块名;
  • -DarchetypeArtifactId:指定 ArchetypeId,maven-archetype-quickstart,创建一个简单的 Java 应用;
  • -DinteractiveMode: 是否使用交互模式。

2.5 生成的POM文件参数解释

$ ls test_app/
pom.xml  src
$ cat test_app/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/maven-v4_0_0.xsd">
  <!-- 根,这是对Project添加一些根元素的约束信息 -->
  <modelVersion>4.0.0</modelVersion>
  <!-- 指定当前maven模型的版本号 -->
  <groupId>com.lzj.maven.quickstart</groupId>
  <!-- 应该是公司名或者组织名。一般来说groupID有三个部分组成,每个部分之间以“.”分隔,第一部分是项目的用途,比如用于商业的就是com,用于非商业盈利性组织的就是org,第二部分是公司名,比如tentxun/baidu/alibaba,第三部分是你的项目名 -->
  <artifactId>test_app</artifactId>
  <!-- 可以认为是maven构建的项目名,比如你的项目中有子项目,就可以使用“项目名-子项目的命名方式 -->
  <packaging>jar</packaging>
  <!-- 指定生成的格式(jar/war/rar/pom/ear) -->
  <version>1.0-SNAPSHOT</version>
  <!-- SNAPSHOT意味快照,说明该项目还在开发中,是不稳定的版本 -->
  <name>test_app</name>
  <!-- 项目的名称, Maven产生的文档用 -->
  <url>http://maven.apache.org</url>
  <!-- 项目主页的url,Maven产生的文档用 -->
  <dependencies>
  <!-- 指定开发构建(jar包) -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <!-- JUnit是一个Java语言的单元测试框架 -->
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

用户的家目录下也会生成一些依赖,用作本地仓库!

$ ls ~/.m2/repository/
antlr  asm  classworlds  commons-codec  commons-collections  commons-io  commons-lang  junit  net  org

2.6 maven配置文件

Maven 的配置文件名称为:setting.xml。它被存放在两个地方:

  • /usr/local/maven/conf/settings.xml #安装的目录;
  • ~/.m2/settings.xml #用户的家目录;

其中,安装目录配置又是全局配置,用户目录配置被称为用户配置。如果两者都存在,他们的内容将被合并,并且用户范围的settings.xml优先。默认用户目录不存在配置文件,可以copy maven安装目录下的settings.xml到用户目录。

关于settings.xml文件常用的的配置修改如下:

  • 修改本地仓库存储路径,默认值是~/.m2/repository 可在settings.xml中的localRepository修改成自己需要的目录;
  • 如果构建服务器因为网络故障或者安全问题不能与远程仓库相连,需要离线模式下,设置offline属性,设置为true,默认为false;
  • 修改中央仓库服务器,修改配置文件中便签,添加或修改镜像地址;
  • 设置代理地址,修改配置文件中proxy标签,定义代理服务器,实现maven的代理。

由于中央仓库服务器是国外的,在国内使用的话,下载比较慢,所以建议国内用户使用阿里云仓库地址。

2.7 maven常用命令

$ cd /tmp/test/test_app/    # 进入刚才构建的项目目录下
$ mvn compile # 编译(在编译的过程中,可以看到使用的是阿里云的仓库)
[INFO] BUILD SUCCESS      # 只要在输出信息的最后几行中看到该行,则表示执行成功
# 以后所有命令都一样,只要最后几行有上述信息,就表示执行成功
$ ls    # 会看到目录下会生成新的目录target
pom.xml  src  target
# target:打包输出目录,如打包好的jar或war文件;
# target/classes:编译输出目录;
$ mvn test          # 测试命令
$ ls target/test-classes/
com
# target/test-classes:测试编译输出目录
$ mvn clean    # 清理命令(就是将编译和测试生成的目录删除)
$ ls      # target目录已经不在了
pom.xml  src
$ mvn package  # 打包
$ ls target/*.jar   # 会生成一个jar包
target/test_app-1.0-SNAPSHOT.jar
$ mvn install   # 安装命令(作用是将压缩文件jar包或者war包上传到本地仓库) 
$ find ~/.m2/repository/ -name test_app-1.0-SNAPSHOT.jar
/root/.m2/repository/com/lzj/maven/quickstart/test_app/1.0-SNAPSHOT/test_app-1.0-SNAPSHOT.jar
# 确认上传的包
$ mvn deploy      # 发布(将包上传到私服,现在我这里还没有私服,所以会失败)

2.8 mvn命令的生命周期

maven基于构建生命周期这个中心概念,这意味着构建和分布特定项目的过程被明确定义,具体如下:
大致的生命周期图:

cd97216227dc13657093e3e4500d8215

详细的生命周期图:

87f36b2635432b28fc7103a1fcf195ed

三、maven实战

3.1 编译生成war包

$ mvn archetype:generate -DgroupId=cn.test.testweb -DartifactId=test_web -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
$ ls
test_app  test_web
$ cd test_web/
$ mvn package
$ ls target/*.war
target/test_web.war

3.2 安装tomcat

$ wget https://mirrors.bfsu.edu.cn/apache/tomcat/tomcat-9/v9.0.43/bin/apache-tomcat-9.0.43.tar.gz
$ tar zxf apache-tomcat-9.0.43.tar.gz -C /usr/local/
$ ln -sf /usr/local/apache-tomcat-9.0.43/ /usr/local/tomcat
$ cp /tmp/test/test_web/target/test_web.war /usr/local/tomcat/webapps/
$ /usr/local/tomcat/bin/startup.sh

3.3 访问测试

客户端访问移动到Tomcat网页根目录下的war包,地址:http://TomcatIP:8080/test_web 如图:

2021-03-10_123731

posted @ 2021-03-10 12:39  吕振江  阅读(187)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end