maven3 基本知识点

1. maven 约定的目录结构:
目录 备注
${basedir} 存放pom.xml和所有的子目录
${basedir}/src/main/java 项目的java源代码
${basedir}/src/main/resources 项目的资源,比如说property文件,springmvc.xml
${basedir}/src/test/java 项目的测试类,比如说Junit代码
${basedir}/src/test/resources 测试用的资源
${basedir}/src/main/webapp/WEB-INF web应用文件目录,web项目的信息,比如存放web.xml、本地图片、jsp视图页面
${basedir}/target 打包输出目录
${basedir}/target/classes 编译输出目录
${basedir}/target/test-classes 测试编译输出目录
Test.java Maven只会自动运行符合该命名规则的测试类
~/.m2/repository Maven默认的本地仓库目录位置
2. maven 基本 pom 样例

 
    
    4.0.0
    
    com.companyname.project-group
 
    
    project
 
    
    1.0

3.生命周期
生命周期阶段 描述
validate(校验) 校验项目是否正确并且所有必要的信息可以完成项目的构建过程。
initialize(初始化) 初始化构建状态,比如设置属性值。
generate-sources(生成源代码) 生成包含在编译阶段中的任何源代码。
process-sources(处理源代码) 处理源代码,比如说,过滤任意值。
generate-resources(生成资源文件) 生成将会包含在项目包中的资源文件。
process-resources (处理资源文件) 复制和处理资源到目标目录,为打包阶段最好准备。
compile(编译) 编译项目的源代码。
process-classes(处理类文件) 处理编译生成的文件,比如说对Java class文件做字节码改善优化。
generate-test-sources(生成测试源代码) 生成包含在编译阶段中的任何测试源代码。
process-test-sources(处理测试源代码) 处理测试源代码,比如说,过滤任意值。
generate-test-resources(生成测试资源文件) 为测试创建资源文件。
process-test-resources(处理测试资源文件) 复制和处理测试资源到目标目录。
test-compile(编译测试源码) 编译测试源代码到测试目标目录.
process-test-classes(处理测试类文件) 处理测试源码编译生成的文件。
test(测试) 使用合适的单元测试框架运行测试(Juint是其中之一)。
prepare-package(准备打包) 在实际打包之前,执行任何的必要的操作为打包做准备。
package(打包) 将编译后的代码打包成可分发格式的文件,比如JAR、WAR或者EAR文件。
pre-integration-test(集成测试前) 在执行集成测试前进行必要的动作。比如说,搭建需要的环境。
integration-test(集成测试) 处理和部署项目到可以运行集成测试环境中。
post-integration-test(集成测试后) 在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境。
verify (验证) 运行任意的检查来验证项目包有效且达到质量标准。
install(安装) 安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。
deploy(部署) 将最终的项目包复制到远程仓库中与其他开发者和项目共享。
  • 命令行调用
    在开发环境中,使用下面的命令去构建、安装工程到本地仓库
mvn install

这个命令在执行 install 阶段前,按顺序执行了 default 生命周期的阶段 (validate,compile,package,等等),我们只需要调用最后一个阶段,如这里是 install。

在构建环境中,使用下面的调用来纯净地构建和部署项目到共享仓库中

mvn clean deploy

这行命令也可以用于多模块的情况下,即包含多个子项目的项目,Maven 会在每一个子项目执行 clean 命令,然后再执行 deploy 命令。

4. 仓库

Maven 仓库有三种类型:
本地(local)
中央(central)
远程(remote)

Maven 依赖搜索顺序
当我们执行 Maven 构建命令时,Maven 开始按照以下顺序查找依赖的库:

步骤 1 - 在本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。
步骤 2 - 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤 4,如果找到了则下载到本地仓库中以备将来引用。
步骤 3 - 如果远程仓库没有被设置,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)。
步骤 4 - 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库以备将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)。

阿里云的仓库
Maven 仓库默认在国外, 国内使用难免很慢

第一步:修改 maven 根目录下的 conf 文件夹中的 setting.xml 文件,在 mirrors 节点上,添加内容如下:


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

第二步: pom.xml文件里添加:

  
          
            alimaven  
            aliyun maven  
            http://maven.aliyun.com/nexus/content/groups/public/  
              
                true  
              
              
                false  
              
          

5. 快照

快照是一种特殊的版本,指定了某个当前的开发进度的副本。不同于常规的版本,Maven 每次构建都会在远程仓库中检查新的快照。 现在 data-service 团队会每次发布更新代码的快照到仓库中,比如说 data-service:1.0-SNAPSHOT 来替代旧的快照 jar 包。

6.依赖范围

compile(编译范围)
默认范围,会被打包
provided
作用于编译、测试,构建时依赖不会被打包,常见于自己封装的组件!
runtime(运行时范围)
runtime 依赖在运行和测试系统的时候需要(运行时才可用),但在编译的时候不需要
test(测试范围)
system(系统范围)
system范围依赖与provided 类似,但是你必须显式的提供一个对于本地系统中JAR 文件的路径。

7.dependencies与dependencyManagement的区别

dependencyManagement只声明不真正引用,dependencies时可以不用再写版本号。


        
            
            
                org.springframework.boot
                spring-boot-dependencies
                ${springboot.version}
                pom
                import
            

            
                mysql
                mysql-connector-java
                ${mysql.version}
                pom
                import
            
        
    

dependencies会真正引用。

8.发布本地jar到私服
mvn deploy:deploy-file -DgroupId= -DartifactId= -Dversion=RELEASE -Dpackaging=jar -Dfile= -Durl=http://ip:8080/repository/third-patry/ -DrepositoryId=third-party
9.install到本机
mvn install:install-file -DgroupId= -DartifactId= -Dpackaging=jar -Dfile=
10.排除jar包

    ...
    ...
    ...
    
        
            ...
            ...
        
        
            ...
            ...
        
    


示例

发布自己的组件到中央仓库,pom样例,以yt-web为例:


    4.0.0
    com.github.javawebers
    yt-web
    1.5.3

    https://github.com/javawebers/yt-web
    yt-web
    webs
    
        scm:[email protected]:javawebers/yt-web.git
        scm:[email protected]:javawebers/yt-web.git
        [email protected]:javawebers/yt-web.git
    
    
        
            The Apache Software License, Version 2.0
            http://www.apache.org/licenses/LICENSE-2.0.txt
        
    
    
        
            liujiasheng
            [email protected]
        
        
            limiao
            [email protected]
        
    

    
        UTF-8
        2.2.2.RELEASE
        1.3.1
    

    
        
            com.github.javawebers
            yt-commons
            ${yt-commons.version}
        

        
        
            org.springframework.boot
            spring-boot-starter-web
            ${spring-boot.version}
            provided
        
        
            org.springframework.boot
            spring-boot-starter-aop
            ${spring-boot.version}
            provided
        

        
        
            org.springframework.boot
            spring-boot-starter-test
            ${spring-boot.version}
            test
        
        
            org.testng
            testng
            6.14.3
            test
        
        
            io.springfox
            springfox-swagger2
            2.9.2
            test
        
        
            io.springfox
            springfox-swagger-ui
            2.9.2
            test
        
    
    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.8.1
                
                    UTF-8
                    1.8
                    1.8
                
            
                
                    org.sonatype.plugins
                    nexus-staging-maven-plugin
                    1.6.8
                    true
                    
                        release
                        https://oss.sonatype.org/
                        true
                    
                
                
                
                    org.apache.maven.plugins
                    maven-source-plugin
                    3.2.0
                    
                        
                            attach-sources
                            
                                jar-no-fork
                            
                        
                    
                
                
                
                    org.apache.maven.plugins
                    maven-javadoc-plugin
                    3.1.1
                    
                        
                            attach-javadocs
                            
                                jar
                            
                        
                    
                
                
                
                    org.apache.maven.plugins
                    maven-gpg-plugin
                    1.6
                    
                        
                            sign-artifacts
                            verify
                            
                                sign
                            
                        
                    
                
            
    
    
        
            release
            https://oss.sonatype.org/content/repositories/snapshots/
        
        
            release
            https://oss.sonatype.org/service/local/staging/deploy/maven2/
        
    

    
        
            jdk18
            
                true
                1.8
            
            
                1.8
                1.8
                1.8
            
        
    


父Pom 子Pom


        chapter1
        chapter2
        chapter3
        chapter4
        ...
    
    pom
4.0.0
    
        com.github.limiaogithub
        ...
        1.0
    
    jar
    chapter2

跳过测试命令

-Dmaven.test.skip=true

设置新版本号,并更新所有子Pom

mvn versions:set -DnewVersion=${build_version}
mvn -N versions:update-child-modules

回退新版本号

mvn versions:revert

只构建依赖的模块

install -pl ... -e

你可能感兴趣的:(maven3 基本知识点)