1、安装与配置
1.1 jdk环境
Maven依赖于jdk,需要配置JAVA_HOME环境变量。
1.2 maven环境
Maven解压后不需要安装,只需要配置环境变量
最好配置M2_HOME以及MAVEN_HOME,因为有些项目会引用不同的环境变量。
M2_HOME,MAVEN_HOME:D:\Program Files\apache-maven-3.3.9;
PATH: %M2_HOME%\bin;
测试:打开cmd,输入:mvn –v;
2、本地资源库
Maven的本地资源库是用来存储所有项目的依赖关系(插件jar和其他文件,这些文件被Maven下载)到本地文件夹。很简单,当你建立一个Maven项目,所有相关文件将被存储在你的Maven本地仓库。
默认情况下,Maven的本地资源库默认为 .m2 目录文件夹:
Windows – C:\Documents and Settings\{your-username}\.m2
2.1 更新本地资源库
通常情况下,可改变默认的 .m2 目录下的默认本地存储库文件夹到其他更有意义的名称,例如, maven-repo
找到 {M2_HOME}\conf\setting.xml, 添加localRepository
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<localRepository>d:/maven-repo</localRepository>
2.2 测试资源库
新建工作空间:D:/MavenWorkspace
CMD: mvn archetype:generate -DgroupId=com.test -DartifactId=myapp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false -DarchetypeCatalog=internal
注意,以下均以myapp项目为例。另外,DarchetypeCatalog=internal这个参数表示从本地查找catalog配置文件,否则会从远程官网查找,然后你就等吧。。。。。。
结果:
3、中央存储库
当你建立一个 Maven 的项目,Maven 会检查你的 pom.xml 文件,以确定哪些依赖下载。首先,Maven 将从本地资源库获得 Maven 的本地资源库依赖资源,如果没有找到,然后把它会从默认的 Maven 中央存储库 – https://repo.maven.apache.org/maven2/查找下载。
3.1 默认中央存储库
为了测试默认中央存储库,先把本地资源存储库清空,以及myapp项目删掉,然后cmd进入工作空间,输入2.2的构建命令。
由于本地资源库并没有构建项目所需的必备依赖,所以会去中央存储库下载,可以看出默认存储库为:https://repo.maven.apache.org/maven2/
下的太慢,不喜欢!怎么办?换成国内镜像。
3.2 中央存储库国内镜像配置
打开配置文件,2.1那个setting文件。找到mirrors
我已经添加了国内镜像。
同样,再次清空本地资源库,以及myapp,再次进入工作空间,输入构建命令。
我们可以看到,已经从国内镜像开始Downloading…
国内镜像地址: http://maven.oschina.net/content/groups/public/
而且速度极快,与前者不可同日而语,我们要感谢谁呢?
3.3 远程仓库
默认情况下,Maven从Maven中央仓库下载所有依赖关系。但是,有些库丢失在中央存储库,只有在Java.net或JBoss的储存库远程仓库中能找到。
远程仓库需要配置在pom.xml文件中,如下:
4、依赖机制
假如我们要在项目中使用junit进行单元测试,我们怎么达到这个目的?下面分两种情况说明。
4.1 传统方式
(1)下载 junit的 jar 库
(2)复制 jar 到项目类路径
(3)手动将其包含到项目的依赖
(4)所有的管理需要一切由自己做
如果有junit版本升级,则需要重复上述步骤一次。这还是简单的,我们都用过ssh,都知道一个一个jar包给我们添了多少麻烦!
4.2 maven方式
(1) maven坐标
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
GroupID是项目组织唯一的标识符,实际对应的包的结构,是main目录里java的目录结构。
ArtifactID就是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。
它会自动下载junit的4.12 版本库。如果“version”标签被忽略,它会自动升级库时当有新的版本时。
(2)声明 Maven 的坐标转换成 pom.xml 文件
当 Maven 编译或构建,log4j 的 jar 会自动下载,并把它放到 Maven 本地存储库。
看起来所有的活都让maven做了,我们只需要配置maven坐标即可!
(3)maven坐标哪里来
当然去,这里尽情的搜索吧!
5、项目文档
进入myapp,执行cmd命令:mvn site;
打开看看吧!
6、项目模板
我们构建myapp用的命令:mvn archetype:generate,其中archetype就是原型的意思,archetype是一个maven的插件,它的作用就是按照模板为我们创建项目结构。
我们来一步一步在cmd中进行操作:
(1)mvn archetype:generate -DarchetypeCatalog=internal
这里我们啥也不输入,直接回车,默认会我们选择7: maven-archetype-quickstart-1.1.jar
(2)几个输入
输入y,回车。
(3)结果
构建成功,来看下pom文件
可以跟我们构建过程中的输入进行比较下看看!
现在我们来看看如何生成一个web应用。
输入命令:mvn archetype:generate -DgroupId=com.test -DartifactId=mywebapp -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false -DarchetypeCatalog=internal
注意以上命令与 2.2中命令的区别。
7、构建项目
7.1 mvn package
Maven是分阶段运行,执行package阶段的时候,所有阶段 validate, compile和 test, 包括目前的阶段package将被执行。
它会编译源代码,运行单元测试,打包取决于在pom.xml文件的packaging标签,jar或者war.
注:执行该命令,需要进入到pom.xml的目录中。
7.2 mvn clean
清理项目,一般在package之前进行清理,该命令会把target目录 清理掉,保证package到最新的代码。
7.3 mvn install
该命令会将你的程序打包到本地资源库中
当然也包括了package的功能
7.4 mvn eclipse:eclipse
Generate的maven项目,eclipse并不能用,怎么办?
执行该命令,就可以了。
为了保证eclipse正常使用我们配置的maven,需要如下进行设置
然后,右键项目-maven-update project即可!
7.5 elipse中的两个问题
在elipse打开项目,会发现两个不满意的地方
Jdk1.5,不满意!
意思是说你这程序是用的elipse默认的GBK编码,是ide自己的,maven感觉不靠谱,给你个提醒。
如果按传统方式,要去修改首选项一大堆东西,特别是jdk1.5修改成1.7更麻烦。现在我们有maven了,简单至极!
Update一下,再看看!
项目根上的黄色三角叹号都消失了,而且jdk变成了1.7!再次感谢伟大的apache!
8、maven单元测试
8.1 准备
先建个两个src目录。
(1)test目录,注意是src/test/java,而非src/main/test
默认包含的测试类:
**/*Test.java **/Test*.java **/*TestCase.java 默认排除的测试类: **/Abstract*Test.java**/Abstract*TestCase.java
(2)java目录
明明没有啊!
打开project explorer, build path
Missing!!!!!!
解决办法,去main目录下手工建立一个java目录,F5一下!
Package视图里面java目录竟然跑下面去了。。。。对eclipse mars2表示差评!
8.2 单元测试配置
Include **/*Test.java, 将会改变默认设置,所有包下面的*Test.java都会被当作测试进行测试。
Exclude **/TestPerson.java,将会将TestPerson.java排除,不再对其测试,即使其在src/test/java目录下。
注意:若要使用该方法需要配置testSourceDirectory
不推荐这么用,会让整个程序变得不可控制,结构混乱。
8.3 测试命令
(1)mvn test 根据配置测试所有;
(2mvn -Dtest=com.test.junittest.TestPerson test 只测某一个
8.4 特别说明
(1)scope
由于scope=test,maven不会下载junit jar包。会测试失败。
(2)测试报告路径和跳过测试
reportsDirectory=D:/reports
skipTests=true会跳过测试。
(5)每个模块在src/test/java目录下建立一个测试包,规则:com.test+模块名;