Maven的高级属性和功能

  1. 每个项目的根pom.xml都有
    表明了本项目的groupId、artifactId、version
    com.csvw.sx.ca
    ca-spring-cloud-starter
    2.1.8

Maven parent

作用

  1. 在parent引入公共的jar包,子模块直接使用,不需要单独申明引用,比如eureka的jar包、lombok的jar包
  2. 在parent引入dependencyManagement,并不会引入对应的jar包,这里的jar包不是所有的子模块都会用到,部分子模块会用到,比如springmvc的jar包,只有包含web的模块才需要这方面的jar包,dependencyManagement用来指定version和scope

最常见的是spring-boot-starter-parent,里面定义了 spring-boot、actuator、aop等等的版本,但是他没有额外直接引入任何jar包,就是指定了版本的作用

    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.8.RELEASE
        
    

Maven Scope

  1. compile(默认)
    缺省值,适用于所有阶段,会随着项目一起发布。使用此依赖范围的Maven依赖,对于编译、测试、运行三种classpath都有效。典型的例子是spring-code,在编译、测试和运行的时候都需要使用该依赖。

  2. test
    测试依赖范围。使用次依赖范围的Maven依赖,只对于测试classpath有效,在编译主代码或者运行项目的使用时将无法使用此依赖。典型的例子是Jnuit,它只有在编译测试代码及运行测试的时候才需要。

    
        org.springframework.boot
        spring-boot-starter-test
        test
    
  1. provided
    对于编译和测试classpath有效,但在运行时候无效。典型的例子是servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器以及提供,就不需要Maven重复地引入一遍。
    比如lombok和servlet.jar
  • 因为编译阶段,代码和容器是隔离的,ide并不确定你最终会用什么容器来运行该class文件,比如servlet-api.jar包,就必须要有,否则编译不通过。但是常见的web容器当中也有servlet-api.jar,避免重复,就必须在代码中 servlet-api.jar设置为compile,只在编译的时候起作用
  • lombok的jar包,因为正在生成jar包的时候,会生成一个完整的实体类,而不需要动态的生成对应的属性和方法,所以没必要打包到最终的jar包中,多余的

maven 中optional 和 exclusion标签

有时候parent里面有一个 optional=true的jar包,但是子模块并不需要,如果parent如果不用optional来申明的话,那么子模块必须用exclusion来排除冲突的jar包
这个很厉害,parent里面 optional=true的jar包,不会被子模块直接引用

nexus的结合使用

如果拉取不到jar包,直接去nexus上查一下,是否存在相应的jar包,根据 maven的setting.xml找到url然后进去对于的repository里面去找jar包

你可能感兴趣的:(Maven的高级属性和功能)