Maven入门--基础篇

本博目录:

    • 一 什么是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,内容如下代码:

 
<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\repositorylocalRepository>


    <servers>
     <server>  
        <id>nexus-snapshotsid>  
        <username>swcusername>  
        <password>swc123password>  
    server> 
     <server>  
        <id>nexus-releasesid>  
        <username>swcusername>  
        <password>swc123password>  
    server>
    <server>
        <id>tomcat7id>
        <username>swcusername>
        <password>swcpassword>
    server>

    
   <mirrors>
        <mirror>
            <id>nexusid>
            <mirrorOf>*mirrorOf>
            <name>internal nexus repositoryname>  
            <url>http://loaclhost:8081/nexus/content/groups/public/url>           
        mirror>
    mirrors>  
    <proxies>

   
        <proxy>
            <id>petrochinaid>
            <active>trueactive>
            <protocol>httpprotocol>
            <host>10.22.96.29host>
            <port>8080port>
            <nonProxyHosts>10.*|*.com|*.cnpc|*.localnonProxyHosts>
            
        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>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <version>5.1.31version>
        dependency>

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

3.2 maven依赖

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

"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">
    ...
    ...
    ...
    ...
    ...
    ...
    ...

    
        
            ...
            ...
            ...
            ...
            ...
            
                
                    ...
                    ...
                
            
        

参数说明:
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入门--基础篇_第1张图片

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

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

3.3-1 远程仓库的配置

    <repositories>
        <repository>
            <id>nexus-snapshotsid>
            <name>Nexusname>
            <url>http://localhost:8081/nexus/content/groups/public/url>            
            <releases>
                <enabled>trueenabled>
                <updatePolicy>dailyupdatePolicy>
                <checksumPolicy>ignorechecksumPolicy>
            releases>
            <snapshots>
                <enabled>trueenabled>
            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-snapshotsid>  
        <username>swcusername>  
        <password>swc123password>  
    server> 
     <server>  
        <id>nexus-releasesid>  
        <username>swcusername>  
        <password>swc123password>  
    server>
    <server>
        <id>tomcat7id>
        <username>swcusername>
        <password>swcpassword>
    server>
    servers>

3.3-3 部署到远程仓库

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

    <distributionManagement>
        <repository>
            <id>nexus-releasesid>
            <name>Nexus Release Repositoryname>
            <url>http://localhost:8081/nexus/content/repositories/releases/url>
        repository>
        <snapshotRepository>
            <id>nexus-snapshotsid>
            <name>Nexus Snapshots Repositoryname>
            <url>http://localhost:8081/nexus/content/repositories/snapshots/url>
        snapshotRepository>
    distributionManagement>

3.4 Maven生命周期和插件

3.4-1Maven生命周期

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

Maven入门--基础篇_第2张图片

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

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

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

validate
initialize
generate-sources
process-sources
generate-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-resources

process-test-resources     
#复制并处理资源文件,至目标测试目录。
test-compile     
#编译测试源代码。一般来说,是编译src/test/java目录下的java文件至项目输出的classpath目录中。
process-test-classes 

test     
#使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
prepare-package
package     
#接受编译好的代码,打包成可发布的格式,如 JAR 。
pre-integration-test
integration-test
post-integration-test
verify 

install     
#将包安装至Maven本地仓库,供本地其它项目依赖。
deploy     
#将最终的包复制到远程仓库,以让其它开发人员与项目共享。

Site生命周期的各个阶段:

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

3.4-2Maven插件

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

    <pluginRepositories>
        <pluginRepository>
            <id>nexusid>
            <name>Nexusname>
            <url>http://localhost:8081/nexus/content/groups/public/url>
            <releases>
                <enabled>trueenabled>
            releases>
            <snapshots>
                <enabled>falseenabled>
            snapshots>
        pluginRepository>
    pluginRepositories>

添加插件配置

    <build>      
        <finalName>${project.name}finalName>
        <plugins>
            
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-compiler-pluginartifactId>
                <version>3.1version>
                <configuration>
                    <source>1.8source>
                    <target>1.8target>
                    <encoding>utf-8encoding>
                    <compilerArgument>-Xlint:allcompilerArgument>
                    <showWarnings>falseshowWarnings>
                    <showDeprecation>falseshowDeprecation>
                configuration>
            plugin>
            <plugin>
                <groupId>org.eclipse.jettygroupId>
                <artifactId>jetty-maven-pluginartifactId>
                <version>9.2.1.v20140609version>
                <configuration>
                    <httpConnector>
                        <port>8080port>
                    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 打包时跳过测试

你可能感兴趣的:(maven)