zoukankan      html  css  js  c++  java
  • .Net转Java自学之路—Maven篇

    Maven:

      Maven是Apache公司开源项目。是一个项目构建工具。用来依赖管理。

      同样的项目,使用Maven开发项目相对于传统方式开发项目占用的空间要小,因为Maven项目没有Jar包信息。因为Maven项目的Jar包信息都在Jar包仓库(又称Maven仓库)中。

      Maven查找Jar包的过程主要的核心就是依赖管理。当Maven项目中需要某一个Jar包,只需要在Maven项目中配置需要Jar包坐标信息。Maven程序根据Jar包坐标信息去Jar包仓库中去查找Jar包。

      坐标信息实例:struts2-core-2.3.24.jar Apache(公司名称/域名)+struts2(项目名称)+2.3.24(版本信息)

      好处:

        1、不再拷贝jar包。项目不需要存放jar包。导致项目源代码体积小。
        2、使用maven开发的项目,若环境统一导入别的maven的项目不会报错。
        3、代码耦合度进一步降低。
        4、方便项目进行升级。
        5、节省人力成本。

      优势如何实现:

        Maven的俩大核心:
          依赖管理:对jar包进行管理的过程。
          项目构建:项目在编码完成后,对项目进行编译、测试、打包、部署一系列的操作都是通过命令来实现。

        通过maven命令将web项目发布到tomcat:
          1、cmd命令行进入该发布项目的根目录。
          2、运行命令:mvn tomcat:run

      配置:

        配置环境变量:
          变量名:MAVEN_HOME
          变量值:指定到maven解压后的根目录。
          将maven_home环境变量配置到path变量中。

        配置本地仓库:
          在maven中的setting.xml中配置:

    <localRepository>jar包仓库根目录</localRepository>

        maven项目核心配置文件:pom.xml

      Maven的cmd常用命令:

        clean:清理。mvn clean 去除项目中根目录的target目录。
        compile:编译。mvn compile 将编译完成的.class文件存放在项目根目录的target下。
        test:单元测试。mvn test 将项目根目录下的src/test/java中的单元测试类全部执行。在src/test/java下的类名有XXXTest.java的要求。
        package:打包。mvn package 将项目打包,打包项目根目录下的target目录。
        install:安装。解决本地多个项目公用一个jar包。mvn install 打包并放在jar包本地仓库。

      Maven项目生命周期:

        在maven中存在”三套“生命周期,每一套生命周期都是相互独立的,互不影响。在一套生命周期内,执行后面的命令前面命令会自动执行。

        CleanLifeCycle:清理生命周期。clean命令
        defaultLifeCycle:默认生命周期。compile、test、package、install、deploy命令
        siteLifeCycle:站点生命周期。site命令

      配置Eclipse中的Maven环境:

        1、配置m2e插件,Mars2版本自带maven插件。
        2、配置maven程序:
          window >> preferences >> Maven >> Installations >> Add >> 单击Directory选择解压的maven安装包.OK >> 勾选配置的maven >> OK
        3、配置userSetting,让eclipse知道本地仓库的位置:
          window >> preferences >> Maven >> User Settings >> 在User Settings中选择解压maven的安装包的conf/settings.xml配置文件。
        4、构建索引:
          window >> show view >> maven Repository >> 右击Local Repository(路径) >> Rebuild Index 来构建索引

      创建Maven项目:

        创建Maven项目后,勾选Create a simple project ,group id 域名、Artifact Id 项目名、Version 版本。Maven项目建好之后在src/main/webapp下会缺失WEB-INF/web.xml文件,需要手动创建。在pom.xml中设置编译版本。然后 右击项目名 >> maven >> update project >> 选择当前项目 >> OK 会指定编译版本。

      查找依赖:

        项目建立完成后,需要查找依赖(就是jar包):打开pom.xml,选择Dependencies >> Add >> 选择版本,添加依赖(jar包)。

      依赖范围:

        依赖范围:默认值 complie。
          complie:作用在在编译、测试、运行期间。
          test:作用在测试期间。
          provided:作用在编译、测试期间。
          runtime:作用在测试、运行期间。
          system:作用在编译、测试期间。

        运行就是部署到tomcat。如果使用到tomcat自带jar包,需要将项目中依赖作用范围设置为provided。

      运行Maven:

        右击项目>>run as/debug as >> maven build...
        然后在Goals中手动输入运行命令tomcat:run。而在debug as调试运行时,在该界面需要选择source选项关联下源码才能调试:
          source >> Add >> project >> 选择调试的项目 >> OK 

      传递依赖冲突解决:

        传递依赖:A(项目)依赖B(jar包),B依赖C(jar包),那么B就是A的直接依赖,C是A的传递依赖。若导入依赖D,D依赖C,B和D依赖的C版本不同。则会造成版本依赖冲突。

        Maven调解原则:
          1、第一声明者优先原则:使用先声明定义的传递依赖。
          2、路径近者优先原则:直接依赖级别高与传递依赖。

        Maven排除依赖:
          在pom.xml中选择Dependency Hierarchy >> 右击要排除的依赖 >> Exclude Maven Artifact... >> OK 

        Maven版本锁定:
          指定项目中依赖的版本。

    <!-- 属性 -->
    <properties>
        <test.version>版本号</test.version>
    </properties>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId></groupId>
                <artifactId></artifactId>
                <!-- OGNL表达式 -->
                <version>${test.version}</version>
            </dependency>
            <dependency>
                <groupId></groupId>
                <artifactId></artifactId>
                <!-- 也可以直接指定版本号 -->
                <version>x.x.x</version>
            </dependency>
            ......
        </dependencies>
    </dependencyManagement>

      通过Maven对项目进行拆分、聚合:

        创建maven父工程:
          1、在父工程中只有pom.xml文件,父工程不进行编码。
          2、项目中需要的依赖信息,只需要在父工程中定义,子模块继承。
          3、将创建好的父工程发布到本地仓库。若父工程未发布到本地仓库,那么在发布子工程时会报错。

        单元测试:
          批量加载Spring配置文件:
            classpath:applicationContext.xml 加载本项目的指定配置文件。
            classpath:applicationContext-*.xml 加载本项目中以applicationContext-开头的配置文件。
            classpath*:applicationContext-*.xml 加载本项目和依赖包中所有以applicationContext-开头的配置文件。

        私服安装:
          1、安装包nexus-x.x-bundle.zip解压。
          2、使用管理员打开dos,在dos下执行命令安装私服。
          3、进入解压包下的bin目录,执行:nexus install
          4、启动服务:nexus start
          5、默认端口号8081,http://ip:8081/nexus/

        私服仓库类型:
          hosted:宿主仓库。存放本公司开发的jar包
            > Snapshots:测试版本
            > Releases:正式版本
            > 3rd party:第三方,存在版权问题-Oracle
          proxy:代理仓库
            > Central:代理中央仓库
            > Apache Snapshots:Apache下测试版本的jar包
          group:组仓库;包含宿主参数和代理仓库。
          virtual:虚拟仓库。

        上传Jar包到私服:
          1、在maven目录下conf/setting.xml认证:配置用户名/密码。

    <server>
        <!-- 宿主仓库id -->
        <id>releases</id>
        <!-- 用户名 -->
        <username>admin</username>
        <!-- 密码 -->
        <password>admin123</password>
    </server>
    <server>
        <!-- 宿主仓库id -->
        <id>snapshots</id>
        <!-- 用户名 -->
        <username>admin</username>
        <!-- 密码 -->
        <password>admin123</password>
    </server>

          2、在将要上传的项目的pom.xml中配置jar包上传路径url

    <distributionManagement>
        <repository>
            <id>releases</id>
            <url>http://ip:8081/nexus/content/repositories/releases</url>
        </repository>
        <snapshotRepository>
            <id>snapshots</id>
            <url>http://ip:8081/nexus/content/repositories/snapshot</url>
        </snapshotRepository>
    </distributionManagement>

        执行命令上传项目到私服:deploy

        下载Jar包到本地仓库:在Maven目录下conf/settings.xml配置模板。

        激活模板:

    <activeProfiles>
        <activeProfile>dev</activeProfile>
    </activeProfiles>
  • 相关阅读:
    LeetCode 227. Basic Calculator II
    LeetCode 224. Basic Calculator
    LeetCode 103. Binary Tree Zigzag Level Order Traversal
    LeetCode 102. Binary Tree Level Order Traversal
    LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal
    LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal
    LeetCode 169. Majority Element
    LeetCode 145. Binary Tree Postorder Traversal
    LeetCode 94. Binary Tree Inorder Traversal
    LeetCode 144. Binary Tree Preorder Traversal
  • 原文地址:https://www.cnblogs.com/zltao/p/10545928.html
Copyright © 2011-2022 走看看