zoukankan      html  css  js  c++  java
  • Maven学习总结

    1、定义;maven是apache软件基金会下的一款自动化构建工具,专注于服务Java平台上的项目构建和依赖管理。

    2、Maven会先搜索本地仓库(repository),发现本地没有然后从远程仓库(中央仓库)获取。但中央仓库只有一个,最好从其镜象处下载。国内用阿里云下的服务器。

    http://maven.aliyun.com/nexus/content/groups/public/  
       

    也有通过nexus搭建的私服进行获取的(具体参考nexus的创建和连接)。

    3、约定的目录结构

    maven有三种打包方式:

    jar:普通的jar项目

    war:创建一个web项目

    POM:

    创建一个pom文件,管控版本号,其它的maven工程继承后就可以统一控制版本了,如下:

    统一的依赖

    <!-- 集中定义依赖版本号 -->
        <properties>
            <junit.version>4.12</junit.version>
            <spring.version>4.1.3.RELEASE</spring.version>
            <mybatis.version>3.2.7</mybatis.version>
            <mybatis.spring.version>1.2.2</mybatis.spring.version>
            </properties>
    <!-- 在这里统一管理用到的版本号,这里并不是把jar包依赖进来 -->
        <dependencyManagement>
            <dependencies>
                <!-- 单元测试 -->
                <dependency>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                    <version>${junit.version}</version>
                    <scope>test</scope>
                </dependency>
    
                <!-- Spring -->
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-context</artifactId>
                    <version>${spring.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-beans</artifactId>
                    <version>${spring.version}</version>
                </dependency>
    </dependencies>
    
        </dependencyManagement>
    <!-- dependencyManagement: 作用在使用到的时候,依赖进来即可,不依赖进来就不使用. -->

    依赖

      <parent>
        <groupId>com.lamsey</groupId>
        <artifactId>lamsey-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
      </parent>
      <artifactId>lamsey-common</artifactId>

    4、依赖:maven解析下述信息时会到本地仓库中根据坐标查找

    ①依赖信息的配置
    <dependency>
        <groupId>com.atguigu.maven</groupId>
        <artifactId>Hello</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <scope>compile</scope>
    </dependency>
    坐标: <groupId>:文件发行者信息的倒写
       <artifactId>:模块名字
      <version>:版本信息
    SNAPSHOT:快照
    RELEASE:正式版
    范围:<scope>:依赖的范围,参数有以下三个
    [compile][test][provide]

    依赖的进阶:

    (1)依赖的传递性:
    在依赖的链条上,被依赖的工程如果依赖其他工程,那么链条中上面的工程就不必重复声明依赖了,Maven会自动导入。
    (2)依赖传递的限制性 
    compile范围的引入可以传递
    test、provide范围的引入不可传递
    对于不可传递的依赖只能在有需要的工程模块中单独引入

    (3)依赖传递性的排除
    (4)声明属性值
    (5)依赖的原则

    4、生命周期&&插件

    (1)maven中有三个独立的生命周期

    [1]Clean:清理
    [2]Site:生成站点
    [3]Default:默认

     (2)每个生命周期都有这个特点:

    不管用户要求执行的命令对应生命周期中的哪一个阶段,Maven都会自动从当前生命周期的最初位置开始执行,直到完成用户下达的指令

    以下生命周期&&插件的内容来源:http://www.cnblogs.com/luotaoyeah/p/3819001.html

    一个完整的项目构建过程通常包括清理、编译、测试、打包、集成测试、验证、部署等步骤,Maven从中抽取了一套完善的、易扩展的生命周期。Maven的生命周期是抽象的,其中的具体任务都交由插件来完成。Maven为大多数构建任务编写并绑定了默认的插件,如针对编译的插件:maven-compiler-plugin。用户也可自行配置或编写插件。

    4.1 . 三套生命周期

     clean、default、site,每个生命周期都包含了一些阶段(phase)。三套生命周期相互独立,但各个生命周期中的phase却是有顺序的,且后面的phase依赖于前面的phase。执行某个phase时,其前面的phase会依顺序执行,但不会触发另外两套生命周期中的任何phase。

    4.1.1clean生命周期

    1. pre-clean    :执行清理前的工作;
    2. clean    :清理上一次构建生成的所有文件;
    3. post-clean    :执行清理后的工作

    4.1.2default生命周期

    default生命周期是最核心的,它包含了构建项目时真正需要执行的所有步骤。

    1. validate
    2. initialize
    3. generate-sources
    4. process-sources
    5. generate-resources
    6. process-resources    :复制和处理资源文件到target目录,准备打包;
    7. compile    :编译项目的源代码;
    8. process-classes
    9. generate-test-sources
    10. process-test-sources
    11. generate-test-resources
    12. process-test-resources
    13. test-compile    :编译测试源代码;
    14. process-test-classes
    15. test    :运行测试代码;
    16. prepare-package
    17. package    :打包成jar或者war或者其他格式的分发包;
    18. pre-integration-test
    19. integration-test
    20. post-integration-test
    21. verify
    22. install    :将打好的包安装到本地仓库,供其他项目使用;
    23. deploy    :将打好的包安装到远程仓库,供其他项目使用;

    4.1.3site生命周期

    1. pre-site
    2. site    :生成项目的站点文档;
    3. post-site
    4. site-deploy    :发布生成的站点文档

    4.2Maven的插件

    Maven的核心文件很小,主要的任务都是由插件来完成。定位到:%本地仓库%orgapachemavenplugins,可以看到一些下载好的插件:

    Maven官网上有更详细的官方插件列表:

     

    4.2.1 插件的目标(Plugin Goals)

    一个插件通常可以完成多个任务,每一个任务就叫做插件的一个目标。如执行mvn install命令时,调用的插件和执行的插件目标如下:

    每个插件都有哪些个目标,官方文档有更详细的说明:Maven Plugins:http://maven.apache.org/plugins/index.html

    4.2.2将插件绑定到生命周期

    Maven的生命周期是抽象的,实际需要插件来完成任务,这一过程是通过将插件的目标(goal)绑定到生命周期的具体阶段(phase)来完成的。如:将maven-compiler-plugin插件的compile目标绑定到default生命周期的compile阶段,完成项目的源代码编译:

    4.2.3 内置的绑定

    Maven对一些生命周期的阶段(phase)默认绑定了插件目标,因为不同的项目有jar、war、pom等不同的打包方式,因此对应的有不同的绑定关系,其中

    针对default生命周期的jar包打包方式的绑定关系如下:

     

    第二列中,冒号后面即是绑定的插件目标,冒号前面是插件的前缀(prefix),是配置和使用插件的一种简化方式Plugin Prefix

    http://maven.apache.org/guides/introduction/introduction-to-plugin-prefix-mapping.html

    clean tomcat7:run

     4.2.3自定义绑定

    用户可以根据需要将任何插件目标绑定到任何生命周期的阶段,如:将maven-source-plugin的jar-no-fork目标绑定到default生命周期的package阶段,这样,以后在执行mvn package命令打包项目时,在package阶段之后会执行源代码打包,生成如:ehcache-core-2.5.0-sources.jar形式的源码包。

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.2.1</version>
                <executions>
                    <execution>
                        <id>attach-source</id>
                        <phase>package</phase><!-- 要绑定到的生命周期的阶段 -->
                        <goals>
                            <goal>jar-no-fork</goal><!-- 要绑定的插件的目标 -->
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        ……
    </build>

    4.2.4 配置插件

    Maven插件高度易扩展,可以方便的进行自定义配置。如:配置maven-compiler-plugin插件编译源代码的JDK版本为1.7:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.7</source>
            <target>1.7</target>
        </configuration>
    </plugin>

    也可以对插件的各个目标进行更具体的配置。Configuring Plug-ins

    http://maven.apache.org/guides/mini/guide-configuring-plugins.html

    4.2.5插件仓库

    跟其他构件一样,插件也是根据坐标存储在Maven仓库中。超级POM中Maven配置的默认插件远程仓库如下:

    <pluginRepositories>
        <pluginRepository>
          <id>central</id>
          <name>Central Repository</name>
          <url>http://repo.maven.apache.org/maven2</url>
          <layout>default</layout>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
          <releases>
            <updatePolicy>never</updatePolicy>
          </releases>
        </pluginRepository>
    </pluginRepositories>

    5、继承(不熟)

    上一级的maven依赖能被这一级使用

    6、连接私服

    私服地址
    http://localhost:8081/nexus
    默认账号
    账号名:admin
    密码:admin123

    修改maven的配置文件

     <mirrors>
        <!-- mirror
         | Specifies a repository mirror site to use instead of a given repository. The repository that
         | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
         | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
         |
        <mirror>
          <id>mirrorId</id>
          <mirrorOf>repositoryId</mirrorOf>
          <name>Human Readable Name for this Mirror.</name>
          <url>http://my.repository.com/repo/path</url>
        </mirror>
         -->
          <mirror>
              <mirrorOf>central</mirrorOf>
              <name>central-mirror</name>
              <url>http://127.0.0.1:8081/nexus/content/repositories/com.lamsey.com/</url>
          </mirror>
      </mirrors>

    7、聚合

    :一个项目中的多个工程想要安装到仓库中时,只能一个一个手动安装,比较繁琐,配置聚合之后就能够实现一键安装

      <parent>
        <groupId>com.lamsey</groupId>
        <artifactId>lamsey-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
      </parent>
      <artifactId>lamsey-manager</artifactId>
      <packaging>pom</packaging>
      <!-- 聚合工程  -->
      <modules>
          <module>lamsey-manager-pojo</module>
          <module>lamsey-manager-mapper</module>
          <module>lamsey-manager-interface</module>  
          <module>lamsey-manager-service</module>
      </modules>

     聚合的效果图如下:

  • 相关阅读:
    SQL开窗函数
    mysql中可以实现类似if判断的方法
    sql中COUNT(*)、COUNT(字段名)的区别
    shiro学习笔记_0600_自定义realm实现授权
    shiro学习笔记_0500_授权
    shiro学习笔记_0400_自定义realm实现身份认证
    shiro学习笔记_0300_jdbcRealm和认证策略
    shiro学习笔记_0200_认证
    点击div跳转的方法
    jq获取网页url
  • 原文地址:https://www.cnblogs.com/limingxian537423/p/7158395.html
Copyright © 2011-2022 走看看