一:maven是什么?
Maven是干什么用的?这是很多开发者在刚开始接触Maven时最大的问题。之所以会提出这个问题,是因为即使不使用Maven 我们仍然可以进行B/S结构项目的开发,从表现层,业务逻辑层到持久化层再到数据库都有成熟的解决方案——不使用Maven我们一样可以开发项目啊?
其实Maven并不是直接用来辅助编码的,当我们整合各大框架进行web开发时,第一件事肯定就是整合jar包,一个工程下一份整合jar,工作区就会出现大量的重复文件,项目就会很臃肿,而maven只在本地仓库中保存一份,需要jar包的工程只需要以坐标的方式简单引用就可以了。
其二,很多jar包之间都是相互依赖的,当使用maven时,我们就完全没有必要去了解其中的依赖关系。
第三个原因:JavaEE开发中需要使用到的jar包种类繁多,几乎每个jar包在其本身的官网上的获取方式都不尽相同。为了查找一个jar包找遍互联网,身心俱疲,没有经历过的人或许体会不到这种折磨。不仅如此,费劲心血找的jar包里有的时候并没有你需要的那个类,又或者又同名的类没有你要的方法——以不规范的方式获取的jar包也往往是不规范的。
第四个原因:随着JavaEE项目的规模越来越大,开发团队也越来越大,每个人手里不可能保存整个项目,必须将项目拆分成多个工程模块协同开发,maven的依赖管理机制就是解决工程拆分后个模块相互调用和访问的。
二:安装Maven并建立maven web项目:
网上有很多详细的教程,我就不在重复,建议即使用的Myeclipse也自己装一个。创建修改本地仓库。期间肯定会遇到很多问题,网上大部分都有解决方案。缺少插件,添加依赖,更改配置等等问题,几乎都会碰到,但是每个人的电脑和配置又都不同,我是花了整整一整天的时间才建立了第一个没有出错的Maven项目。
后来又装了一次《番外篇:因为一个固态导致的——系统重装与JAVA软件环境下载安装配置》感觉很简单
三:Maven的常用操作
1)Maven常用构建命令:
(在命令行中执行)Maven的命令要在pom.xml所在目录中去执行
1.1 Mvn compile:编译的命令,存在于 target 目录
1.2 Mvn clean:清除命令,清除已经编译好的class文件,具体说清除的是target目录中的文件
1.3 Mvn test:测试命令,该命令会将test目录中的源码进行编译
1.4 Mvn package:打包命令
1.5 Mvn install:安装命令,会将打好的包,安装到本地仓库
常常有些时候编译器会根据路径下载jar包失败,这时这个这个命令就体现出他的价值了
你可以到
https://mvnrepository.com/:
搜索你所需要的jar包下载下来,然后使用这个命令将jar包安装到本地仓库
mvn install:install-file -Dfile="C:\Users\Administrator\Downloads\ojdbc6-11.2.0.4.0-atlassian-hosted.jar" -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.4.0-atlassian-hosted -Dpackaging=jar
1.6 组合命令
1.6.1 Mvn clean compile:下载jar包到本地仓库,先清空再编译
1.6.2 mvn clean test:先执行clean,再执行test,通常应用于测试环节
1.6.3 mvn clean package:先执行clean,再执行package,将项目打包,通常应用于发布前
执行过程:
清理————清空环境
编译————编译源码
测试————测试源码
打包————将编译的非测试类打包
1.6.4 mvn clean install:先执行clean,再执行install,将项目打包发布到本地仓库,通常应用于发布前
执行过程:
清理————清空环境
编译————编译源码
测试————测试源码
打包————将编译的非测试类打包
部署————将打好的包发布到资源仓库中
2)这里我就只是写在Myeclipse2017中的构建命令了。
maven clean 是清除target目录下的之前打好的jar包或者是war包;
maven install 将项目输出构件部署到本地仓库
maven generate-sources 会根据pom配置去生成源代码格式的包
maven build,页面如图,可以在Goals中输入命令进行执行,就相当于在CMD中输入的一样,不加mvn 如输入 compile 点击Run即可
3)运行项目,Maven可以安装Toamct-maven插件直接运行,不用配置本地的Tomact,首先在pom.xml文件中添加如下内容
1 <build> 2 <finalName>SSHMavenModer</finalName> 3 <plugins> 4 <plugin> 5 <groupId>org.apache.tomcat.maven</groupId> 6 <artifactId>tomcat7-maven-plugin</artifactId> 7 <version>2.0</version> 8 </plugin> 9 </plugins> 10 </build>
然后点击Run As ——>Maven Build ——>在Goals中输入【tomact7:run】然后打开浏览器访问即可。
由于我个人电脑问题,老是报无法加载Tomact的错,所以我选择用本地 Tomact
首先右键Build Path ——>AddLibrary——>MyEclipse Service Library——> 然后选择自己的本地 Tomact 即可,
运行时直接Run As ——>Myeclipse Service Application 即可。
四:在pom.xml中添加jar包依赖
在Maven项目中,jar包都是保存在本地仓库重复使用的,一个项目要想“调用”仓库里的jar包,就要对其进行配置,例如添加spring-core,应该是
1 <dependency> 2 <groupId>org.springframework</groupId> 3 <artifactId>spring-core</artifactId> 4 <version>5.0.0.RELEASE</version> 5 </dependency>
太多jar肯定不会全记住怎么写,所以要是想添加什么依赖,就直接百度,例如百度 maven spring-core repository 选择旁边的版本号点进去
然后看到如图所示,复制到你自己的pom.xml中就可以了
五:使用Maven创建web项目:
直接创建的Maven项目的目录和直接用Myeclipse创建web项目还是有区别的,对比一下然后会发现只是放的位置变了,其他的都没变
这样对比一下就很清晰了,左边是原本的SSH项目,右边是新建的Maven项目(我也是新学习的,可能建的不全面)java存放代码,resources存放配置文件,test存放测试代码与文件,页面效果放在下边的webapp中,当然,如果需要各种依赖,就得在pom.xml中进行配置。
六:生命周期
Maven有三个生命周期,clean生命周期,default生命周期、site生命周期,Maven的生命周期可以简单的理解为构建项目的步骤集合,只要执行后面的命令,那么前面的命令都会执行,不需要再重新去输入命令。
1 Clean生命周期
pre-clean 执行一些需要在clean之前完成的工作
clean 移除所有上一次构建生成的文件
post-clean 执行一些需要在clean之后立刻完成的工作
2 Default生命周期
validate
generate-sources
process-sources
generate-resources
process-resources 复制并处理资源文件,至目标目录,准备打包。
compile 编译项目的源代码。
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources 复制并处理资源文件,至目标测试目录。
test-compile 编译测试源代码。
process-test-classes
test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
prepare-package
package 接受编译好的代码,打包成可发布的格式,如 JAR 。
pre-integration-test
integration-test
post-integration-test
verify
install 将包安装至本地仓库,以让其它项目依赖。
deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享。
3 Site生命周期
pre-site 执行一些需要在生成站点文档之前完成的工作
site 生成项目的站点文档
post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
site-deploy 将生成的站点文档部署到特定的服务器上
常用命令:
maven 命令除了常用的几个,大部分经常记不住,整理一下,方便查询。
maven 命令的格式为 mvn [plugin-name]:[goal-name],可以接受的参数如下。
-D 指定参数,如 -Dmaven.test.skip=true 跳过单元测试;
-P 指定 Profile 配置,可以用于区分环境;
-e 显示maven运行出错的信息;
-o 离线执行命令,即不去远程仓库更新包;
-X 显示maven允许的debug信息;
-U 强制去远程更新snapshot的插件或依赖,默认每天只更新一次。
常用maven命令
-
创建maven项目:mvn archetype:create
指定 group: -DgroupId=packageName
指定 artifact:-DartifactId=projectName
创建web项目:-DarchetypeArtifactId=maven-archetype-webapp
-
创建maven项目:mvn archetype:generate
-
验证项目是否正确:mvn validate
-
maven 打包:mvn package
-
只打jar包:mvn jar:jar
-
生成源码jar包:mvn source:jar
-
产生应用需要的任何额外的源代码:mvn generate-sources
-
编译源代码: mvn compile
-
编译测试代码:mvn test-compile
-
运行测试:mvn test
-
运行检查:mvn verify
-
清理maven项目:mvn clean
-
生成eclipse项目:mvn eclipse:eclipse
-
清理eclipse配置:mvn eclipse:clean
-
生成idea项目:mvn idea:idea
-
安装项目到本地仓库:mvn install
-
发布项目到远程仓库:mvn:deploy
-
在集成测试可以运行的环境中处理和发布包:mvn integration-test
-
显示maven依赖树:mvn dependency:tree
-
显示maven依赖列表:mvn dependency:list
-
下载依赖包的源码:mvn dependency:sources
-
安装本地jar到本地仓库:mvn install:install-file -DgroupId=packageName -DartifactId=projectName -Dversion=version -Dpackaging=jar -Dfile=path
web项目相关命令
-
启动tomcat:mvn tomcat:run
-
启动jetty:mvn jetty:run
-
运行打包部署:mvn tomcat:deploy
-
撤销部署:mvn tomcat:undeploy
-
启动web应用:mvn tomcat:start
-
停止web应用:mvn tomcat:stop
-
重新部署:mvn tomcat:redeploy
-
部署展开的war文件:mvn war:exploded tomcat:exploded