Maven笔记

1、安装与配置

1.1  jdk环境

      Maven依赖于jdk,需要配置JAVA_HOME环境变量。

1.2  maven环境

      Maven解压后不需要安装,只需要配置环境变量

      最好配置M2_HOME以及MAVEN_HOME,因为有些项目会引用不同的环境变量。

      M2_HOME,MAVEN_HOME:D:Program Filesapache-maven-3.3.9;

      PATH: %M2_HOME%in;

      测试:打开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}confsetting.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是项目组织唯一的标识符,实际对应Java的包的结构,是main目录里java的目录结构。

ArtifactID就是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。

它会自动下载junit的4.12 版本库。如果“version”标签被忽略,它会自动升级库时当有新的版本时。

(2声明 Maven 的坐标转换成 pom.xml 文件

 

当 Maven 编译或构建,log4j 的 jar 会自动下载,并把它放到 Maven 本地存储库。

看起来所有的活都让maven做了,我们只需要配置maven坐标即可!

(3)maven坐标哪里来

当然去http://mvnrepository.com/,这里尽情的搜索吧!

 

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+模块名;

原文地址:https://www.cnblogs.com/sdnu/p/5429022.html