Maven使用简介-阿里云开发者社区

开发者社区> SevenSun> 正文

Maven使用简介

简介: maven常见操作
+关注继续查看

前言

此文众多内容来自Maven实战一书,该书系统的介绍了maven相关方便知识。还有工作中遇到的问题,以及解决方法,我这里也是将我的理解记录下来,方便日后使用。

本文除非必须(如问题记录等),尽量以文字叙述。

1.Maven是什么?

Maven是Apache下一个开源的项目构建工具,它抽象了一个完整的构建生命周期模型(如下).

1.清理:

2.编译:

3.测试:

4.生成报告:

5.打包:

6.部署:

2.为什么要使用Maven?

1.简化开发环境搭建,如jar包引入。

2.规范项目开发流程,以及项目规范。

3.敏捷开发。

3.如何使用Maven?

  3.1maven下载与安装(windows)

   (1)下载安装:

确保本机有java环境,因为maven需要它,且对版本还有要求,官网下载链接里System Requirements里面有说明,Files栏目下选择apache-maven-3.6.2-bin.zip二进制包即可。下载后直接解压到某个文件夹下即可。

   (2)环境变量配置:

我的电脑(右键)-->属性(右下方)-->高级环境设置(左边栏目)-->环境变量(左下方)-->系统变量栏目下新建一个系统变量,变量名:M2_HOME,变量值:你maven解压的目录绝对路径(也就是包含bin目录的文件路径)-->确定。

然后还是在系统变量栏目下找到Path变量,编辑它,在尾部加入%M2_HOME%\bin。这步的含义是,将maven的bin目录添加到系统环境当中,其中M2_HOME就是我们刚才配置的maven安装路径,而bin目录下就是maven可执行的命令。所以配置好后,我们就可以在dos界面下使用maven命令了,注意maven命令以mvn开头(因为他运行的是bin目录下的mvn.cmd命令)如mvn -version,他会获取maven相关信息,如版本和安装路径。


C:\Users\Administrator>mvn -version

Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T15:58:13+08:00)

Maven home: E:\Develop\maven\apache-maven-3.5.2\bin\..

Java version: 1.8.0_181, vendor: Oracle Corporation

Java home: E:\Develop\java\jdk1.8.0_181\jre

Default locale: zh_CN, platform encoding: GBK

OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

  3.2maven相关配置

  3.2.1maven属性配置文件(settings.xml)

位置:maven安装目录下的conf目下,此目录下的配置文件是全局配置文件,更改后会影响所有系统用户。

与之对应的是maven可以设置多用户配置,也就是不同的用户可以有不同的settings.xml配置,将上线的settings.xml文件copy到C:\Users\Administrator\.m2\目录下,则当前用户会采取该目录下的settings.xml中的配置,若没有则会采用全局配置。

下面我们看看settings.xml中有哪些配置,以及作用。其实该文件里就有相关的配置说明,以及示例,当然它们处于注释状态。我们以settings.xml文件中标签出现的位置来进行说明,标签概念说明请看3.3节.

官方说明文档:链接  参考:链接


标签

作用与说明

示例

<localRepositor/>


本地仓库位置:默认为.m2/repository目录下,可修改为与maven解压相同目录,方便日后修改。

<localRepository>

   E:\Develop\maven\maven-repository

</localRepository>

<interactiveMode/>


交互模式,默认true。可以理解为是否有提示

<interactiveMode>true</interactiveMode>

<offline></offline>

是否不联网,默认false

<offline>false</offline>

<pluginGroups/>


插件的GroupId,pom文件中未写grouId则会从这里查找。默认包含org.apache.maven.plugins和

org.codehaus.mojo.

<pluginGroups>

    <pluginGroup>org.eclipse.jetty</pluginGroup>

 </pluginGroups>


通过代理访问外网

可以看到,我们能配置多个proxy,通过active=true来决定哪个代理生效。需要说明的是,nonProxyHosts标签指的是不需要代理的主机。比如我们访问公司内网上的私服,则完全没必要使用内网。

<proxies>

   <proxy>

     <id>optional</id>

     <active>true</active>

     <protocol>http</protocol>

     <username>proxyuser</username>

     <password>proxypass</password>

     <host>proxy.host.net</host>

     <port>80</port>

     <nonProxyHosts>local.net|some.host.com</nonProxyHosts>

   </proxy>

 </proxies>

<servers/>

配置下载和部署的主机。比如进行部署操作时,主机认证的用户名和密码可写入此文件中,避免暴露到pom文件中。

id:连接远程仓库/镜像id

privatekey:鉴权时使用的私钥位置

passphrase:鉴权时使用的私钥密码。

filePermissions

文件被创建时的权限。如果在部署的时候会创建一个仓库文件或者目录,这时候就可以使用权限(permission)。这两个元素合法的值是一个三位数字,其对应了unix文件系统的权限,如664,或者775。

directoryPermissions:目录权限

*:根据官网介绍,如果使用private key方式请忽略password标签,否则被其覆盖,即采用密码模式

<servers>

    <server>

       <id>server001</id>

       <username>my_login</username>

       <password>my_password</password>

       <privateKey>${user.home}/.ssh/id_dsa</privateKey>

       <passphrase>some_passphrase</passphrase>

       <filePermissions>664</filePermissions>

       <directoryPermissions>775</directoryPermissions>

       <configuration></configuration>

    </server>

</servers>

<mirrors/>

maven中央仓库镜像,也就是我们下载jar其他的地方,比如阿里云,或者企业自己搭建的私服,如果需要密码,则需要配置上线的server标签。这里指的注意的是mirrorOf标签,当我们配置多个镜像时,可在这里采取过滤,如*,!repo1:匹配除id为repo1的所有仓库

<mirrors>

   <mirror>

         <!-- 阿里云仓库 -->

             <id>alimaven</id>

             <mirrorOf>central</mirrorOf>

            <name>aliyun maven</name>

            <url>

          http://maven.aliyun.com/nexus/content/repositories/central/

             </url>

    </mirror>

</mirrors>

<profiles/>

根据环境调整配置。这里可以看做是全局的配置,但我们常在pom文件中配置该选项,因为具体的项目我们才知道具体的差异配置。

<profiles>

  <profile>

     <id>env-dev</id>

     <activation>

       <property>

         <name>target-env</name>

         <value>dev</value>

       </property>

     </activation>

     <properties>

       <tomcatPath>/path/to/tomcat/instance</tomcatPath>

     </properties>

   </profile>

</profiles>

<activeProfiles/>

指定激活的profile

<activeProfiles>

   <activeProfile>alwaysActiveProfile</activeProfile>

   <activeProfile>anotherAlwaysActiveProfile</activeProfile>

 </activeProfiles>

  3.3maven相关概念介绍与使用

3.3.1maven坐标与依赖

怎样才能准确的引入我们需要版本的第三方的jar呢?

答:maven通过groupId(组织Id)、artifactId(项目模块Id)、version(项目版本)、packaing(打包方式)等元素来确定一个jar。其格式如下

                     

<dependency>

   <groupId>junit</groupId>

   <artifactId>junit</artifactId>

   <version>4.12-beta-3</version>

   <!--依赖范围-->

   <scope>test</scope>

   <!--去除某个依赖-->

   <exclusions>

      <exclusions>

         <groupId></groupId>

         <artifactId></artifactId>

      <exclusions/>

   </exclusions>

</dependency>

      

 这里我们需要关注的是该jar的依赖范围,具体取值与依赖范围如下图

image

 pom路径下执行下面命令可分析项目依赖:

mvn dependency:tree  以树形式展示项目依赖

mvn dependency:analyze 分析项目依赖,有时候我们可能编译,打包不会报错,但是运行就会报错。

3.3.2maven仓库

maven仓库就是存放jar的位置,可分为远程仓库与本地仓库。

本地仓库:配置可回看settings.xml中的配置,需要注意的是一台笔记本配置一个本地仓库就好,避免资源浪费,特别是使用ide编译器,一定要将仓库设置为本地仓库位置。

远程仓库配置:可在pom文件中配置,但如果之前的mirror配置为*,那么会忽略pom中的配置,若远程仓库需要认证,则可结合settings.xml中的servers来配置账号密码,通过id来关联。

部署至远程仓库:具体配置与含义查看下表

远程仓库配置

<repositories>

   <repository>

     <id>spring-milestones</id>

     <name>Spring Milestones</name>

     <url>https://repo.spring.io/milestone</url>

   </repository>

</repositories>

部署至远程仓库

<!-- 使用分发管理将本项目打成jar包,直接上传到指定服务器 -->

 <distributionManagement>

   <!--正式版本-->

   <repository>

       <!-- nexus服务器中用户名:在settings.xml中<server>的id-->

       <id>yang</id>

       <!-- 这个名称自己定义 -->

       <name>Release repository</name>

       <url>http://192.168.1.105:8081/repository/yang/</url>

   </repository>

   <!--快照

   <snapshotRepository>

       <id>nexus-snapshots</id>

       <name>Snapshots repository</name>

       <url>http://192.168.1.105/repository/yang/</url>

   </snapshotRepository>-->

 </distributionManagement>

常见远程仓库

可下载上传需要的jar

https://mvnrepository.com

     3.3.3maven生命周期

     test生命周期

生命周期阶段

描述

pre-clean

执行一些清理前需要完成的工作

clean

清理上一次构建生成的文件

post-clean

执行清理后需要完成的工作

  default生命周期:  

生命周期阶段

描述

validate(校验)

校验项目是否正确并且所有必要的信息可以完成项目的构建过程。

initialize(初始化)

初始化构建状态,比如设置属性值。

generate-sources(生成源代码)

生成包含在编译阶段中的任何源代码。

process-sources(处理源代码)

处理源代码,比如说,过滤任意值。

generate-resources(生成资源文件)

生成将会包含在项目包中的资源文件。

process-resources (处理资源文件)

复制和处理资源到目标目录,为打包阶段最好准备。

compile(编译)

编译项目的源代码。

process-classes(处理类文件)

处理编译生成的文件,比如说对Java class文件做字节码改善优化。

generate-test-sources(生成测试源代码)

生成包含在编译阶段中的任何测试源代码。

process-test-sources(处理测试源代码)

处理测试源代码,比如说,过滤任意值。

generate-test-resources(生成测试资源文件)

为测试创建资源文件。

process-test-resources(处理测试资源文件)

复制和处理测试资源到目标目录。

test-compile(编译测试源码)

编译测试源代码到测试目标目录.

process-test-classes(处理测试类文件)

处理测试源码编译生成的文件。

test(测试)

使用合适的单元测试框架运行测试(Juint是其中之一)。

prepare-package(准备打包)

在实际打包之前,执行任何的必要的操作为打包做准备。

package(打包)

将编译后的代码打包成可分发格式的文件,比如JAR、WAR或者EAR文件。

pre-integration-test(集成测试前)

在执行集成测试前进行必要的动作。比如说,搭建需要的环境。

integration-test(集成测试)

处理和部署项目到可以运行集成测试环境中。

post-integration-test(集成测试后)

在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境。

verify (验证)

运行任意的检查来验证项目包有效且达到质量标准。

install(安装)

安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。

deploy(部署)

将最终的项目包复制到远程仓库中与其他开发者和项目共享。

site生命周期:


生命周期阶段

描述

pre-site

生成站点前需要完成的工作

site

生成站点文档

post-site

生成站点文档后需要完成的工作

site-deploy

将生成的项目站点发布到服务器上


3.3.4maven插件

  丰富maven功能,如实现源码打包功能。插件执行与绑定的maven生命周期有关。


<build>

 <plugins>

  <plugin>

   <artifactId>maven-source-plugin</artifactId>

   <version>2.1.1</version>

   <!-- 插件执行的任务 -->

   <executions>

    <execution>

          <!--任务id-->

     <id>attach-sources</id>

          <!--插件绑定的生命周期为verify阶段-->

     <phase>verify</phase>

          <!--执行的插件-->

     <goals>

      <goal>jar-no-fork</goal>

     </goals>

    </execution>

   </executions>

  </plugin>

 </plugins>

</build>

        除上线pom文件中配置插件方式外,还可采用命令行的形式配置插件如

mvn install -Dmaven.test.skip=true : 运行时跳过测试。

       插件仓库:可通过配置pluginRepositories节点来设置

3.3.5聚合与继承

聚合:兄弟模块<modules>

继承:父子模块<parent>

3.3.6maven测试

基本测试文档:maven-surefire-plugin

测试覆盖率报告:cobertura-maven-plugin

3.3.7maven构建

3.3.8maven生成项目站点

  3.4maven其他方面

3.4.1Nexus私服

3.4.2Archetype

3.4.3maven插件

4.遇到问题记录

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
7238 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
9501 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
8920 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
11017 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
11673 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
8120 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
4446 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
5824 0
+关注
SevenSun
技术创造美好生活!
23
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
《Nacos架构&原理》
立即下载
《看见新力量:二》电子书
立即下载
云上自动化运维(CloudOps)白皮书
立即下载