zoukankan      html  css  js  c++  java
  • 01 Maven 安装与配置

    Maven 安装与配置

    1. Maven 介绍

    Maven 翻译为 “专家”,“内行”。Maven 是 Apache 下的一个纯 Java 开发的开源项目,它是一个项目管理工具,使用 Maven 对 Java 项目进行构建、依赖管理。

    1.1 什么是项目构建

    项目构建是一个项目从编写源代码到编译、测试、运行、打包、部署、运行的过程。

    Maven 将项目构建的过程进行标准化,每个阶段使用一个命令完成,下图展示了构建过程的一些阶段,后面章节详细介绍每个阶段,这里先大概了解下:

    图1.1.1 Maven项目构建过程

    上图中部分阶段对应命令如下:

    1. 清理阶段对应 Maven 的命令是 clean,清理输出的 class 文件
    2. 编译阶段对应 Maven 的命令是 compile,将 Java 代码编译成 class 文件。
    3. 打包阶段对应 Maven 的命令是 package,Java 工程可以打成 jar 包,web 包可以打成 war 包

    运行一个 Maven 工程(web工程)需要一个命令:tomat:run

    Maven 工程构建的优点:

    1. 一个命令完成构建、运行,方便快捷。
    2. Maven 对每个构建阶段进行规范,非常有利于大型团队协作开发。

    1.2 什么是依赖管理

    Maven 项目管理所依赖的 jar 包不需要手动向工程添加 jar 包,只需要在 pom.xml(Maven 工程的配置文件)添加 jar 包的坐标,自动从 Maven 仓库中下载 jar 包、运行,如下图:

    图1.1.2 Maven依赖管理

    使用 maven 依赖管理添加 jar 的好处:

    1. 通过 pom.xml 文件对 jar 包的版本进行统一管理,可避免版本冲突。
    2. Maven 团队维护了一个非常全的 Maven 仓库,里边包括了当前使用的 jar 包,Maven 工程可以自动从 Maven 仓库下载 jar 包,非常方便。

    1.3 使用 Maven 的好处

    通过上边介绍传统项目和 Maven 项目在项目构建及依赖管理方面的区域,Maven 有如下的好处:

    1. 一步构建。Maven 对项目构建的过程进行标准化,通过一个命令即可完成构建过程。
    2. 依赖管理。Maven 工程不用手动导 jar 包,通过在 pom.xml 中定义坐标从 Maven 仓库自动下载,方便且不易出错。
    3. Maven 的跨平台,可在 window、linux 上使用。
    4. Maven 遵循规范开发有利于提高大型团队的开发效率,降低项目的维护成本,大公司都会考虑使用 Maven 来构建项目。

    2. Maven 的安装与配置

    Maven 是基于 Java 开发的,无论是 Windows 上还是 Linux 上直接解压即可,前提是已经安装有 JDK。安装完成后需要配置环境变量:

    JAVA_HOME:D:Program FilesJavajdk1.8.0_91
    MAVEN_HOME:D:Mavenapache-maven-3.5.0
    

    3. Maven 目录结构介绍

    3.1 MAVEN_HOME

    bin
    boot
    conf
    lib
    LICENSE
    NOTICE
    README.txt
    
    • bin 该目录包含了 mvn 运行的脚本,这些脚本用来配置 Java 命令,准备好 classpath 和相关的 Java 系统属性,然后执行 Java 命令。其中 mvn 是基于 UNIX 平台的 shel 脚本,mvn.bat 是基于 Windows 平台的 bat 脚本。在命令行输人任何一条 mvn 命令时,实际上就是在调用这些脚本。该目录还包含了 mvnDebug 和 mvnDebug.bat 两个文件,同样,前者是 UNIX 平台的 shell 脚本,后者是 Windows 平台的 bat 脚本。那么 mvn 和 mvnDebug 有什么区别呢?打开文件我们可以看到,两者基本上是一样的,只是 mvnDebug 多了一条 MAVEN_DEBUG_OPTS 配置,其作用就是在运行 Maven 时开启 debug,以便调试 Maven 本身。此外,该目录还包含 m2.conf 文件,这是 clssworlds 的配置文件,后面会介绍 classworlds。

    • boot 该目录只包含一个文件,以 maven3.5.0 为例,该文件为 plexus-classworlds-2.5.2.jar。plexus-classworlds 是一个类加载器框架,相对于默认的 java 类加载器,它提供了更丰富的语法以方便配置, Maven 使用该框架加载自己的类库。对于一般的 Maven 用户来说,不必关心该文件。

    • conf 该目录包含了一个非常重要的文件 settings.xml。直接修改该文件,就能在机器上全局地定制 Maven 的行为。一般情况下,我们更偏向于复制该文件至 ~/.m2/ 目录下(~表示用户目录),然后修改该文件,在用户范围定制 Maven 的行为。后面将会多次提到 settings.xml,并逐步分析其中的各个元素。

    • lib 该目录包含了所有 Maven 运行时需要的 Java 类库,Maven 本身是分模块开发的,因此用户能看到诸如 maven-core-3.5.0.jar、 maven-model-3.5.0.jar 之类的文件。此外,这里还包含一些 Maven 用用到的第三方依赖,如 commons-cli-1.4.jar。可以说,lib 目录就是真正的 Maven。关于该文件,还有一点值得一提的是,用户可以在这个目录中找到 Maven 内置的超级 POM,这一点在 8.5 节详细解释。

    • 其他: LICENSE.txt 记录了 Maven 使用的软件许可证 Apache License Version2.0;NOTICE.txt 记录了 Maven 包含的第三方软件;而 READMIE.txt 则包含了 Maven 的简要介绍,包括安装需求及如何安装的简要指令等。

    3.2 ~/.m2

    在讲述该小节之前,我们先运行一条简单的命令: mvn help: system。该命令会打印出所有的 Java 系统属性和环境变量,这些信息对我们日常的编程工作很有帮助。这里暂不解释 help:system 涉及的语法,运行这条命令的目的是让 Maven 执行一个真正的任务。我们可以从命令行输出看到 Maven 会下载 maven-help-plugin,包括 pom 文件和 jar 文件。这些文件都被下载到了 Maven 本地仓库中。

    默认情况下,.m2 文件夹下放置了 Maven 本地仓库 .m2/repository。所有的 Maven 构件都被存储到该仓库中,以方便重用。可以到 ~/.m2/repository/org/apache/maven/plugins/maven-help-plugins 目录找到刚才下载的 maven-help-plugins 的 pom 文件和 jar 文件。 Maven 根据一套规则来确定任何一个构件在仓库中的位置,这一点在第 6 章交付详细阐述。

    默认情况下,~/.m2 目录下除了 repository 仓库之外就没有其他目录和文件了,不过大多数 Maven 用户需要复制 MAVEN_HOME/conf/settings.xml 文件到 ~/.m2/settings.xml。这是条最佳实践,我们将在 3 小节详细解释。

    4. 设置 HTTP 代理

    有时候你所在的公司基于安全因素考虑,要求你使用通过安全认证的代理访问因特网。这种情况下,就需要为 Maven 配配置 HTTP 代理,才能让它正常访问外部仓库,以下载所需要的资源。首先确认自己无法直接访问公共的的 Maven 中央仓库,直接运行命令 ping repo.maven.org 可以检查网络。如果真的需要代理,先检査一下代理服务器是否畅通。比如现在有一个 IP 地址为 218.14.227.197,端口为 3128 的代理服务,我们可以运行 telnet 218.14.227.197 3128 来检测该地址的该端口是否畅通。如果得到出错信息,需要先获取正确的代理服务信息;

    检查完毕之后,编辑 ~/.m2/settings.xml 文件。添加代理配置如下:

    <proxy>
      <id>my-proxy</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>218.14.227.197</host>
      <port>3128</port>
      <!-- <username>proxyuser</username>
      <password>proxypass</password>
      <nonProxyHosts>local.net|some.host.com|*.google.com</nonProxyHosts> -->
    </proxy>
    

    这段配置十分简单, proxies 下可以有多个 proxy 元素,如果声明了多个 proxy 元素,则默认情况下第一个被激活的 proxy 会生效。这里声明了一个 id 为 my-proxy 的代理, active 的值为 true 表示激活该代理, protocol 表示使用的代理协议,这里是 http。当然,最重要的是指定正确的主机名(host元素)和端口(port元素)。上述 XML 配置中注释掉了 username、password、 nonProxyHosts 几个元素。当代理服务需要认证时,就需要配置 username 和 password。nonProxyHosts 元素用来指定哪些主机名不需要代理,可以使用 "|" 符号来分隔多个主机名。此外,该配置也支持通配符,如 *.google.com 表示所有以 google.com 结尾的域名不需要代理。

    5. maven 安装最佳实践

    本节介绍一些在安装 Maven 过程中不是必须的,但十分有用的实践。

    5.1 设置 MAVEN_OPTS 环境变量

    前面介绍 Maven 安装目录时我们了解到,运行 mvn 命令实际上是执行了Java 命令,既然是运行 Java,那么运行 Java 命令可用的参数当然也应该在运行 mvn 命令时可用。这个时候, MAVEN_OPTS 环境变量就能派上用场。

    通常需要设置 MAVEN_OPTS 的值为 -Xms128m -Xmx512m,因为 Java 默认的最大可用内存往往不能够满足 Maven 运行的需要,比如在项目较大时,使用 Maven 生成项目站点需要占用大量的内存,如果没有该配置,则很容易得到 java.lang.OutOfMemeoryError。因此,开始就配置该变量是推荐的做法。

    关于如何设置环境变量,请参考前面设置 MAVEN_HOME 环境变量的做法,尽量不要直接修改 mvn.bat 或者 mvn 这两个 Maven 执行脚本文件。因为如果修改了脚本文件,升级 Maven 时就不得不再次修改,一来麻烦,二来容易忘记。同理,应该尽可能地不去修改任何 Maven 安装目录下的文件。

    5.2 配置用户范围 settings.xml

    Maven 用户可以选择配置 $MAVEN_HOME/conf/settings.xml 或者 ~/.m2/settings.xml。前者是全局范围的,而后者是用户范围的。Maven 会先找用户配置,如果找到则以用户配置文件为准,否则使用全局配置文件。

    推荐使用用户范围的 settings.xml,主要是为了避免无意识地影响到系统中的其他用户。如果有切实的需求,需要统一系统中所有用户的 settings.xml 配置,当然应该使用全局范围的 settings.xml。

    除了影响范围这一因素,配置用户范围 settings.xml 文件还便于 Maven 升级。直接修改 conf 目录下的 settings.xml 会导致 Maven 升级不便,每次升级到新版本的 Maven,都需要复制 settings.xml 文件。如果使用 ~/.m2 目录下的 settings.xml,就不会影响到 Maven 安装文件,升级级时就不需要触动 settings.xml 文件。

    5.3 不要使用IDE内嵌的 Maven

  • 相关阅读:
    Python 7步机器学习
    STL容器-- map and multimap 用法
    STL容器-- forward_list 用法
    STL容器-- fixed-size array 用法
    STL容器-- deque 用法
    网站502与504错误分析
    git将一个分支的某个文件合并到当前分支
    阿里云RDS上用mysqldump导入导出
    mysqldump具体应用实例
    mysql的导入导出工具mysqldump命令详解
  • 原文地址:https://www.cnblogs.com/binarylei/p/8647258.html
Copyright © 2011-2022 走看看