最近想要搭个基于Maven管理的spring mvc+mybatis+oracle简易框架的,无奈在eclipse上操作时屡屡碰壁,后来发现可以先在文件夹中将maven工程建出来再导入eclipse。话不多说,一步步操作直到eclipse中出现我所需要的maven工程.。
一.下载Maven压缩文件
绿色版,下载下来,解压缩即可使用,无需安装。下载地址:maven文件下载地址
友情提示:下载下来的maven文件所放的目录结构最好全英文,避免有的机器配置环境变量带来问题。
如:D:\work\apache-maven-3.2.5
关键词:maven本地仓库 依赖管理 生命周期
二.配置环境变量
* 配置maven环境前需要先安装jdk并配置环境变量,【jdk环境配置通道】
* 打开环境变量对话框;
* 首先配置变量名为M2_HOME,键值为maven文件所在的目录位置
* 再在path里添加M2_Home
* 配置完成后在cmd窗口输入 mvn -version 有maven提示信息表示配置成功
三.好了,接下来就要建立maven项目了,我准备将maven工程建立在d:\work\workspace目录下。打开你的cmd小黑窗,接下来的大多数操作都是在这里面完成的。
* 切换到准备建立项目的目录下,我这里是 d:\work\workspace
1 创建项目
键入 mvn archetype:generate -DgroupId=com.test.maven -DartifactId=test -DpackageName=com.test.maven 按回车
键入之后会等挺长一段时间,此时在于maven资源库进行交互,耐心等
过一会会哗啦啦的一串返回值代码,观察停住了就按回车键。这一步是让你确认版本什么的,直接按回车就是选择默认的(貌似中间有一步让选数字,果断选2)
大概解释下这句话的意思:
mvn 执行maven类操作都要使用这个,可理解为标识,maven的身份证
archetype:generate 创建项目的语句,后面跟的是项目的具体内容
-DgroupId=com.test.maven 当有多个工程组成一个项目时使用,这里忽略含义,用到时再讲
-DartifactId=test 定义项目的包名,这里包名叫test
-DpackageName=com.test.maven 在创建目录结构的时候默认创建的一个包的结构
这里需要注意的一点就是:有的同学还会用archetype:create这个语法来创建,在maven3.0以后的版本已经废弃了这个指令,改为archetype:generate,使用create会报错
报错信息为:看到这个赶紧换generate就成了
2.项目创建成功后,来到d:\work\workspace目录下就会看到mytest工程了,目录结构主要为:
mytest
----src
--------main 放编写的代码
------------java 放java代码
------------resources 放配置文件
--------test 放测试代码
------------java 放java代码
----pom.xml 核心文件,干嘛用的后面用到再说,总之,大大的作用
接下来认识些maven的常见操作指令,来帮助理解maven到底是个啥玩意
3.mvn install
带着问题去认识maven:这个指令干了哪些事情?什么情况下需要使用这个指令?
使用mvn install时,cmd窗口一定要索引到pom.xml所在文件夹的那一级目录
* 第一步需要阅读pom.xml核心配置文件了,根据里面的信息依次执行过程。这里说一个概念:maven的生命周期,也就是maven运行的步骤。
* 第二步执行maven生命周期:阅读main目录下的resource里的配置文件 > 将main目录下java里的java类编译成class文件 > 阅读test目录下的resource里的配置文件 > 将test目录下的java里的java类编译成class文件。
注:a 了解生命周期可以帮助我们更快的定位问题发生在哪个目录文件下面,是xml配置文件的问题还是java代码的问题
b 编译完的class文件会在mytest文件夹下生成一个target文件夹,这个文件夹下面有个classes子文件夹,这里面放的就是java目录下的编译文件,test-classes文件夹里放的是test目录下的编译文件。target文件夹和src文件夹属于同级目录。
* 第三步测试错误。主要是执行生命周期过程中是否报错
* 第四步打包。
打完jar包放到target目录下,当然也可以不打jar包,达成war或其他包,这个在pom.xml里进行配置的,后面讲
* 第五步,也是最后一步,涉及到maven仓库的概念,将打好的jar包要扔一份到maven仓库里,至于干嘛用,个人理解如下:
maven仓库的概念就是一个容器,里面存放jar包。
> maven有一个大的Maen仓库(里面基本啥jar包都有),在网络上,但我们不能每次使用都去网络上引jar包吧,这就需要本地有个临时的maven仓库,本地仓库没有网络上的那个库大,本地库的作用就是我只放我项目需要用的jar包,不需要的不要。这样本地项目在运行时直接从本地maven仓库里拿jar包就不会影响性能了。
> 本地maven仓库里一开始会有些默认的jar包,这个过程是在mvn archetype:generate这个指令的时候从网上下载的,说到这,应该知道前面执行这个命令的时候要等蛮长时间的原因了吧,当然,这里下载的只是必需的jar包。本地项目要使用仓库里的jar包时通过在pom.xml里进行配置即可。
> 好像扯选了,我们在mvn install时候也打了个jar包,并且往maven仓库也扔了一份。这样做的目的就是如果别的项目也要引用当前项目里的java类,只需要在别的项目里的pom.xml里配置上当前项目的jar即可。要是提前本地仓库里没有,配置也白瞎。
> maven仓库里当前项目的地址就是[groupId + artifactId + version]拼接的地址
总结:mvn install的核心目的就是打包扔到maven仓库里。
4.mvn install:install-file 将单独的jar包以maven规则放入本地仓库
前面说到maven本地仓库的概念,里面存放的是jar包。现在比如我需要一个spring bean的jar包,而本地仓库里没有,我从网上下了一个spring-bean.jar,直接扔进maven仓库就能使用了吗?答案是否定的。
这是仓库里已有的一个antlr-2.7.7.jar文件夹里的目录。每个jar包都有自己的一个文件夹,文件夹里有这个jar包的jar文件,也有其他东西。可见单单把从网上下的spring-bean.jar扔进maven仓库是行不通的。得按照maven的规则来才行。
假定我从网上下了一个spring-bean-3.0.0.jar并放在D盘下,执行下面指令可将jar放到maven仓库中:
mvn install:install-file -Dfile=D:\spring-bean-3.0.0.jar -DgroupId=spring-bean -DartifactId=spring-bean -Dversion=3.0.0 -Dpackaging=jar
5.mvn test 测试
6.mvn compile
处理main目录下的resources文件里的配置文件和编译main目录下的java文件
7.mvn test-compile
处理test目录下的resources文件里的配置文件和编译test目录下的java文件
但由于test是依赖main目录的,所以也会执行处理main目录下的resources文件里的配置文件和编译main目录下的java文件
8.mvn clean
清除target文件夹
9.mvn package
生成target文件夹,并打包放入其中
注:mvn package和mvn install的区别?
二者都会生成target目录并且打包放入其中。区别是package只是单纯的打包,并没有将jar包再往maven仓库里扔一份。
10.mvn eclipse:eclipse
转换成可以导入eclipse开发工具的maven工程
如果此时在pom.xml里新增了一个依赖jar包,在eclipse是不会立即生效的,因为classpath里的路径没有更新。解决方法是,通过 mvn eclipse:clean 指令将新生成的classpath和project两个文件删除,再通过 mvn eclipse:eclipse 重新生成maven文件(此时会重新生成一个新的classpath和project文件夹)
这样的操作比较麻烦,后面会通过在eclipse开发工具里来完成这一步骤。
11.在eclipse中引入maven工程
详细内容参见另一篇文章:eclipse中导入maven项目