• maven基础学习


    一、概述
      POM是Project Object Model的缩写,项目的属性、依赖、构建配置这些信息都被抽象到项目对象模型里面。
      POM分为四个模块:项目基本信息、构建环境、POM关系管理、构建配置。

      1. 项目基本信息包括项目的名称、项目的官网、发起组织、项目的开发者、贡献者列表和许可证信息等等,通过这些信息我们可以对项目有一个基本的了解
      2. 构建环境包含了一些能在不同使用环境中激活的profile,比如,在开发过程中需要将系统部署到开发环境上,此时用的配置就是开发用的数据库和缓存系统等,而系统上线后,系统将部署到生产环境中,此时用的就是生产环境的数据库和缓存系统了。构建环境为特定的环境定制了构建设置,可以将不同的环境分开管理,非常方便。
      3. POM关系:通过POM可以引入当前项目依赖的其他项目,也可以设置所继承的父级项目或者它包含的子项目,另外还可以设置自身的项目坐标等。
      4. 构建设置:通过构建设置可以修改maven的默认行为,比如说修改源码或者测试代码的存放位置,添加新的插件或者把插件的目标反映到生命周期上,另外还可以定义站点生成参数等

    二、POM文件

      项目的所有信息都被抽象到了POM中,都被保存在一个POM.xml文件。
      项目的坐标:
        groupId:默认情况下,生成的报名和groupId一样
        artifactId:默认情况下,生成的项目名称和artifactId对应
        packageing:指定打包类型,可以使jar或者war
        version:定义项目的版本
      子项目的pom会继承父级项目的pom.
      可以通过mvn help:effective-pom查看当前项目使用的完整pom(其中包含了从父级pom继承的元素)

    三、插件与目标

      maven本身是一个框架,实际的任务都是由插件来完成的,一个目标是一个工作单元,而插件是多个目标的集合。

      生成项目骨架的命令:mvn archetype:generate

      在该命令中archetype是maven-archetype-plugins插件,generate是archetype中其中的一个目标(goal)
      使用语法是:
        groupId:groupId

      maven所有的任务都是交给插件去完成的,调用插件目标的两种方式:
      1.将插件与生命周期绑定,即通过指定生命周期阶段,就能隐式的通过插件执行任务.
      2.直接执行插件目标

    四、maven常用的插件

      1.maven-archetype-plugins,用来快速生成项目骨架,
        生成项目骨架的命令:mvn archetype:generate. 这个是交互式的过程,需要在过程中让用户指定groupId,artifactId,packaging和version等信息。
        对应的有个非交互式的命令: mvn archetype:create -DgroupId=com.elvis -Dartifactid=study

      2.maven-dependeny-plugin,帮助分析项目依赖.
        list目标: 用来列出当前项目的依赖列表.
        analysis目标: 列出项目依赖潜在的问题,如果项目中有未声明的依赖,该目标就会发出警告.

      3.maven-help-plugin,辅助工具
        system目标,能够打印所有的环境变量和java系统属性;
        effective-pom目标,打印项目的有效pom,有效的pom是指合并了所有的父pom之后的pom,当不确定pom的信息从何而来的时候就可以通过这个goal查看和确认.
        effective-settings目标,打印项目的有效的settings,当发现配置的setting没有生效时,就可以通过effective-settings来进行验证
        describe目标:可以帮助描述任何一个maven插件的信息,当要查看某个目标的帮助信息时,就可以通过这个goal来查看.

      4.maven-resources-plugin 可以为项目提供更加清晰的项目结构,可以独立管理java代码文件和资源文件,默认的主资源目录是resources目录,可以通过设置这个插件的选项来配置resources目录,使用这个插件还可以实现对资源文件的过滤。

      5.maven-surefire-plugin,用来进行单元测试。

      6.jetty-maven-plugin

      7.maven-enforcer-plugin

      maven提供了很多的实用插件,除了上述的常用插件外,可以到官网查看更多的插件
      http://maven.apache.org/plugins/index.html
      http://mojo.codehaus.org/plugins.html

    五、项目的生命周期阶段

      maven中项目的生命周期是指项目的构建过程,它包含了一系列的有序的阶段,而一个阶段就是构建过程中的一个步骤。

    简化的maven项目生命周期


    资源文件处理-->编译-->类文件处理-->测试资源处理-->测试-->打包。


    对于不同的项目而言,相同的生命周期阶段,所做的事情也是不一样的,就拿打包这个阶段来说,在一个项目里可能是将项目打包成jar文件,而在另外一个项目里则可能是将项目打包成war文件,这依赖于项目的具体配置。

    插件目标可以绑定到生命周期阶段上。一个生命周期阶段可以绑定多个插件目标。随着maven声明周期阶段的移动,他会执行附着在项目周期上的目标。每个阶段可以不绑定目标,也可以绑定多个目标。

    maven执行一个声明周期阶段的时候,它首先会有序的执行这个阶段前面的所有阶段,直到命令行指定的那个阶段为止。每个阶段对应着0个或者多个目标,如果不进行任何插件的定制或者配置,那么项目就会绑定标准的插件目标到默认的生命周期。

    例如mvn package的执行流程如下:

    1.执行resources插件的resources目标,该目标绑定的是resources阶段,这个目标会将resources目录下的所有资源和文件,以及其他自定义目录下的资源和文件复制到输出目录。

    2.执行compiler插件的compile目标,该目标绑定的是compile阶段,这个目标会编译java目录下的所有源代码以及其他自定义目录下的源代码,然后复制到输出目录。

    3.执行resources插件的testResources目标,该目标绑定的是testResources阶段,和上面的类似只不过处理的是测试用的资源文件。

    4.执行compiler插件的testCompile目标,该目标绑定的是testCompile阶段,和上面的类似只不过处理的是测试用的源码文件。

    5.执行surefire插件的test目标,该目标绑定的是test阶段,用来执行单元测试。

    6.执行jar插件的jar目标,该目标绑定的是package阶段,这个目标会将输出目录打包成jar文件。

    六、maven的依赖

    所谓依赖就是一个项目正常运行所需要的第三方类库文件,这些类库文件在maven中称为依赖或者也称为构件。
    <dependencies>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
      </dependency>
    </dependencies>

    maven支持传递性依赖:
      一个复杂的项目将会包含很多依赖,也有可能包含依赖于其他构件的依赖.你不必找出所有这些依赖然后把它们写到pom文件中,你只需要加上你直接依赖的那些库,maven会隐式的把这些库间接依赖的库也加入到你的项目中,并且还会自动处理依赖的冲突。

    依赖的范围:在依赖的定义中,有一个字段叫做scope,这就是依赖的范围。

      compile: 编译范围,默认的范围,如果不提供scope,那就是这个scope。处于这个范围的依赖在所有的classpath中都是可用的。同时他们也会被打包

      provided: 已提供范围,只有当jdk或者一个容器已经提供依赖之后才会使用,比如说你开发了一个web应用,你可能在编译的classpath中需要servelet API来编译一个servlet,但是你不需要在打包后的war文件中不需要包含这个servlet API,因为这个servlet API所在的jar文件已经由你的应用服务器或者web容器来提供了。这个时候就可以将依赖范围设置为provided,他只在编译的时候有效,而不会打包到war文件中.

      runtime: 运行时范围,表示运行时范围,在运行或者测试系统的时候需要,但是在编译的时候不需要。

      test: 测试范围,在一般编译和运行的时候都不需要,他们只在测试编译或者测试运行的时候才可用.比如Junit。

      system: 系统范围,与provided类似,但是你必须显示的提供一个与本地系统中jar文件的路径,这个取值范围在实际开发中不常用。

    七、Maven仓库

    Maven仓库就是一个存放了所有依赖的仓库,这个仓库通过依赖的坐标对其进行管理。

    1. 本地仓库: 在运行maven项目时,maven所有的依赖都是直接从本地仓库来获取的,如果本地仓库没有,他会先尝试从远程仓库下载依赖到本地仓库,然后再使用本地仓库的依赖。如果本地仓库和远程仓库都找不到依赖,maven就会报错。
        /user/.m2是maven默认的本地仓库的位置,在windows中默认是在C盘,不安全,所以使用windows系统的时候通常都要修改本地仓库的位置为其他盘.

      

    如何修改本地仓库的位置?
        打开maven安装目录/conf/settings.xml,找到localRepository的位置,取消注释(默认是被注释掉的),然后将路径修改成将要使用的路径就可以了。

    当运行mvn install的时候maven其实是将项目生成的构件安装到了本地仓库,也就是说,只有install之后,其他项目才能使用此项目生成的构件.

    2. 远程仓库:运行mvn install命令构建项目的时候,不用手动的去下载需要的jar文件,而项目却能够成功的构建,这是因为如果在本地仓库找不到响应的依赖,那么maven回去远程仓库查找。然后将远程仓库的依赖下载到本地仓库,maven本身自带了一个远程仓库,这个仓库是maven的中央仓库。
    打开pom.xml,选择effective pom这个tab页,
      <repositories>
        <repository>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
          <id>central</id>
          <name>Central Repository</name>
          <url>http://repo.maven.apache.org/maven2</url>
        </repository>
      </repositories>
    这就是中央仓库的配置,这就是从超级pom中继承而来的。

    除了中央仓库,我们还可以在pom.xml中配置其他的远程仓库,例如开源仓库提供的远程仓库.在pom.xml文件中加入:
    <repositories>
      <repository>
        <id>oschina</id>
        <name>oschina Repository</name>
        <url>http://maven.oschina.net/content/groups/public/</url>
      </repository>
    </repositories>
    这就成功的添加了一个远程仓库.

    八、项目站点报告:
      Maven可以为项目生成一个静态站点,这个站点包含了项目的各种信息.同时他也可以生成项目的各种报告信息,只要你配置了需要的各种插件就可以。
    比如可以配置checkSpell插件,checkSpell插件是一个用来检查java代码样式的工具,他可以帮助我们检查代码是否遵循了java规范,它特别适合小组开发时,代码样式规范的统一.通过配置checkSpell可以生成checkSpell报告.


      进入项目目录,进去shell,执行命令 mvn site,看到build success,然后去target目录可以看到生成了一个site目录,双击index.html可以查看当前项目的站点的样子,默认情况下,内容都是空的,修改pom.xml,添加一些内容,打开pom.xml,在project根标签内添加项:
      <name>项目的名字</name>
      <description>项目的描述信息</description>
      <url>http://www.xxx.com项目的URl</url>
      <organization>
      <name>项目的维护组织信息</name>
      <url>http://www.xxx.com</url>
      </organization>
      <developers>
        <developer>
          <id>study</id>
          <name>vbx</name>
          <email>aaa@ccc.com</email>
        </developer>
      </developers>

    在pom文件的最后修改一下pom文件的配置,
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.plugins</groupId>
            <artifactId>maven-site-plugins</artifactId>
            <version>3.3</version>
            <configuration>
              <locales>zh_CN</locales>//修改站点的显示语言
            </configuration>
          </plugin>
        </plugins>
      </build>

    执行mvn clean site清理站点
    执行mvn site重新生成站点

  • 相关阅读:
    createDocumentFragment 文档碎片提升dom增删的性能
    微信小程序引入外部js 方法
    javascript 阻止事件冒泡 cancelBubble
    javascript event事件兼容性处理
    SVN地址正确,能在网页打开,但是检出失败解决方法
    使用a标签下载文件,而不是直接打开,使用属性 download
    java 获取项目根目录
    ajax 提交所有表单内容及上传图片(文件),以及单独上传某个图片(文件)
    Vim命令图解和XVim使用
    解决MWPhotoBrowser中的SDWebImage加载大图导致的内存警告问题
  • 原文地址:https://www.cnblogs.com/byron0918/p/4676316.html
Copyright © 2020-2023  润新知