博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
maven实战总结
阅读量:2215 次
发布时间:2019-05-07

本文共 2975 字,大约阅读时间需要 9 分钟。

要点

  • maven默认的目录结构
    • 源码:src/main/java
    • 编译输出目录为 target/classes/
    • 打包方式为jar
    • 包输出目录为target
  • scope
    • 指定依赖范围,如果为test,只在测试单元中生效。
    • 默认是compile
  • build中添加maven-compiler-plugin
    • 因为历史原因,compiler只能支持到1.3,所以要配置
  • 进行编译测试以后,就可以进行打包,使用maven clean package就可以了。
  • 一个project中有多个module,或者多个项目。执行mvn clean install就会将你的包打到~/.m2/repository中,供本地其他的项目使用。而mvn clean deploy 会将你的jar包打包到远程仓库中
  • 如果想让你的jar包中某个类的main函数可用,就需要再添加一个plugin : maven-shade-plugin。这样在打的jar中的META-INF/MANIFEST.MF 中就可以看到Main-Class: com.taobao.maven.example.HelloWorld

  • 依赖范围:

    • 控制依赖与三种classpath(编译classpath、测试classpath、运行classpath)之间的关系
    • 而maven有以下几种依赖范围
      • compile:默认情况下使用;三种都有效
      • test:只对测试classpath有效
      • provided:已提供依赖范围。只对编译和测试两种classpath有效。例如:servlet-api,在运行时不需要引入,因为容器已经提供了。
      • runtime:运行时依赖范围。对于测试和运行有效。例如JDBC驱动的实现。
      • system:和provided一样。但其路径是要显示指定本地的路径。不通过maven来拉取jar包。因此可能造成系统不可移植。慎用。
      • import:对以上三种都不产生影响。
  • 路径最近者优先 和 第一声明者优先
  • mvn dependency:

    • mvn dependency:list,将依赖以列表的形式展现出来
    • mvn dependency:tree, 将依赖以树的形式展现出来
    • mvn dependency: analyze, 分析依赖数,如果是间接引入会提示,如果有显示引入但是没有用到也会提示(但这种提示不准确,要小心删除)
  • 本地仓库

    • 当执行编译和测试的时候,从本地仓库获取依赖文件。
    • 默认情况下都在用户自己的目录下有: ~/m2/repository
    • 如果要修改自己的目录,就要在~/m2/setting.xml中修改来定义。默认情况下是没有了,需要从maven安装目录中拷贝该文件。
  • 超级pom文件
    • central
      • 指定从哪个中央仓库中下载所需要的jar包,一般指定为公司内部的地址
      • 指定将本地的包打包到哪个远程仓库中,一般也指定为公司内部地址
  • maven生命周期

    • 三套相互独立的生命周期,clean(清理项目)、default(构建项目)、site(建立项目站点)
    • clean
      • pre-clean
      • clean
      • post-clean
    • default (定义了真正构建时所需要执行的所有步骤)
      • validate
      • initialize
      • generate-sources
      • process-sources(对resources目录中的内容变量进行替换)
      • generate-resources
      • process-resources
      • compile (编译代码)
      • process-classes
      • generate-test-sources
      • process-test-sources (对test下的resources内容进行变量替换)
      • generate-test-resources
      • process-test-resources
      • test-compile (编译测试代码)
      • process-test-classes
      • test (运行测试单元进行测试)
      • prepare-package
      • package
      • pre-integration0test
      • integration-test
      • post-integration-test
      • verify
      • install (将包安装到maven本地仓库)
      • deploy (将包推送到远程仓库中)
    • site
  • 聚合

    • 多个module之间要相互合作,就需要类似d4s那样,建立一个根目录,然后下面是各个module模块,模块中再有自己的src/java/main等目录。
    • 这事就要有pom存在,这里必须为pom,否则默认就是jar,这样会编译失败。还要指定子模块都有哪些d4s-client等。
    • d4s目录和d4s-client目录,可以是父子关系,也可以是平行的目录结构。
      • 如果是这样的话,就需要使用../d4s-client,其实理解成文件的访问就好了。
  • 继承
    • 由于每个模块都有自己的jar包,也有自己的build,这样就会造成大量的重复,为了避免这种情况的出现,就可以使用parent包,来汇总。例如d4s-parent。
    • parent里面的pom也要使用pom
    • 该目录下只有pom.xml文件
    • 在中,一定要设置, 这样才能正确的找到父亲pom的位置。否则默认情况就是../pom.xml。(除非没有建立专门的父pom.xml文件,使用顶层的pom文件作为父pom)
    • 使用继承带来的另一种效果是,子模块可以继承父pom的groupId和version。也可以显示的自己随便定义。
  • 依赖管理
    • 如果某一个模块当中要引入特定的jar包,但是其他模块中是不会使用的。需要在父pom.xml中使用,来管理各种依赖。那么在子pom中,指定了哪些jar包,才能引入,没有指定的话,就不会被引入。
  • dwork-web目录

    • 除了基本的src/main/java 和 src/main/resources以及相应的测试目录以外,还有一个web资源目录,src/main/webapp/
      • project
        • pom.xml
        • src/
          • main
            • java/
              • *.java
            • resources/
              • config.properties
            • webapp
              • WEB-INF/
                • web.xml
              • img/
              • css/
              • js/
              • index.html
              • sample.jsp
          • test
            • java
            • resources
  • web目录中的pom

    • 引入serlet-api 和 jsp-api,但其scope要是provide,最后不会打包到war文件中,因为web容器中都会提供这两种类库。
javax.servlet
servlet-api
2.5
provided
  • 可以通过 name 来指定最后生成的war包名称为 name.war
  • web.xml配置
// 用来为WEB项目启动Spring的ioc容器,从而实现bean的注入
org.springframework.web.context.ContextLoaderListener

转载地址:http://pmryb.baihongyu.com/

你可能感兴趣的文章
搞懂分布式技术12:分布式ID生成方案
查看>>
搞懂分布式技术13:缓存的那些事
查看>>
搞懂分布式技术14:Spring Boot使用注解集成Redis缓存
查看>>
搞懂分布式技术15:缓存更新的套路
查看>>
搞懂分布式技术16:浅谈分布式锁的几种方案
查看>>
搞懂分布式技术17:浅析分布式事务
查看>>
搞懂分布式技术18:分布式事务常用解决方案
查看>>
搞懂分布式技术19:使用RocketMQ事务消息解决分布式事务
查看>>
搞懂分布式技术20:消息队列因何而生
查看>>
搞懂分布式技术21:浅谈分布式消息技术 Kafka
查看>>
后端技术杂谈1:搜索引擎基础倒排索引
查看>>
后端技术杂谈2:搜索引擎工作原理
查看>>
后端技术杂谈3:Lucene基础原理与实践
查看>>
后端技术杂谈4:Elasticsearch与solr入门实践
查看>>
后端技术杂谈5:云计算的前世今生
查看>>
后端技术杂谈6:白话虚拟化技术
查看>>
后端技术杂谈7:OpenStack的基石KVM
查看>>
后端技术杂谈8:OpenStack架构设计
查看>>
后端技术杂谈9:先搞懂Docker核心概念吧
查看>>
后端技术杂谈10:Docker 核心技术与实现原理
查看>>