A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© chenlong43210 初级黑马   /  2018-7-6 10:11  /  521 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小石姐姐 于 2018-7-31 10:56 编辑

【石家庄校区】Maven知识
Maven概述
概述
    Maven是apache下的开源项目,项目管理工具,管理java项目.
    1. 项目对象模型(Project Object Model)
            POM对象模型,每个maven工程中都有一个pom.xml文件,定义工程所依赖的jar包、本工程的坐标、打包运行方式
    2. 依赖管理系统(基础核心)
            maven通过坐标对项目工程所依赖的jar包统一规范管理.
    3. maven定义一套项目生命周期
            清理、初始化、编译、测试、报告 、打包、部署、站点生成
    4. 一组标准集合
            强调:maven工程有自己标准的工程目录结构、定义坐标有标准.
    5. maven管理项目生命周期过程都是基于插件完成的


Maven仓库
    1. 中央仓库
            远程仓库,maven团队统一维护仓库中的jar包
            地址: http://repo1.maven.org/maven2/
    2. 本地仓库
            相当于缓存,工程第一次会从远程仓库去下载jar包,然后存在本地仓库
            下次使用先从本地仓库查找,没有的话在去远程仓库下载
    3. 私服
            在公司内部架设一台私服,其它公司架设一台仓库,对外公开


Maven环境搭建
    maven的官网下载: http://maven.apache.org/download.cgi
    本地仓库配置:
            1. 创建一个本地仓库的文件夹,用来存储jar包
            2. 在maven的安装目录中conf/settings.xml文件中配置:
                    <localRepository>本地仓库路径</localRepository> //配置了本地仓库
    eclipse配置Maven:
            先配置Installations:
                    1. 选择选择菜单windows找到Preferences中的Maven,选择Maven中的Installations,点击add弹出安装目录
                    2. 点击Directory选择本地的Maven目录,点击finish
                    3. 勾选自己添加的maven点击apply,然后点击ok就可以了
            在配置User Settings:
                    1. 选择选择菜单windows找到Preferences中的Maven,选择Maven中的User Settings
                    2. 点击UserSettings(open file)下面文本框后的Browse找到本地maven下的settings.xml文件
                    3. 点击Reindex在点击Apply按钮最后点击ok就可以了
    重建本地仓库索引:
            1. 选择菜单 window --> show View,找到Maven选择下面的Maven Repositories
            2. 右键Local Repositories下的Local Repository(xx),选择Rebuild Index重新创建索引


Maven入门
创建工程
    1. 选择菜单  File ->new -> Other搜索Maven找到它下面的Maven Project点击next
    2. 选中第一个复选框Create a simple project(skip archerype selection)跳过骨架,点击next
    3. 定义工程坐标(maven对所有工程管理基于坐标进行管理)
            Group Id: 的写法是域名反写加上项目名称
            Artifact Id: 模块名称 (相当于项目名)
            Version: 是版本号; snapshot(快照版,没有正式发行),release(正式发行版本)
            Packaging: 要打成什么样的包
    4. 输入后点击Finish就可以了
    工程目录结构说明:
            /src/main/java      主体程序 java源文件(不要放配置文件)
            /src/main/resources  主体程序所需要的配置文件(不要放java文件)
            /src/test/java       单元测试程序 java源文件
            /src/test/resources   单元测试程序所用的配置文件
            /target            编译输出目录
            pom.xml          Maven进行工作的主要配置文件。  
设置编译版本
    Maven工程默认是JDK1.5,可以修改
    把下列代码配置信息粘贴到pom.xml中:
         
[Java] 纯文本查看 复制代码
  <build>  
              <plugins>
                  <plugin>  
                      <groupId>org.apache.maven.plugins</groupId>  
                      <artifactId>maven-compiler-plugin</artifactId>  
                      <version>2.3.2</version>  
                      <configuration>  
                          <source>1.7</source>  
                          <target>1.7</target>  
                      </configuration>  
                  </plugin>  
              </plugins>  
       </build> 
    

    注意: 配置完后项目会报错,点击点击工程右键  Maven ->  Update Project,弹出窗口后OK,操作后,编译版本改为 1.7
添加依赖
    右键点击工程  Maven -- >  Add Dependency


项目生命周期(了解)
    Maven有三套相互独立的生命周期,分别是:clean、default、site。clean
    主要是清理项目、default是Maven最核心的的构建项目、site是生成项目站点。
    每一个大的生命周期又分为很多个阶段。后面的阶段依赖于前面的阶段,这点有点像Ant的构建依赖。
    生命周期本身相互独立,用户可以仅仅调用生命周期的某一个阶段,也就是说用户调用了default周期的任何阶段,并不会触发clean周期以及site周期的任何事情.
    (1)clean周期:
            pre-clean:准备清理
            clean:真正的清理工作
            post-clean:执行清理后的一些后续工作
    (2)default周期:
        validate:验证
        initialize:初始化配置
        generate-sources:生成源代码编译目录
        process-sources:处理项目主资源文件,复制资源文件到outputclasspath
        generate-resources:生成资源目录
        process-resources:处理资源文件
        complie:编译源代码
        process-classes:处理编译后文件
        generate-test-sources:生成测试目录
        process-test-sources:处理项目测试资源文件,复制测试资源文件到outputclasspath
        generate-test-resources:生成测试资源文件
        process-test-resources:处理测试资源文件
        test-compile:编译测试代码
        process-test-classes:处理测试代码
        test:单元测试运行测试代码
        prepare-package:打包前的准备
        package:将编译好的代码打包成为jar或者war或者ear等等
        pre-integration-test:准备整体测试
        integration-test:整体测试
        post-integration-test:为整体测试收尾
        verify:验证
        install:安装到本地Maven库
        deploy:将最终包部署到远程Maven仓库
    (3)site周期:
            pre-site:准备生成站点
            site:生成站点及文档
            post-site:站点收尾
            site-deploy:将生成的站点发布到服务器上


常见命令
    maven通过命令对工程进行清理、编译、测试、打包、部署
    执行: 点击工程右键 ,Run As (或Debug As ) -- >  Maven  Build... 在Goals后的文本框输入命名,点击Run就可以执行相应的命令
    常见命令如下:
            compile:编译
            clean:清理,将target下的class文件清理
            test: 执行单元测试类,执行src/test/java下的类
            package :将java工程打成jar、war。
            install:安装命令,将程序的jar发布到本地仓库(发布到仓库,目录按照本工程定义的坐标生成目录)
            tomcat7:run 部署运行tomcat
    扩展:
            这些命令是对maven原生命令的封装,我们可以在命令行通过下列代码进行编译打包等操作:
            mvn 命令名称        运行不调试
            mvnDebug 命令名称   调试运行
    注意要配置环境变量:
            添加MAVEN_HOME        配置的是本地maven的路径
            在path中配置                %MAVEN_HOME%\bin
    测试Maven环境 ,在控制台输入mvn -v,有信息输出就代表配置成功


创建ssh2工程(重点)
创建war工程
    1. 选择菜单  File ->new -> Other搜索Maven找到它下面的Maven Project点击next
    2. 选择跳过骨架,点击next
    3. 定义工程坐标; 注意打包方式选择war
    4. 需要手动添加web.xml
            在src /main/webapp 目录下手动创建WEB-INF目录,在这个目录下创建web.xml文件
    5. 添加插件(将下列配置拷贝到pom.xml中)
            
[Java] 纯文本查看 复制代码
<build>  
              <plugins>
                  <plugin>  
                      <groupId>org.apache.maven.plugins</groupId>  
                      <artifactId>maven-compiler-plugin</artifactId>  
                      <version>2.3.2</version>  
                      <configuration>  
                          <source>1.7</source>  
                          <target>1.7</target>  
                      </configuration>  
                  </plugin>  
                  <plugin>
                                    <groupId>org.apache.tomcat.maven</groupId>
                                    <artifactId>tomcat7-maven-plugin</artifactId>
                                    <configuration>
                                            <!-- 指定端口 -->
                                            <port>8080</port>
                                            <!-- 请求路径 -->
                                            <path>/</path>
                                    </configuration>
                        </plugin>
              </plugins>  
            </build>
    6.在pom.xml中添加servlet-api
            <dependencies>
              <dependency>
                      <groupId>javax.servlet</groupId>
                      <artifactId>servlet-api</artifactId>
                      <version>2.5</version>
                <scope>provided</scope>
              </dependency>
      </dependencies>
            注意:必须指定scope为provided , 这是设置依赖范围

    7. 创建页面


添加SSH依赖
    添加一些ssh框架需要的一些jar包,需要什么添加什么


ssh工程搭建
    1. 建立包结构
    2. 添加需要的配置文件
    3. 编写映射文件的时候需要在src/main/resources文件下创建跟实体类一样的包结构


定义变量
    通过下列标签:
            <properties>
                    <自定义的标签>变量的值</自定义的标签> //可以定义多个
            </properties>
    可以通过: ${自定义的标签名} //这样的方式获取


聚合与继承
聚合
    就是把多个模块或项目聚合到一起,建立一个专门负责聚合工作的Maven 工程。
    1.聚合模块本身也做为一个Maven项目,它必须有自己的POM
    2.它的打包方式必须为: pom
    3.引入了新的元素:modules---module
    4.版本:聚合模块的版本和被聚合模块版本一致
    5.相对目录:每个module的值都是一个当前POM的相对目录
    6.目录名称:为了方便的快速定位内容,模块所处的目录应当与其artifactId一致(Maven约定而不是硬性要求),总之,模块所处的目录必须和<module>模块所处的目录</module>相一致。
    7.习惯约定:为了方便构建,通常将聚合模块放在项目目录层的最顶层,其它聚合模块作为子目录存在。这样当我们打开项目的时候,第一个看到的就是聚合模块的POM
    8.聚合模块减少的内容:聚合模块的内容仅仅是一个pom.xml文件,它不包含src/main/Java、src/test/java等目录,因为它只是用来帮助其它模块构建的工具,本身并没有实质的内容。
    9.聚合模块和子模块的目录:他们可以是父子类,也可以是平行结构,当然如果使用平行结构,那么聚合模块的POM也需要做出相应的更改。


继承
    让一个子模块继承一个父工程
    1.说到继承肯定是一个父子结构,那么我们在父工程中来创建一个parent project
    2.<packaging>: 作为父模块的POM,其打包类型也必须为POM
    3.结构:父模块只是为了帮助我们消除重复,所以它也不需要src/main/java、src/test/java等目录
    4.新的元素:<parent> , 它是被用在子模块中的
    5.<parent>元素的属性:<relativePath>: 表示父模块POM的相对路径,在构建的时候,Maven会先根据relativePath检查父POM,如果找不到,再从本地仓库查找
    6.relativePath的默认值: ../pom.xml
    7.子模块省略groupId和version: 使用了继承的子模块中可以不声明groupId和version, 子模块将隐式的继承父模块的这两个元素


聚合与继承的区别
    聚合和继承通常是结合使用的,但是其作用是不同的。
    聚合是将多个模块的工程汇聚到一起,而继承则是指明某个模块工程要继承另一个模块功能


构建多模块Maven工程
    拆分规则:
            1. 按业务模块拆分
            2. 按层拆分
    创建父工程和子模块:(按层)
            父工程的项目名: 项目名_parent
            子模块的模块名: 项目名_自定义的模块名
            注意: 父工程的打包方式是pom,子模块的打包方式web层的是war,其他的是jar
    建立模块依赖关系:
            跟添加jar包的操作一样,只不过现在是依赖的另一个模块.
            maven有依赖传递
    注意: web.xml和struts2和spring的配置文件是放在web层下的
   
    spring配置文件的拆分:
            名字: applicationContext_自定义名
            注意:
                    拆分的配置文件放在对应的模块中
                    需要在web_xml文件中配置applicationContext的读取路径
                            classpath*:applicationContext*.xml
                    applicationContext*.xml找寻的是所有已applicationContext开头的配置文件
                    classpath 和 classpath* 区别:
                            classpath:只会到你指定的class路径中查找找文件;
                            classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找.
    打包: 选择父工程执行打包命令(package),jar工程的配置文件是被直接打到jar包中的


依赖管理
依赖范围
    概述: 用来控制依赖与3种classpath(编译,测试,运行)的关系
    依赖范围:
            1. compile是编译,测试,运行都会存在(默认就是这个值)
            2. provided是在编译和测试有效;比如: servlet-api就是一个典型的例子
            3. runtime是在测试,运行有效;比如: jdbc驱动包
            4. test是在测试有效;比如: junit
    设置依赖范围:
            在要进行依赖设置的具体依赖中添加 <scope>依赖范围</scope>
依赖传递
    A依赖B,B是A的直接依赖,B依赖C,C是A的传递依
依赖调节原则(了解)
    情景再现:
            项目A依赖于项目B,项目B依赖于项目C(v1), 项目A依赖于项目D,项目D依赖于项目E,项目E依赖于C(v2),
            1、A--->B---->C(v1) ,   
            2、A------>D---->E----->C(v2)
    项目A隐形依赖了两个版本的C,那到底采用哪个版本呢?
    分析:
            依赖调解第一原则:路径优先,很明显,第一种路径深度是3,第二种路径深度是4,所以,maven会采用C(v1)
            依赖调解第二原则:声明优先,假设路径深度相等,那么声明在前的会被引用。
版本锁定
    通过这个标签配置: <dependencyManagement> //基本不怎么用
排除依赖(重要)
    概述: 就是jar包版本冲突,需要排除低版本的jar包
    排除依赖的方法:
            在要排除的依赖中添加一个配置
                    <exclusions>
                              <exclusion>
                                      <groupId>要排除的依赖的groupId</groupId>
                                      <artifactId>要排除的依赖的artifactId</artifactId>
                              </exclusion>
                      </exclusions>


单元测试
    需要在工程中添加junit依赖,在src/test/java 下创建测试类进行测试
    注意: 打包操作是要求在所有的测试案例都通过的基础上才可进行的.

私服
镜像配置
  配置私服,当本地仓库找不到,会去私服找,找不到再去中央仓库找
  
[Java] 纯文本查看 复制代码
在maven配置文件settings.xml,可以配置多个镜像,如:
  <mirrors>
    <mirror>  
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>[url]http://maven.aliyun.com/nexus/content/groups/public/</url>[/url]
      <mirrorOf>central</mirrorOf>
    </mirror>...
  </mirrors>
  
发布自己的工程jar到私服
  在pom.xml中: //配置上传到私服的地址
  <distributionManagement>
    <repository>
      <id>releases</id>
      <url>releases仓库地址</url>
          </repository> 
          <snapshotRepository>
      <id>snapshots</id>
      <url>snapshots仓库地址</url>
          </snapshotRepository> 
  </distributionManagement>
  在maven的settings.xml中: //配置访问私服需要的密码
  <servers>        
    <server>
      <id>releases</id>
      <username>admin</username>
      <password>admin123</password>
    </server>        
    <server>
      <id>snapshots</id>
      <username>admin</username>
      <password>admin123</password>
    </server>
  </servers>

  注意:settings.xml 配置 <id>和 pom.xml<id> 对应
  然后执行命令 deploy,success即可
  
发布第三方工程jar到私服
  很多jar包由于版权等问题,中央仓库中没有,如Oracle驱动
  将这些jar包存放到私服:
  1.私服选择左侧菜单的Repositories,  在Repositories窗口中选择3rd party
  2.在3rd party窗口中选择Artifact Upload
  3.在Artifact Upload选项卡中填写坐标,并上传jar包,success即可
  
私服nexus软件
  安装:nexus.bat所在目录 执行cmd命令:nexus install
  卸载:nexus uninstall

  端口:8081/nexus


svn 版本控制工具
eclipse设置
  设置排除文件的类型:
    window-preferences-Team-IgnoredResource-AddPattern
    添加target,则该目录被排除,不被上传到svn
  
单模块Maven工程代码签入SVN
  1.右键工程 - Team - Share Project
  2.右键工程 - Team - 提交
单模块Maven工程代码签出
  在SVN Repositories下:右击刷新- 选中项目右击 检出为...
多模块工程签入SVN
  1.父工程右击 Team - Share Project ,弹出窗口后的操作同单模块
  2.父工程右击 Team - 提交
多模块工程签出
  在SVN Repositories下:检出父工程,再依次检出子工程

  


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马