maven常用总结

2019/06/25

常用操作

安装

  • 下载maven的3.0.4版本,设置环境变量中的path

本地仓库的安装

  • 修改maven目录下的conf中的setting.xml

ecplise无法测试添加变量

  • -Dmaven.multiModuleProjectDirectory=$MAVEN_HOME

创建代码和测试代码

  • 源代码应该放置到src/main/java中
  • 源代码的资源文件应该放置在src/main/resources文件夹中
  • 测试代码应该放置到src/test/java中
  • 测试代码的资源文件应该放置在src/test/resources文件夹中

maven的生成方式

  • 由于maven有一些固定的生成模式,所以使用 mvn archetype generate可以自动完成这个骨架的建立
  • 默认STS和myeclipse,eclipse4.6都自带maven支持

本地jar导入本地仓库 导入外部jar包

mvn install:install-file -Dfile=D:/app/SuperWang/product/11.2.0/dbhome_1/jdbc/lib/ojdbc6.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0 -Dpackaging=jar

版本管理

  • 总版本号.分支版本号.小版本号-里程碑版本
  • 总版本号的变动一般表示框架的变动
  • 分支版本号:一般表示增加了一些功能
  • 小版本号:在分支版本上面进行bug的修复
  • 里程碑:SNAPSHOT–>alpha–>beta–>release–>GA
  • user0.0.1-SNAPSHOT–>user0.0.1-Release—>user1.0.0SHAPSHOT –>user1.0.0-Rlease

Maven中-DskipTests和-Dmaven.test.skip=true的区别

  • 在使用mvn package进行编译、打包时,Maven会执行src/test/java中的JUnit测试用例,有时为了跳过测试,会使用参数-DskipTests和-Dmaven.test.skip=true,这两个参数的主要区别是:
  • -DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下。
  • -Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类

生命周期

运行mvn –> 不同生命周期的命令可以同步执行

(clean生命周期)

(default生命周期 compile –> test –> package –> install –>deploy)

(site生命周期)

  • mvn site –>对项目的说明
  • mvn clean –>表示运行清理操作(会默认把target文件夹中的数据清理)
  • mvn clean compile–>表示先运行清理之后运行编译,会见代码编译到target文件夹中
  • mvn clean test–>运行清理和测试
  • mvn clean package–>运行清理和打包
  • mvn clean install–>运行清理和安装,会将打好的包安装到本地仓库中,以便其他的项目可以调用
  • mvn compile 编译已存在的java文件(resource,test中的文件不会编译)
  • mvn test 编译test中的java文件
  • mvn package 打包
  • mvn install 打包并安装到本地仓库 (主要用于jar)
  • mvn archetype generate 生成骨架
  • mvn deploy 打包发布到私服
  • mvn tomcat:run 运行tomcat

编译级别

  • Compile struts2-core

    编译时需要 测试时需要,,运行时需要,打包时需要

  • Runtime 数据库驱动包

    编译时不需要,测试时需要,,运行时需要,打包时需要

  • Provided jsp-api.jar servlet-api.jar

    编译时需要,测试(test)时也需要 ,运行时不需要,打包时不需要

  • Test junit.jar

    编译时不需要,测试时需要,运行时不需要,打包也不需要

  • system

    system 和provide相同,不过被依赖项不会从maven仓库抓,而是从本地系统文件拿,一定要配合systemPath使用

    - <systemPath>${basedir}/WebContent/WEB-INF/lib/hamcrest-core-1.3.jar</systemPath>
    - <!-- <scope>system</scope>
    - <systemPath>${project.basedir}/lib/sadk-3.2.0.8-unlimit.jar</systemPath> -->
    

作用域

  编译 测试 运行 打包
Compile        
Runtime ×      
Provided/system     × ×
Test ×   × ×

依赖的查询

  • 1、所有的依赖都是通过坐标来进行存储的(GAV–>groupId、artifactId、version)
  • 2、有一些网上的仓库提供了坐标的查询(http://mvnrepository.com)
  • 3、通过设置依赖
  • 4、maven是如何搜索依赖的?首先会在本地仓库查询如果本地仓库没有,就去中央仓库查询

依赖的传递性

  • 1、依赖是会被传递 A–>C B–>A ==> B–>C(这种依赖是基于compile这个范围进行传递)
  • 对于依赖的传递而言,主要是针对compile作用域传递

传递的冲突问题

  • 1、a–>b1.0 c–>b1.1 d–>a和c,这个时候在d的pom中,哪一个依赖先写就使用先写依赖的版本
  • 如果d–>ac–>依赖版本是b1.0
  • 2、a–>b1.0 c–>b1.1 d–>a和c–>b1.0 f–>d,c,如果路径的长短不一致就选择最小路径f–>b1.1
  • 3、如果希望精确的控制依赖包,可以使用依赖的排除功能进行控制
  • 4.所依赖的jar包会紧接在父jar的后面

目录结构

src/main/java和src/test/java 
这两个目录中的所有*.java文件会分别在comile和test-comiple阶段被编译,编译结果分别放到了target/classes和targe/test-classes目录中,但是这两个目录中的其他文件都会被忽略掉。
src/main/resouces和src/test/resources
这两个目录中的文件也会分别被复制到target/classes和target/test-classes目录中。
target/classes
打包插件默认会把这个目录中的所有内容打入到jar包或者war包中。

##仓库

  • 本地仓库
  • 远程仓库
  • 中央仓库

(本篇博文完结;中文字数一共:3256字,英文字数一共:320 字)


扫扫加关注公众号 让我们一起学习一起成长

(转载本站文章请注明作者和出处 IT超仔

Post Directory