• Maven


    Maven是什么?

    MavenApache下的项目管理工具,它由纯Java语言开发,可以帮助我们更方便的管理和构建Java项目。

    为什么要使用Maven

    1.jar包管理:

      a) Maven中央仓库获取标准的规范的jar包,避免自己下载到错误的jar包;

      b) 本地仓库统一管理jar包,使jar包与项目分离,减轻项目体积。

    2.maven是跨平台的可以在windowlinux上使用。

    3.清晰的项目结构。

    4.多工程开发,将模块拆分成若干工程,利于团队协作开发。

    5.一键构建项目:使用命令可以对项目进行一键构建,操作系统中无需安装eclipsetomcat

    Maven入门:

    下载、安装、配置环境变量Maven

    1.http://maven.apache.org/download.cgi

    2.安装JDK1.8

    3.配置环境变量:

      a) win+r打开运行窗口或者进入cmd命令窗口;

      b) 输入sysdm.cpl打开系统属性 -> 高级 -> 环境变量;

      c) 新建系统变量,变量名:MAVEN_HOME,变量值:Maven安装路径;

      d) Path下追加一条属性指向Mavenbin目录%MAVEN_HOME%/bin

     

    Maven项目通过坐标的方式从本地仓库获取jar

    1.坐标:由公司/组织名(groupId) + 项目名/子项目名(artifactId) + 版本号(version)组成;

    2.本地仓库:存放很多jar包,供Maven项目使用;

    3.Maven通过建立本地仓库索引,可以快速的找到符合要求的jar包,从而解决效率问题;

    4.多个Maven项目都可以从本地仓库获取jar包;

    5.设置本地仓库:maven根目录 -> conf -> settings.xml,将localRepository标签中的路径替换成自己本地仓库的路径;

     

    Maven三种仓库概念

    本地仓库、远程仓库、中央仓库

     

    设置阿里云Maven仓库镜像

    settings.xml文件中的mirrors下添加mirror标签

    <mirror>

      <id>alimaven</id>

      <name>aliyun maven</name>

      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>

      <mirrorOf>central</mirrorOf>

    </mirror>

     

    Maven常用命令:

    mvn clean : 清理,编译后的目录

    mvn compile : 编译,只编译main目录,不编译test中的代码

    mvn test-compile : 编译test目录中的代码

    mvn test : 运行test里面的代码

    mvn package : 打包(java项目->打成jar包;web项目->打成war)

    mvn install : 发布项目到本地仓库,用在打jar包上,打成jar包可以被其他项目使用

    mvn tomcat:run : 一键构建项目

     

    Maven命令的生命周期

    clean生命周期:clean

    default生命周期:compiletest-compiletestpackageinstall

    site生命周期:mvn site命令,生成项目描述文档静态页

    不同的生命周期可以一起执行,例如mvn clean compile

     

    Maven命令的执行顺序

    在相同生命周期中的命令才会受执行顺序的影响

    default生命周期中的命令执行顺序:compile <- test-compile <- test <- package <- install

     

    Scope依赖作用域也可称作依赖范围:maven中的依赖,会根据程序所处的阶段和场景发生变化,所以mavenscope属性来做限制。

    1. compile(默认值):在编译、运行、测试、打包都有效;示例:spring-core
    2. provided:编译、测试时有效,运行、打包无效;示例:servlet-api
    3. test:仅在测试时有效;示例:junit
    4. runtime:测试、运行、打包时有效;示例:JDBCDriver
    5. system:不推荐使用,使用system作用域不会去本地仓库寻找依赖,要指定本地路径;

     

    Maven3.6.1 + Tomcat8.5.33热部署

    热部署:tomcat运行时将项目部署上去。

    开启tomcat热部署:

    1.修改tomcat -> conf -> tomcat-users.xml 配置文件

    2.tomcat-users标签中加入以下代码:

    <role rolename="manager-gui"/>

    <role rolename="manager-script"/>

    <user username="..." password="..." roles="manager-gui,manager-script"/>

    3.bin下启动tomcat

    4.修改项目中pom.xml,在tomcat7的插件添加以下代码:

    <configuration>

      <url>http://localhost:8080/manager/text</url>

      <username>wen</username>

      <password>123456</password>

    </configuration>

    5.右键项目 -> Run as -> maven build... Goals中使用tomcat7:deploytomcat7:redeploy(非第一次部署时使用)来进行热部署

    6.部署完毕,打开浏览器测试

     

    Maven模块化开发

     

    依赖管理,版本锁定<dependencyManagement>

    1. <dependencyManagement>是依赖管理,该标签下添加的<dependenices>可以声明依赖,但是不会引入jar
    2. 只有声明在<project>标签下<dependencies>中的依赖才会被引用到项目中
    3. <dependencyManagement>下添加jar包坐标后,<project>标签下<dependencies>标签的版本号可以忽略不写
    4. <properties>标签可以自定义版本号,用el表达式赋值给<version>标签
    5. 统一管理jar包版本,修改方便

     

    依赖传递,与依赖版本管理

    1. 依赖传递:添加依赖的jar包如果还依赖其他jar包,则在添加时会一起引入
    2. 依赖冲突:Base-project3个子项目组成,A-project依赖Tools.jar1.0版本,C-project依赖Tools.jar2.0版本,根据依赖传递机制,Base-project将同时依赖Tools.jar两个版本,但这造成了冲突,根据路径最近获取策略,该项目最终依赖Tools.jar1.0版本,导致C-project无法调用getAll方法从而报错,因此我们要动手选择一个适合项目的版本

     

    解决依赖冲突的办法

    1.直接声明:直接添加Tool project2.0依赖

    2.排除:使用dependency标签中的exclusions标签排除A-project中的Tool project1.0依赖

    3.版本锁定

     

    Maven远程仓库Nexus(私服)

    1.Nexus安装目录下nexus-3.16.1-02/etc/nexus-default.properties配置表中可以修改一下属性:

      a) application-port=Nexus服务监听的端口

      b) application-host=Nexus服务监听的主机

      c) nexus-context-path=Nexus服务的上下文路径

    2.Nexus服务配置和启动:

      a) 以管理员身份运行cmd -> 进入到nexus安装目录 ../nexus-3.16.1-02/bin目录下

      b) cmd中运行nexus.exe/install可以安装nexus服务

      c) cmd中运行nexus.exe/start可以启动nexus服务

      d) cmd中运行nexus.exe/stop可以停止nexus服务

    3.登录Nexus

      a) 启动服务后,根据nexus-default.properties的配置进行登录,如果没有修改,可以在浏览器中输入http://localhost:8081来登录

      b) 默认用户名是admin,密码是admin123

    4.仓库类型:nexus有多种仓库类型

    Nexus使用:

    需求:将项目中的mapper.jar包提交到远程仓库中,使service项目从远程仓库获取

    上传jar包到远程仓库:

    1. Mavensetting.xml中配置nexus访问权限
    2. 在项目的pom.xml中配置nexus仓库位置
    3. 以上2个配置标签中的id要一致
    4. 使用deploy命令将项目打包,发布到nexus
    5. 检查仓库中是否有上传好的jar

    从远程仓库下载jar包:

    1. 使用profiles标签在Mavensetting.xml中配置仓库位置
    2. 激活profiles标签,使它发生作用
    3. 如果之前打包了,删除本地仓库下的mapper.jar
    4. 关闭mapper子项目,让service子项目依赖mapper.jar
    5. 更新项目,从远程仓库中获取mapper.jar

    使用自定义用户和自定义仓库进行上传和下载jar包:

    1.建议先将管理员密码修改

    2.在Roles中可以增加用户权限组,里面可以自定义用户权限

    3.在Users中可以增加用户,分配设置好的权限

    4.在Repositories中新建仓库

      (1) name:仓库名称

      (2) vesion policy:版本策略

        Release:发行版

        Snapshot:快照版

        Mixed:混合模式

      (3) Layout policy:布局策略

        Strict:严格

        Permissive:宽松

      (4) Deployment policy:部署策略

        Allow redeploy:允许从新部署

        Disable redeploy:禁止重新部署

        Read-only:只读

    5.修改配置,将jar包上传到自定义仓库,然后从自定义仓库下载jar

     

     

     

  • 相关阅读:
    终于明白迅雷使用积分制的真正作用和目的了(教大家改迅雷)
    免费搞QQ空间
    终于明白迅雷使用积分制的真正作用和目的了(教大家改迅雷)
    终于明白迅雷使用积分制的真正作用和目的了(教大家改迅雷)
    免费搞QQ空间
    免费搞QQ空间
    如何配置Windows Live Writer
    求PI的近似值,用公式PI/4=11/3+1/51/7+...
    求31000之间的素数
    通过Office 2007发布Blog
  • 原文地址:https://www.cnblogs.com/tripleDemo/p/10898655.html
Copyright © 2020-2023  润新知