Maven基础

1、maven简介
maven是跨平台的项目管理工具,主要功能项目构建、依赖管理、项目信息管理。
项目构建:以指令的方式执行编译源码、测试程序、生成文档、打包和部署等工作
依赖管理:自动管理项目依赖的构件(类库,插件等)
项目信息管理:可以轻松生成项目文档、测试报告等(可能要借助一些插件)

2、maven的配置
系统级配置文件:安装目录下的conf/settings.xml文件
用户级配置文件:~/.m2/settings.xml文件
项目级配置文件:项目根目录下的pom.xml文件

公司内网出于安全考虑,可能需要配置代理来访问外部仓库,一般代理配置在~/.m2/settings.xml文件
<settings>
......
    <proxies>
        <proxy>
            <id>my_proxy</id>
            <active>true/false</active>   激活(true)该代理,如果有多个代理,默认第一个被激活的代理将生效
            <protocol>http</protocol>
            <host>218.14.227.197</host>
            <port>3128</port>
            <!--                   若代理要求认证,则需要以下信息
            <username>******</username>
            <password>******</password>
            <nonProxyHosts>repository.mycom.com|*.google.com</nonProxyHosts>  指代哪些网站可以直接访问,不需要代理
            -->
        </proxy>
    </proxies>
......
</settings>

3、maven入门
a.项目目录结构
主代码:src/main/java
资源代码:/src/main/resources
测试代码:src/test/java
资源代码:src/test/resources

b.生成项目框架
maven3: mvn archetype:generate   
maven2: mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-5:generate
注意:maven3会自动解析maven-archetype-plugin插件的最新稳定版本,所以可以省略掉插件版本,直接使用“插件前缀+插件目标”即可
maven2会去下载最新版本的插件,很可能是不稳定的SNAPSHOT版本,所以适用maven2生成项目框架,最好写全面一些

c.属性定义
<properties>
    <propertie_name>propertie_value</propertie_name>    --->     使用${propertie_name}
</properties>

d.命令调用
mvn phase1 phase2
mvn perfix:goal


4、坐标与依赖
a.坐标详解
每个构建(依赖或插件)都需要一个坐标,通过坐标以及仓库的布局方式即可定位出构建的位置
<groupId>org.apache.spark</groupId>       当前模块(项目)隶属的实际项目名
<artifactId>spark-core_2.11</artifactId>  当前项目名
<version>2.1.0</version>                  版本号
<packaging>jar/war</packaging>            定义本项目打包方式,默认jar
<classifier> </classifier>                定义输出的附属构件,比如javadoc(包含文档)、sources(包含源码)不能直接定义
<name>DuJian</name>                       执行mvn指令时,输出中会显示该名字

b.依赖配置
<dependencies>
    <dependency>
        <groupId>******</groupId>
        <artifactId>******</artifactId>
        <version>******</version>
        <type>jar/war</type>                          此依赖的打包类型,默认值为jar
        <scope>provided/test/runtime/compile</scope>  依赖可用的范围,即依赖可以在哪些地方可用(编译主代码、编译运行测试代码、运行主代码),间接依赖(传递性依赖)的范围参考相关书籍
        <option>true/false</option>                   标记依赖是否可选,可选依赖的依赖项不会传递到当前项目中
        <exclusions>                                  排除该依赖的依赖项
            <exclusion>
                <groupId>******</groupId>
                <artifactId>******</artifactId>
            </exclusion>
        </exclusions>                                 排除一些版本不稳定的依赖(排除后需要自己显示定义稳定版本的依赖)
    <dependency>
<dependencies>
注意:
依赖调解的原则:1、路径最近者优先  2、第一声明者优先
maven会解析各个直接依赖的pom,将那些必要的间接依赖,以依赖传递性的形式引入到当前的项目中,若依赖是可选的,则会切断传递性依赖。

c.依赖优化
mvn dependency:list  ========> maven-dependency-plugin:2.8:list  查看当前项目已解析的依赖项以及依赖范围
mvn dependency:tree  ========> maven-dependency-plugin:2.8:tree  查看当前项目的依赖树,了解依赖引入的路径
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-source-plugin:2.1.1 -Ddetail  查看插件信息
mvn -h  mvn 指令的使用手册
注意:dependency、help都是插件前缀

8、仓库
仓库:可配置在pom.xml或者settings.xml
布局:依赖在仓库中的存储路径,default是groupId/artifactId/version/artifactId-version.packaging
<project>
......
    <repositories>
        <repository>
            <id>******</id>         仓库唯一标识,若为central,则会覆盖掉中央仓库
            <name>******</name>     仓库名字
            <url>******</url>       
            <layout>******</layout> 仓库布局,布局决定了依赖在此仓库中的路径
            <snapshots>
                <enabled>false</enabled>                         不从该仓库下载快照版本的依赖
                <updatePolicy>daily/never/always</updatePolicy>  从远程仓库检查更新的频率
                <checksumPolicy>ignore/warn/fail</checksumPolicy>  
            </snapshots>
            <releases>
                <enabled>true</enabled>                          从该仓库下载发布版本的构件
                <updatePolicy>daily</updatePolicy>  
                <checksumPolicy>ignore</checksumPolicy>
            </releases>
        </repository>
    </repositories>
......
</project>

仓库的认证信息(只能在setting中设置)
<settings>
......
<servers>
    <server>
        <id>******</id>  必须与仓库配置中repository元素中的id对应
        <username>******</username>
        <password>******</password>
    </server>
</servers>
......
</settings>
        
将构件部署到远程仓库
mvn deploy  安装到本地仓库并部署到远程仓库   
mvn install 安装到本地仓库

<project>
......
    <distributionManagement>
        <repository>******</repository>           发布版本构件的部署仓库
            <id>******</id>
            <name>******</name>
            <url>******</url>
        </repository>
        <snapshotsRepository>                    快照版本的构件部署仓库
            <id>******</id>
            <name>******</name>
            <url>******</url>
        </snapshotsRepository>    
    </distributionManagement>
......
</peoject>
注意:往远程仓库部署构建,可能也需要认证,方法同上

镜像:如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像
<settings>
......
    <mirrors>
        <mirror>
            <id>******</id>
            <name>******</name>
            <url>******</url>
            <mirrorOf>******</mirrorOf>      关联的仓库的id,例如central
        /<mirror>
    </mirrors>
......
</settings>

9.生命周期(包含很多阶段phase)与插件(包含很多目标goal)
生命周期的有些阶段绑定了默认的插件目标

生命周期与插件目标的内置(默认)绑定关系(以jar打包方式为例):
    clean:
        pre-clean    
        clean                    maven-clean-plugin:clean
        post-clean
    default:
        validate    
        initialize
        
        generate-sources
        process-sources
        generate-resources
        process-resources       maven-resources-plugin:resources
        
        compile                    maven-compile-plugin:compile
        process-classes
        
        generate-test-sources
        process-test-sources
        generate-test-resources
        process-test-resources  maven-resources-plugin:testResources
        
        test-compile            maven-compile-plugin:testCompile
        process-test-classes
        
        test                    maven-surefire-plugin:test
        
        prepare-package
        package                 maven-jar-plugin:jar
        
        pre-integration-test
        integration-test
        post-integration-test
        verity     
        install                 maven-install-plugin:install
        deploy                  maven-deploy-plugin:deploy
    site:
        pre-site
        site                   maven-site-plugin:site
        post-site          
        site-deploy            maven-site-plugin:deploy
生命周期与插件目标的自定义绑定关系:比如将maven-source-plugin插件的jar-no-fork目标绑定到verify阶段,以生成项目的源码jar包
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>2.1.1</version>
            <executions>
                <execution>                        代表一个任务:phase+goal
                    <id>attach-source</id>
                    <phase>verify</phase>
                    <goals>
                        <goal>jar-no-fork</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

插件配置:
1、命令行配置
2、全局配置
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compile-plugin</artifactId>
                <version>2.1</version>
                <configuration>               此配置对插件的所有目标都适用,所以影响到适用该目标的所有阶段
                    <source>1.5</source>
                    <target>1.5</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
3、任务配置
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compile-plugin</artifactId>
                <version>2.1</version>
                <executions>
                    <execution>
                        <id>ant-validate</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>               此配置对插件的run目标+validate阶段适用
                            <tasks>
                                <echo>I am bound to validate phase.</echo>
                            </tasks>
                        </configuration>
                    </execution>
                    <execution>
                        <id>ant-verify</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>               此配置对插件的run目标+verify阶段都适用
                            <tasks>
                                <echo>I am bound to validate phase.</echo>
                            </tasks>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

12、插件仓库:
    <pluginRepositories>
        <pluginRepository>
            <id>******</id>
            <name>******</id>
            <url>******</url>
            <layout>default</layout>
            <snapshots>
                <enabled>true/false</enabled>
            </snapshots>
            <releases>
                <enabled>true/false</enabled>
                <updatePolicy>never</updatePolicy>
            </releases>
        </pluginRepository>
    </pluginRepositories>
    
maven-clean-plugin:2.5:clean
maven-resources-plugin:2.6:resources
maven-compiler-plugin:3.1:compile
maven-resources-plugin:2.6:testResources
maven-compiler-plugin:3.1:testCompile
maven-surefire-plugin:2.12.4:test 
maven-jar-plugin:2.4:jar
maven-shade-plugin:1.2.1:shade
maven-install-plugin:2.4:install 

-----------------------------------------------------------
maven-clean-plugin:2.5:clean                maven-clean-plugin:2.5:clean    
maven-resources-plugin:2.6:resources        maven-resources-plugin:2.6:resources
maven-compiler-plugin:3.6.0:compile         maven-compiler-plugin:3.1:compile 
maven-scala-plugin:2.15.2:compile ----------maven-scala-plugin:2.15.2:compile
maven-resources-plugin:2.6:testResources    maven-resources-plugin:2.6:testResources
maven-compiler-plugin:3.6.0:testCompile     maven-compiler-plugin:3.1:testCompile
maven-scala-plugin:2.15.2:testCompile ------maven-scala-plugin:2.15.2:testCompile
maven-surefire-plugin:2.12.4:test           maven-surefire-plugin:2.12.4:test
maven-jar-plugin:2.4:jar                    maven-jar-plugin:2.4:jar
maven-shade-plugin:3.2.0:shade              maven-shade-plugin:1.2.1:shade
maven-install-plugin:2.4:install            maven-install-plugin:2.4:install

--------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值