Maven

作者: 郝晶 | 来源:发表于2017-04-26 15:49 被阅读0次

    简单的学习来看,通过maven来构建项目骨架,测试,编译,打包部署,以及聚合。贯穿了整个java的项目,还是比较重要的基础类知识

    hn-nexus*Centralhttp://nexus.hn:8081/nexus/content/groups/public/

    Maven简介

    Maven是优秀的构建工具,能够帮我们自动化构建过程,从清理,编译,测试到生成报告,打包,部署

    Maven提供项目依赖(中央仓库)和项目管理

    Maven mac 安装

    brew install maven

    Maven 的简单实用

    编译主代码

    根据maven 规范:项目主代码要写在src/main/java下面,这样maven会自动搜寻该目录,相应的测试代码写在src/test/java下

    mvn clean compile

    编译测试代码

    mvn clean test

    当在构建testCompile任务失败并提示要使用更高的版本启动注释时要安装maven核心插件之一compiler,目前的junit版本已经支持了,暂时不需要我使用的是4.11

    打包和运行

    mvn clean package

    让其他项目可以直接引用我们打包的jar需要使用

    mvn clean install // 执行之前会先执行mvn package

    使用Archetype生成项目骨架

    maven 3

    mvn archetype:generate

    出现让选择,但是由于选项太多,如果自己一个一个去找很浪费时间所以,直接写到参数里面

    Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains):

    mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp

    这样生成的项目目录就没有问题

    项目目录结构

    也可以使用IDEA创建Maven项目file->new->project

    创建maven项目

    问题,通过mvn创建的项目没有test目录,自己创建test目录的话,无法自动引入依赖怎么办?

    答:创建相应的Test目录结构,将Test/java 右键mark Directory As -> Test Sources Root即可

    问题,没有java目录Idea怎么创建?

    答:新建文件夹命名为java,右键选择 mark Directory As -> Sources Root即可

    创建好项目后进入IDEA中可以使用maven插件进行操作如图:

    Maven plugins

    仓库

    本地仓库

    在本地用户目录下有.m2/repository仓库目录

    构件如何到本地仓库:

    1)远程仓库下载到本地仓库

    2)本地项目构件安装在maven仓库中

    mvn clean install 将文件复制到本地仓库中

    远程仓库

    有时默认的中央仓库无法满足项目需求,可能需要项目的构件存在于另一个远程仓库想,这样就需要配置该仓库

    配置

    配置数据 配置描述

    远程仓库认证

    <servers>

      <server>

            <id></id>

            <username></username>

            <password></password>

      </server>

    </servers>

    中央仓库(默认的远程仓库)

    私服(特殊的远程仓库)

    镜像

    如果X仓库可以提供仓库Y存储的所有内容,那么X是Y的一个镜像

    常用的是结合私服

    编辑settings.xml文件

    镜像配置

    mirrorOf 值为*代表改配置是多有Maven仓库的镜像,任何远程仓库的请求都会被转至http://****

    生命周期和插件

    三套生命周期:

    clean(清理项目),default(构建项目), site(建立项目站点)

    clean生命周期

    1)pre-clean 清理前要完成的工作

    2)clean 清理上一次构建生成的文件

    3)post-clean 执行一些清理后需要完成的工作

    default生命周期(核心)

    validate

    initialize

    generate-sourses

    process-sources 处理项目主资源文件,一般来说是对src/main/resources目录的内容进行变量替换等工作,复制到项目输出的主classpath目录下

    genetare-resources

    process-resources

    compile编译项目主源码, src/main/java目录下的java文件到classpath目录下

    process-classes

    generate-test-sources

    process-test-soutces 处理测试资源文建 src/test/resources

    generate-test-resources

    process-test-resources

    test-compile 编译项目测试代码 src/test/java 下java文件到classpath目录下

    process-test-classes

    test 使用单元测试框架运行,测试代码不被打包和部署

    prepare-package

    package 接受编译好的代码,打包成可发布的格式如JAR

    pre-integration-test

    integration-test

    post-integration-test

    verify

    install 将包安装到Maven本地仓库,供本地其他maven 项目使用

    deploy将最终的包复制到远程仓库,供其他开发人员和Maven项目使用

    site生命周期

    site建立和发布项目站点

    命令行插件配置

    -D参数

    例如: mvn install -Dmaven.test.skip=true

    POM中插件全局配置

    maven内置的插件仓库

    maven内置的插件仓库配置

    今天大体了解了maven的仓库,以及配置文件里面每一项的含义(settings.xml),外加简单了解了maven的项目插件,目前终于是知道了pom.xml里面<build>的含义到底是什么,说实话以前都不知道,尴尬了~~~


    2017.4.24

    maven聚合和继承

    聚合:将项目中的各个模块聚合在一起构建

    继承:抽取各模块相同的依赖和插件等配置

    既简化了POM的同时,还促进了各模块的一致性

    1)所有模块的groupId都是一致的,而artifactId都是各自的项目名称

    2)构建aggregator模块,该模块本身也是一个Maven项目,必须有自己的POM

    聚合父类的Pom文件

    疑问点:怎么创建这个聚合类呢?

    第一个特殊的点是:packaging 是pom,对于聚合模块来说packaging的值必须是pom否则无法构建

    第二个特殊点,也是聚合的核心是modules,用以实现模块的聚合,每一个module对应的都是当前pom的相对目录

    聚合模块只是为了聚合其他模块的工具本身没有实质性内容

    除了是父子关系,也可以是平行关系,平行关系的时候修改module的路径即可

    有了父模块,就得让子模块去继承

    子模块pom配置

    项目构建时会首先根据relativepath去找,找不到再去本地仓库里面找(默认值是: ../pom.xml),也就是说默认是上一次层目录。

    maven提供了dependencyManagement元素即能让子元素继承父模块的以来配置,又能保证子模块的灵活性,降低依赖冲突

    插件继承<pluginManagement>

    web

    在创建聚合项目的时候要将packaging  === pom 不然创建子项目创建不成功,并且,在创建子项目的时候。父项目的module是自动添加的,

    而dependencyManagement是所依赖jar包的版本管理器,只是对版本进行管理,不会实际引入jar如果,子项目中有version则安装子项目的version如果没有则按照父项目中的,父项目没找到则报错。但是这并不带表父项目声明了,子项目就不用声明了

    使用jetty-maven-plugin进行测试

    maven配置jetty插件,就可以使用maven 命令行打包发布

    部署到web容器进行测试,将项目打包并部署到web容器中,web页面测试仅限于页面层次上,而底层的方法还是要用单元测试的。

    使用jetty-maven-plugin十分简单,指定该插件的坐标即可,再稍加配置

    配置jetty-maven-plugin

    scanIntervalSeconds是扫描项目变更的时间间隔,默认是0,表示不扫描也就失去了所谓自动化热部署的功能

    contextPath是项目部署后的路径,可以通过http://hostname:port/test/访问

    其中<configuration>中可以进行系统属性的配置,不必须,比如是走测试环境,开发环境,还是线上环境。(我们目前写的项目是需要的)。

    下一步启动jetty

    mvn jetty:run 默认启动端口是8080 指定端口使用mvn jetty:run -Djetty.port=9999

    插件小理解:

    maven 是通过不同的插件来完成相应的目标,比如compiler 目标 是通过使用maven-compiler-plugin插件来执行compiler的,

    通过pom.xml配置的插件信息,可以快速找到本地仓库中相应的插件然后执行相应的目标,所以说maven是集合了项目测试,打包,部署等功能的,这些功能都通过插件来实现,

    目前接触到的插件:

    mybatis-generator 操作数据库

    maven-resources-plugin,处理资源文件

    将所有的功能通过插件的形式来实现,使得maven是比较纯粹的


    相关文章

      网友评论

          本文标题:Maven

          本文链接:https://www.haomeiwen.com/subject/svfbattx.html