常用操作
安装
- 下载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–>
a c –>依赖版本是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包中。
##仓库
- 本地仓库
- 远程仓库
- 中央仓库