Maven入门--基础篇

来源:互联网 发布:仿真软件下载fxtrn 编辑:程序博客网 时间:2024/06/05 10:56

本博目录:

    • 一 什么是Maven
    • 二 Maven的安装及配置
    • 三 Maven详解
      • 1 Maven坐标
      • 2 maven依赖
      • 3 maven仓库
        • 3-1 远程仓库的配置
        • 3-2 远程仓库的认证
        • 3-3 部署到远程仓库
      • 4 Maven生命周期和插件
        • 4-1Maven生命周期
        • 4-2Maven插件
    • 四 maven常用命令

很早就在项目中接触过Maven,但对Maven没有很深入的了解,犹如《西游记》中五庄观偷吃人参果的猪悟能,囫囵吞食,不知其味。在拜读了《Maven 实战》之后,对Maven有了一定的了解,特记录一些知识如下。

一、 什么是Maven?

Maven这个词可以翻译为“知识的积累”,也可以翻译为“专家”或“内行”。Maven作为跨平台的项目管理工具,最重要的用途—->”服务于构建”,能够帮助我们自动化构建过程,从清理、编译、测试到生成报告、再到打包和部署。

二、 Maven的安装及配置

Maven的安装教程,自己可百度安装即可,在这就不赘述了。apache-maven-3.1.0/conf目录中有一个settings.xml文件,我们来剖析下Maven配置文件settings.xml,内容如下代码:

 <?xml version="1.0" encoding="UTF-8"?><settings    xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"    xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><!--̹本地仓库地址-->    <localRepository>C:\chao\repository</localRepository><!--servers配置认证信息,如下表示:连接id为nexus-snapshots的远程仓库的用户名和密码-->    <servers>     <server>          <id>nexus-snapshots</id>          <username>swc</username>          <password>swc123</password>      </server>      <server>          <id>nexus-releases</id>          <username>swc</username>          <password>swc123</password>      </server>    <server>        <id>tomcat7</id>        <username>swc</username>        <password>swc</password>    </server>    <!-- 结合私服,使用镜像代替中央仓库-->   <mirrors>        <mirror>            <id>nexus</id>            <mirrorOf>*</mirrorOf><!-- 匹配所有远程仓库-->            <name>internal nexus repository</name>              <url>http://loaclhost:8081/nexus/content/groups/public/</url>                   </mirror>    </mirrors>      <proxies>   <!-- 公司设置代理上网,就要在此配置HTTP 代理-->        <proxy>            <id>petrochina</id>            <active>true</active><!-- 激活代理-->            <protocol>http</protocol>            <host>10.22.96.29</host>            <port>8080</port>            <nonProxyHosts>10.*|*.com|*.cnpc|*.local</nonProxyHosts>            <!--            <username></username>            <password></password>            -->        </proxy>    </proxies></settings>

(附:Maven安装包下载地址:http://pan.baidu.com/s/1qYG8jEk)

三、 Maven详解

Maven项目中默认的主代码目录是src/main/java,默认的测试代码目录是src/test/java,任何一个maven项目都需要定义自己的坐标,当这个maven项目作为其他maven项目的依赖时,这组坐标就体现了其价值,。

3.1 Maven坐标

Maven定义了这样一组规则:世界上任何一个构件(任何一个依赖、插件或者项目构建的输出,都称之为构件)都可以使用Maven坐标唯一标示。Maven坐标的元素包括:groupId、artfactId、version、packaging、classifier。例如下面就是Mysql驱动的坐标:

       <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>            <version>5.1.31</version>        </dependency>

参数说明:
groupId:定义当前Maven项目隶属的实际项目
artfactId:该元素定义实际项目中的一个Maven项目
version:该元素定义Maven项目当前所处的版本
packaging:该元素定义Maven项目的打包方式,(jar或war)默认是jar
classifier:该元素用来帮助定义构建输出的一些附属构件

3.2 maven依赖

一个依赖声明可以包含以下一些元素:

<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>...</modelVersion>    <groupId>...</groupId>    <artifactId>...</artifactId>    <version>...</version>    <name>...</name>    <packaging>...</packaging>    <description>...</description>    <dependencies>        <dependency>            <groupId>...</groupId>            <artifactId>...</artifactId>            <version>...</version>            <scope>...</scope>            <optional>...</optional>            <exclusions>                <exclusion>                    <groupId>...</groupId>                    <artifactId>...</artifactId>                </exclusion>            </exclusions>        </dependency></project>

参数说明:
groupId、artfactId和version是Maven坐标的基本元素
type:依赖的类型
scope:依赖的范围。依赖范围就是用来控制依赖与(编译classpath、测试classpath、运行classpath的关系,包括compile、test、provided、runtime、system、import。 Maven会解析各个直接依赖的POM,将那些必要的间接依赖,以传递性依赖的形式引入到当前的项目中。
optional:标记依赖是否可选。
exclusions:用来排除传递性依赖。

3.3 maven仓库

Maven可以在某个位置统一存储所有Maven项目共享的构件,这个统一的位置就是仓库。

对于Maven来说,仓库可以分为两类:本地仓库和远程仓库,如图所示。当Maven根据坐标寻找构件的时候,它首先会查看本地仓库,如果本地仓库有此构件,则直接使用;如果没有,或者需要查看是否有更新的构件版本,Maven就会到远程仓库查找,找到构件下载到本地再使用。

这里写图片描述

中央仓库是Maven核心自带的的远程仓库。

私服是一种特殊的远程仓库,是在局域网内架设私有的仓库服务器。用其代理所有外部的远程仓库,供局域网内的Maven用户使用,从而降低中央仓库的负荷。

3.3-1 远程仓库的配置

    <repositories>        <repository>            <id>nexus-snapshots</id>            <name>Nexus</name>            <url>http://localhost:8081/nexus/content/groups/public/</url>                        <releases>                <enabled>true</enabled>                <updatePolicy>daily</updatePolicy>                <checksumPolicy>ignore</checksumPolicy>            </releases>            <snapshots>                <enabled>true</enabled>            </snapshots>        </repository>    </repositories>

参数说明
releases的值为true,表示开启Nexus仓库的发布版本下载支持
snapshots的值为true,表示开启Nexus仓库的快照版本下载支持
updatePolicy配置从远程仓库检查更新的频率,有never/always/interval:x,默认是daily
checksumPolicy配置Maven检查检验和文件的策略,其值为:warn/fail/ignore,默认是warn。

3.3-2 远程仓库的认证

大部分远程仓库无须认证就可以访问,但出于安全考虑,我们需要提供认证信息才能访问一些远程仓库。Maven使用settings.xml文件中的server元素配置仓库认证信息。

    <servers>     <server>          <id>nexus-snapshots</id>          <username>swc</username>          <password>swc123</password>      </server>      <server>          <id>nexus-releases</id>          <username>swc</username>          <password>swc123</password>      </server>    <server>        <id>tomcat7</id>        <username>swc</username>        <password>swc</password>    </server>    </servers>

3.3-3 部署到远程仓库

Maven除了能对项目进行编译、测试和打包之外,也可将项目生成的构建部署到仓库中。在pom文件中配置如下,在命令行运行mvn clean deploy Maven就会将项目构建输出的构建部署到配置对应的远程仓库。

    <distributionManagement>        <repository><!--发布版本构件的仓库 -->            <id>nexus-releases</id>            <name>Nexus Release Repository</name>            <url>http://localhost:8081/nexus/content/repositories/releases/</url>        </repository>        <snapshotRepository><!--快照版本构件的仓库 -->            <id>nexus-snapshots</id>            <name>Nexus Snapshots Repository</name>            <url>http://localhost:8081/nexus/content/repositories/snapshots/</url>        </snapshotRepository>    </distributionManagement>

3.4 Maven生命周期和插件

3.4-1Maven生命周期

Maven的生命周期包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有的构建步骤,生命周期是抽象的,不做任何实际的工作,都交由插件来完成。

这里写图片描述

Maven拥有三套相互独立的生命周期:clean(清理项目)、default(构建项目)、site(建立项目站点)。在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行。
clean生命周期一共包含了三个阶段:

pre-clean  执行一些clean之前完成的工作clean  清理上一次构建生成的文件post-clean  执行一些clean之后完成的工作

Maven的最重要的default生命周期,绝大部分工作都发生在这个生命周期中。

validateinitializegenerate-sourcesprocess-sourcesgenerate-resources process-resources     #处理项目主资源文件,一般来说,是对src/main/resources目录内容复制到项目输出的classpath目录中。compile    # 编译项目的源代码。一般来说,是编译src/main/java目录下的java文件至项目输出的classpath目录中。process-classes generate-test-sources process-test-sources  #处理项目测试资源文件一般来说,是对src/test/resources目录内容复制到项目输出的classpath目录中。generate-test-resourcesprocess-test-resources     #复制并处理资源文件,至目标测试目录。test-compile     #编译测试源代码。一般来说,是编译src/test/java目录下的java文件至项目输出的classpath目录中。process-test-classes test     #使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。prepare-packagepackage     #接受编译好的代码,打包成可发布的格式,如 JAR 。pre-integration-testintegration-testpost-integration-testverify install     #将包安装至Maven本地仓库,供本地其它项目依赖。deploy     #将最终的包复制到远程仓库,以让其它开发人员与项目共享。

Site生命周期的各个阶段:

pre-site     执行一些需要在生成项目站点之前完成的工作site    生成项目的站点文档post-site     执行一些需要在生成项目站点之后完成的工作,并且为部署做准备site-deploy     将生成的项目站点部署到特定的服务器上

3.4-2Maven插件

在pom文件中配置插件仓库,

    <pluginRepositories>        <pluginRepository>            <id>nexus</id>            <name>Nexus</name>            <url>http://localhost:8081/nexus/content/groups/public/</url>            <releases>                <enabled>true</enabled>            </releases>            <snapshots>                <enabled>false</enabled>            </snapshots>        </pluginRepository>    </pluginRepositories>

添加插件配置

    <build>      <!-- 插件列表 -->        <finalName>${project.name}</finalName>        <plugins>            <!-- compiler插件, 设定JDK版本 -->            <plugin>                <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-compiler-plugin</artifactId>                <version>3.1</version>                <configuration>                    <source>1.8</source>                    <target>1.8</target>                    <encoding>utf-8</encoding>                    <compilerArgument>-Xlint:all</compilerArgument>                    <showWarnings>false</showWarnings>                    <showDeprecation>false</showDeprecation>                </configuration>            </plugin>            <plugin>                <groupId>org.eclipse.jetty</groupId>                <artifactId>jetty-maven-plugin</artifactId>                <version>9.2.1.v20140609</version>                <configuration>                    <httpConnector>                        <port>8080</port>                    </httpConnector>                    <webAppConfig>                        <contextPath>/${project.name}</contextPath>                    </webAppConfig>                </configuration>            </plugin>        </plugins>    </build>

四 、maven常用命令

mvn dependency:list 了解项目中所有依赖的基本信息
mvn dependency:tree 生成依赖树,查看依赖信息。
maven clean:清理上一次构建生成的文件。
mvn test 运行测试
mvn compile 编译项目
mvn deploy:将项目构建输出的构件部署到配置对应的远程仓库。
mvn install 将项目的构建输出文件安装到本地仓库。
mvn package -Dmaven.test.skip=ture 打包时跳过测试