工具篇–maven
(只整干货)
Maven官网:https://maven.apache.org/(下载,安装,配置环境变量)
中央仓库下载:http://repo1.maven.org/maven2/
Maven是干啥的?
就是管理项目用的工具。Maven还为全世界的Java开发者提供了一个免费的中央仓库,只要定位了坐标
Maven目录结构
既然管理项目,就应该与项目结合在一起说,创建一个maven企业级项目,我们看一下目录特征:
路径 |
说明 |
src |
源码目录 |
src/main |
源码主目录 |
src/test |
测试源码主目录 |
src/main/java |
java源文件目录 |
src/main/resources |
资源目录 |
src/main/webapp |
前端资源目录 |
src/test/java |
测试java源文件目录 |
src/test/resources |
测试资源文件目录 |
README.md |
项目描述 |
pom.xml |
maven项目定义 |
LICENSE.txt |
版本声明 |
CHANGELOG.md |
更变日志 |
support |
附加支持工具 |
tools |
附加工具 |
bin |
有用脚本 |
target |
构建输出目录 |
Maven坐标解释
com.baidu.checker
checker-bill-
0.2.1
pom
groupId:定义当前maven是项目隶属的实际工程,与java包命名基本相似,通常和域名相反。
artifactId:该元素定义实际项目的一个版块,通常以实际项目名称作为前缀
version:该元素定义maven当前版本
packaging:该元素定义maven打包方式pom、jar、war
其中groupId,artifactId,version 是必须定义的,packaging是可选的,打包的默认值。
初步分析pom.xml
4.0.0
com.baidu.check
check-bill
1.0-SNAPSHOT
war
project-test
UTF-8
junit
junit
3.8.1
test
false
4.3.5.RELEASE
org.springframework
spring-webmvc
${org.springframework.version}
org.springframework
spring-aop
${org.springframework.version}
org.springframework
spring-aspects
${org.springframework.version}
org.springframework
spring-beans
${org.springframework.version}
org.springframework
spring-context
${org.springframework.version}
org.springframework
spring-context-support
${org.springframework.version}
org.springframework
spring-core
${org.springframework.version}
commons-logging
commons-logging
org.springframework
spring-expression
${org.springframework.version}
org.springframework
spring-jdbc
${org.springframework.version}
org.springframework
spring-tx
${org.springframework.version}
org.springframework
spring-web
${org.springframework.version}
scope
maven认为,程序对外部的依赖会随着程序的所处阶段和应用场景而变化,所以maven中的依赖关系有作用域(scope)的限制。
scope包含如下的取值:compile(编译范围)、provided(已提供范围)、runtime(运行时范围)、test(测试范围)、system(系统范围)
optional
设置指依赖是否可选,默认为false,即子项目默认都继承:为true,则子项目必需显示的引入,与dependencyManagement里定义的依赖类似
maven指令
Maven普通常用命令列表 |
|
指令名称 |
指令含义 |
mvn –version |
显示版本信息 |
mvn clean |
清理项目生产的临时文件,一般是模块下的target目录 |
mvn compile |
编译源代码,一般编译模块下的src/main/java目录 |
mvn package |
项目打包工具,会在模块下的target目录生成jar或war等文件 |
mvn test |
测试命令,或执行src/test/java/下junit的测试用例. |
mvn install |
将打包的jar/war文件复制到你的本地仓库中,供其他模块使用 |
mvn deploy |
将打包的文件发布到远程参考,提供其他人员进行下载依赖 |
mvn site |
生成项目相关信息的网站 |
mvn eclipse:eclipse |
将项目转化为Eclipse项目 |
mvn dependency:tree |
打印出项目的整个依赖树 |
mvn archetype:generate |
创建Maven的普通java项目 |
mvn tomcat:run |
在tomcat容器中运行web应用 |
mvn jetty:run |
调用 Jetty 插件的 Run 目标在 Jetty Servlet 容器中启动 web 应用 |
在pom.xml中配置skip属性
org.apache.maven.plugins
maven-surefire-plugin
2.18.1
true
打包发布
mvn clean package -Dmaven.test.skip=true -Pdev -U
安装构件到本地仓库
mvn clean install -Dmaven.test.skip=true -Pdev -U
发布构件到远程仓库
mvn clean deploy -Dmaven.test.skip=true -Pdev -U
聚合与继承
聚合
在使用Maven的过程中,手边可能有很多个项目,都需要打包,或者同时进行一些操作,这时候,如果一个一个手动的去操作,就会显得很麻烦。这时候,使用聚合就可以解决问题了。
现在想将son-1和son-2同时进行打包,这个maven的聚合功能就可已满足需求。如果不会创建聚合项目请参考
son-1和son-2是正常项目,father是一个空项目,将son-1和son-2聚合到father项目中,通过打包father项目就可以打包son-1和son-2项目。pom.xml是通过modules这个标签实现的。
聚合项目father的pom.xml文件
4.0.0
com.father.dome
father
pom
1.0-SNAPSHOT
father
http://maven.apache.org
son-one
son-two
继承
继承的意思和java聚成意义相似,只不过maven继承的pom。继承的方式与添加所需要的jar差不多,通过parent标签实现的。
项目继承pather项目pom文件如下:
4.0.0
com.father.dome
dome-father
pom
1.0-SNAPSHOT
father
http://maven.apache.org
junit
junit
4.12
test
项目继承son项目pom文件如下
4.0.0
com.father.dome
dome-father
1.0-SNAPSHOT
com.son.dome
dome-son
pom
1.0-SNAPSHOT
son
http://maven.apache.org
环境隔离
工程化项目组中开发时会有很多的项目部署环境,比如开发自测环境,测试环境,线上运行环境等等。maven实现了对不同环境进行隔离,不需要更改配置文件,避免出现问题。
三个环境隔离的pom.xml配置文件
uat
dev
dev
false
ROOT
src/main/profiles/dev
src/main/resources
uat
ROOT
src/main/profiles/uat
src/main/resources
live
live
false
ROOT
src/main/profiles/live
src/main/resources
使用不同环境进行项目打包:
mvn clean package -Dmaven.test.skip=true -Pdev(环境)
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net