Maven 笔记二

一、  仓库
1、 分类
        [1]本地仓库:为当前本机电脑上的所有 Maven 工程服务。
        [2]远程仓库
        (1)私服:架设在当前局域网环境下,为当前局域网范围内的所有 Maven 工程服务。

            
        (2)中央仓库:架设在 Internet 上,为全世界所有 Maven 工程服务。
        (3)中央仓库的镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快的响应用户请求。

2、 仓库中的文件
        [1]Maven 的插件
        [2]我们自己开发的项目的模块
        [3]第三方框架或工具的 jar 包
※不管是什么样的 jar 包,在仓库中都是按照坐标生成目录结构,所以可以通过统一的方式查询或依赖。

注:为了提高下载 jar 包的效率,我们可以配置

 <mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <!--<mirrorOf>central</mirrorOf> -->
        <mirrorOf>*</mirrorOf>
    </mirror>

来通过阿里云下载 jar 包。

二、依赖
1、Maven 解析依赖信息时会到本地仓库中找到被依赖的 jar 包。
           对于我们自己开发的 Maven 工程,使用 mvn install 命令安装后就可以进入到仓库。
2、依赖的范围
    [1]compile
        对主程序有效;
        对测试程序有效;
        参与打包;

    
        [2]test
        对主程序无效;
        对测试程序有效;
        不参与打包;

        例如:junit


        [3]provided
        对主程序有效;
        对测试程序有效;
        不参与打包;
        不参与部署。

        例如:servlet - api.jar

        若 将 servlet - api.jar 依赖范围是 provided 设置成 compile,便会发生 jar 包冲突,Tomcat 自动生成的代码会出现空指针异常。


三、生命周期
1、 什么是 Maven 的生命周期?


    ① 定义了各个构建环节执行的顺序不能打乱顺序,Maven 就以此来自动化的执行构建命令。
    ② Maven 的核心程序中定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件来完成的。
    ③ Maven 核心程序为了更好的实现自动化的构建,按照这一特点执行生命周期中的各个阶段:
        无论执行哪一阶段,都会从这个生命周期最初的位置开始。
    ④ 插件和目标
        [1] 生命周期的各个阶段仅仅定义了要执行的任务是什么。
        [2] 各个阶段和插件的目标是对应的。
        [3] 相似的目标由特定的插件来完成。
    生命周期阶段         插件目标            插件
    compile                 compile            maven-compile-plugin
    test-compile         testCompile      maven-compile-plugin
        [4] 可以将目标看作 “调用插件功能的命令”。

 

2、Maven 有三套相互独立的生命周期,分别是:
    ①Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
    ②Default Lifecycle 构建的核心部分,编译,测试,打包,安装,部署等等。
    ③Site Lifecycle 生成项目报告,站点,发布站点。
    它们是相互独立的,你可以仅仅调用 clean 来清理工作目录,仅仅调用 site 来生成站点。当然你也可以
    直接运行 mvn clean install site 运行所有这三套生命周期。
    每套生命周期都由一组阶段 (Phase) 组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比
    如,运行 mvn clean,这个 clean 是 Clean 生命周期的一个阶段。有 Clean 生命周期,也有 clean 阶段。

3、 Clean 生命周期
Clean 生命周期一共包含了三个阶段:
    ① pre-clean 执行一些需要在 clean 之前完成的工作
    ② clean 移除所有上一次构建生成的文件
    ③ post-clean 执行一些需要在 clean 之后立刻完成的工作
4、 Site 生命周期
    ① pre-site 执行一些需要在生成站点文档之前完成的工作
    ② site 生成项目的站点文档
    ③ post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
    ④ site-deploy 将生成的站点文档部署到特定的服务器上

这里经常用到的是 site 阶段和 site-deploy 阶段,用以生成和发布 Maven 站点,这可是 Maven 相当强大
的功能,Manager 比较喜欢,文档及统计数据自动生成,很好看。
5、 Default 生命周期
    Default 生命周期是 Maven 生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。这里,
    只解释一些比较重要和常用的阶段:
validate
generate-sources
process-sources
generate-resources
process-resources 复制并处理资源文件,至目标目录,准备打包。
compile 编译项目的源代码。
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources 复制并处理资源文件,至目标测试目录。
test-compile 编译测试源代码。
process-test-classes
test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
prepare-package
package 接受编译好的代码,打包成可发布的格式,如 JAR。
pre-integration-test
integration-test
post-integration-test
verify
install 将包安装至本地仓库,以让其它项目依赖。
deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享或部署到服务器上运行。

四、在 Eclipse 中使用 Maven
      ① Maven 插件:Eclipse 内置
      ② Maven 插件的设置
        [1]installations: 指定 Maven 核心程序的位置.

        

        [2]user settings: 指定conf/settings.xml 的位置,进而获取本地仓库的位置。

      ③基本操作

        Window --> Prespective --> Customize --> Menu Visibility -->File-->New-->Maven Project

    

设置后 Maven Project 就可以直接 new 出来而无需去 Other.. 中找。
        [1] 创建 Maven 版的 java 工程
        [2] 创建 Maven 版的 Web 工程

            通过Maven 插件创建 Maven 工程        
       [3] 执行 Maven 命令
            Run As

注:部署 Tomcat 时记得将 Deploy path: 改为与你当前 web 项目相同的 webapps.

[4] 通过 Maven 方式导入手动创建不被 eclipse 承认为 Java Project 的 Mavan 项目。

五、依赖(高级)
   1、 依赖的传递性

    [1]好处:可以传递的依赖不必每个模块工程中都重复声明,
        在“最下面的”工程中依赖一次即可。
        即,C 依赖于 B, B 依赖于 A,则在 A中声明,则 B 与 C  都可用。

    查看直接依赖关系
   

查看依赖层次关系

[2]注意:非 compile 范围的依赖不能传递。所有在各个模块中,如果有需要就得重复声明。

2、依赖的排除

       [1]、应用情景,假设commons-logging 是一个不稳定的 jar 包;或者是同事写的,我无法修改的 jar 包。此时我要将其排除。

        [2]、方法:

此时所有版本的 commons-logging 都会被排除。该 jar 包坐标可通过右键下图选中位置,选择 Open POM 查看。

    [

    [3]、特点:
    C 依赖于 B,B 依赖于 A,
    此时 jar 包在 A 中引用并传递给 B 与 C,则在 C 中使用依赖排除,对 A 与 B 无影响,在 A中使用 依赖排除,B 与 C 同时被排除。
    所以在依赖传递的时候, 依赖排除可以中断设置依赖排除的模块之后的依赖传递。

 

3、依赖的原则
   [1]、作用:解决依赖传递时,模块之间的 jar 包冲突的问题。
   [2]、路径最短者优先原则

    
   [3]、路径相同时,先声明者优先。

    
4、统一管理依赖的版本
        [1]、问题:

    这里对 Spring 各个 jar 包统一升级为最新版本,该怎么办?

    [2]、建议配置方式(自定义标签统一声明版本号)。

    

            在需要统一版本的位置,使用  ${ 自定义标签名 } 引用声明的版本号

    

    

六、继承
   1、现状:
      A 依赖的 junit:4.0
      B 依赖的 junit:4.0
      C 依赖的 junit:4.9
    由于 test 范围的依赖不能传递,所以必然会分散在各个模块的工程中,
    很容易造成版本不一致。

    2、需求:统一管理各个模块工程中对 junit 依赖的版本。
    3、解决思路:
    将 junit 依赖统一提取到 "父工程中",在子工程中声明 junit 依赖时不指定版本。
    以父工程中统一设定的为准,也方便修改。

    4、操作步骤:
    [1]、创建一个 Maven 工程作为父工程。注意:打包方式 pom.

             
    [2]、在子工程中声明对父工程的引用

    
    [3]、将子工程的坐标与父工程坐标中重复的内容删除
    [4]、在父工程中统一 junit 依赖

    
    [5]、在子工程中删除 junit 依赖的版本号部分。

    [6]、配置继承后,安装时要先安装父工程。

 

七、聚合

      1、  为什么要使用聚合?
            将多个工程拆分为模块后,需要手动逐个安装到仓库后依赖才能够生效。修改源码后也需要逐个手   动进行 clean 操作。而使用了聚合之后就可以批量进行 Maven 工程的安装、清理工作
    2、作用:一键安装各个模块工程。
    3、配置方式:在 一个 “总的聚合工程” 中配置各个参数与聚合的模块。

    4、使用方式:在聚合工程的 pom.xml 上点右键 --> run as --> maven install


   八、Maven Web 工程的自动部署此处 (了解一下)

            使用自动化部署适合 命令行 中mvn deploy, 而不适合在 eclipse -->run as-->deploy.

     <!-- 配置当前工程构建过程中的特殊设置 -->
  <build>
    <finalName>springmvcdemo01</finalName>
        <!-- 配置构建工程中需要使用的插件 -->
        <plugins>
            <plugin>
                <!-- cargo 是一家专门从事 “启动  Servlet 容器”的组织 -->
                <groupId>org.codehaus.cargo</groupId>
                <artifactId>cargo-maven2-plugin</artifactId>
                <version>1.2.3</version>
                    <!-- 针对插件进行配置-->
                <configuration>
                    <!-- 配置当前系统中容器的位置 -->
                    <container>
                        <containerId>tomcat9x</containerId>
                        <home>D:\Tomcat9.0\apache-tomcat-9.0.0.M21-windows-x64\apache-tomcat-9.0.0.M21</home>
                    </container>
                    <configuration>
                        <type>existing</type>
                        <home>D:\Tomcat9.0\apache-tomcat-9.0.0.M21-windows-x64\apache-tomcat-9.0.0.M21</home>
                        <!-- 如果Tomcat端口为默认值8080则不必设置该属性 -->
                        <properties>
                            <cargo.servlet.port>8080</cargo.servlet.port>
                        </properties>
                    </configuration>
                </configuration>
                    <!-- 配置插件在什么情况下执行 -->
                <executions>  
                    <execution>  
                        <id>cargo-run</id>  
                            <!-- 生命周期的阶段 -->
                        <phase>install</phase>  
                        <goals>  
                            <!-- 插件的目标 -->
                            <goal>run</goal>  
                        </goals>  
                    </execution>  
                </executions>
            </plugin>
        </plugins>
    </build>

 

九、 Maven 酷站
我们可以到 http://mvnrepository.com/搜索需要的 jar 包的依赖信息。

 

 

 

 

转载于:https://my.oschina.net/u/3387637/blog/906258

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值