maven实战总结

来源:互联网 发布:煤中全水分的算法 编辑:程序博客网 时间:2024/06/07 09:50

要点

  • 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容器中都会提供这两种类库。
<dependency>    <groupId>javax.servlet</groupId>    <artifactId>servlet-api</artifactId>    <version>2.5</version>    <scope>provided</scope></dependency>
  • 可以通过 name 来指定最后生成的war包名称为 name.war
  • web.xml配置
<listener>    // 用来为WEB项目启动Spring的ioc容器,从而实现bean的注入    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
0 0
原创粉丝点击