maven总结
maven总结
Posted on 2019-03-02 17:41 TalkLessDoMore 阅读(…) 评论(…) 编辑 收藏
一、maven的介绍
maven是一个项目构建和jar包依赖的管理工具。
二、使用maven的优势
①可以帮助我们构建项目,从验证,编译,测试,打包,检查,安装,部署一整套服务都会提供。
②可以帮助我们管理jar包的依赖和依赖关系。
三、maven知识点总结
1.maven的基本命令
mvn clean:清理,将根目录下面的target目录清理掉;
mvn compile:编译,将项目中的.java文件编译成.class文件;
mvn test:测试,执行项目下src/test/java下的命名为Xxx…Test.java文件的单元测试类;
mvn package:打包,将项目打包放置在项目根目录.target下;
mvn install:安装,将项目打包到自己本地环境;
mvn deploy:部署,将项目部署到我们的私服环境;
mvn package -DskipTest:打包跳过测试;
mvn dependency:tree:查看依赖的树形结构,用于依赖冲突排除;
mvn install:install-file “-Dfile=jar包完整地址或相对地址” “-DgroupId=自定义的groupID” “-DartifactId=自定义的artifactid” “-Dversion=自定义版本号” “-Dpackaging=jar” 将已有jar打包到本地仓库;
mvn deploy:deploy-file -Dfile=jar包 -DgroupId=groupID -DartifactId=artifacid -Dversion=版本号 -Dpackaging=jar -Durl=http://ip:port/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty :将本地已有的jar打包到私服;
2.maven的生命周期
2.1清理生命周期
pre-clean:执行清理前需要完成的工作
clean:清理上一次构建生成的文件
post-clean:执行清理后需要完成的工作
2.2默认生命周期
validate:验证工程是否正确,所有需要的资源是否可用。
compile:编译项目的源代码。
test:使用合适的单元测试框架来测试已编译的源代码。这些测试不需要已打包和布署。
package:把已编译的代码打包成可发布的格式,比如jar。
verify:运行所有检查,验证包是否有效且达到质量标准。
install:把包安装到maven本地仓库,可以被其他工程作为依赖来使用。
deploy:在集成或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。
2.3站点生命周期
pre-site:生成项目站点(war)前工作
site:生成项目站点(war)
post-site:打包后工作
site-deploy:按照pom.xml配置把生成的项目站点部署到服务器上
3.依赖的范围
Maven在编译主代码的时候需要使用一套classpath,在编译和执行测试的时候会使用另一套classpath,实际运行项目的时候,又会使用一套classpath。
依赖范围就是用来控制依赖与这三种classpath(编译classpath、测试classpath、运行classpath)的关系,
Maven有以下几种依赖范围:
依赖范围 |
对于编译的classPath |
对于测试的calssPath |
对于运行的classPath |
示例 |
Compile |
Y |
Y |
Y |
spring-core |
Test |
|
Y |
|
Junit |
Provided |
Y |
Y |
|
servlet-api |
Runtime |
|
Y |
Y |
JDBC驱动
|
compile:如果没有指定,就会默认使用该依赖范围,对于编译、测试、运行三种classpath都有效。
test: 只对于测试classpath有效。
provided: 对于编译和测试classpath有效,但在运行时无效。
runtime: 对于测试和运行classpath有效。
4.依赖传递
直接依赖\间接依赖 |
Compile |
Test |
Provided |
Runtime |
Compile |
Compile |
|
|
Runtime |
Test |
Test |
|
|
Test |
Provided |
Provided |
|
Provided |
Provided |
Runtime |
Runtime |
|
|
Runtime |
当有A,B,C;A依赖B,B依赖C;A与C就产生依赖传递;
如图:直接依赖于间接依赖的关系;示例:
如果我们A只是依赖B的某一功能,但并不想引入C中的某一jar,可以设置scop为provided;根据我们对第一点的分析provided会对编译的classPath和测试的classPath有效但在运行时无效不会打包到lib文件夹;
图解:直接依赖是Compile,间接依赖是provided时,该jar的依赖范围是provide;
5.打包插件:maven-source-plugin
- <plugin>
- <artifactId>maven-source-plugin</artifactId> //插件名
- <version>2.4</version> //版本
- <configuration>
- <attach>true</attach> //attach参数指定是否将java源附加到项目的工件列表。
- </configuration>
- <executions>
- <execution>
- <phase>package</phase> //执行命令
- <goals>
- <goal>jar-no-fork</goal> //直接执行打包操作,没有前面的生命周期
- </goals>
- </execution>
- </executions>
- </plugin>
四、总结
在实际开发中使用的maven的场景会非常多,比如每次编码完成之后,编写了众多的测试类,可以自己单元进行测试,也可以使用maven命令进行整体测试;
在项目迭代中只要修改pom版本号就可以清楚进行版本的迭代;
如果我们写一个项目需要供组内小伙伴使用我们可以将我们写的项目部署到私服上就可以共享了;
项目的依赖也是非常重要的,尤其是scope的定义,当我们不需要传递依赖的时候最好设置成provider,这样会缩小打包的大小;
项目依赖冲突,可以参考一种的树结构查看命令,然后进行排除就可以了。