今天开始学习maven,maven是一个项目管理和构建的工具,使用起来非常方便,有了maven我们可以很方便的将项目编译,打包运行等,Maven能够很方便的帮我们管理项目报告,生成站点,管理JAR文件,等等。
首先需要到maven的官网下载maven:
http://maven.apache.org/download.cgi#
这里我下载到E:\maven\apache-maven-3.3.3目录
下载完成之后,需要配置环境变量,将maven项目根目录下的bin目录配置到path环境变量当中
配置完path环境变量以后,check以下,是否配置成功,在命令行下输入:mvn -version
可以看到这里使用的maven版本号。
下面看下maven项目每个目录的作用:
首先在改工程下创建一个pom.xml文件,用到的schema可以在spring或者hibernate等开源文件中搜索pom.xml(因为这些都是使用maven来进行管理的),将其拷贝过来即可。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
</project>
这里注意,我们每个工程对应的pom文件的根标签都是”project”,另外我们每个工程都必须先配置下面四个配置:
1.modelVersion :指的是模型的版本,目前值是固定的4.0.0
2.groupId :指定当前项目的项目名称,和包名相同
3.artifactId :指定当前项目中的哪一个模块,一般使用”项目名称_模块名称”这样的形式。
4.version :表示当前项目的版本
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.maven.test01</groupId>
<artifactId>test01_hello</artifactId>
<version>SNAPSHOT-0.0.1</version>
</project>
这里我使用的SNAPSHOT是一种快照版本,是一种特殊的版本,以后会详细解释。
接下来就是创建普通的java文件,这里需要注意的是,在maven中,我们的java文件都是存放在“src/main/java”这样的目录当中
这里我新创建一个Hello.java文件:
package com.maven.test01;
public class Hello {
public String sayHello() {
return "hello world";
}
}
在pom.xml以及java文件都创建好了以后,我们就可以开始编译我们的maven项目了,命令行模式下进入pom.xml文件所在的目录,输入mvn compile
PS:在输入mvn compile以后,maven会从自己的中央仓库下载需要的文件,这里可能会失败,依赖于个人的网络好坏。
当maven编译完成以后,会生成一个target文件夹,这个文件夹里边存放的就是编译生成的class文件。maven默认的下载是存放在“C:\Users\admin.m2”该路径下的。
可以看到maven默认是将从中央仓库下载下来的文件存放在C盘,其实是可以指定其存放位置的。
1.新建一个目录”E:\maven\mavenrepo”用来存放本地仓库
2.将第一步中从网上下载下来的repository拷贝到该目录下
3.更改下载的maven工程的apache-maven-3.3.3\conf目录的settings.xml文件
4.同时将该settings.xml文件拷贝至E:/maven/mavenrepo目录下:
PS:无论是当我们编译,打包,还是运行maven工程的时候,对于需要的文件,maven都会首先在本地仓库当中查找,如果本地仓库没有找到,才会去中央仓库下载。
好了,现在为止Hello类已经编译完成,下面编写test来测试该类中的sayHello方法。测试类和普通的类比较相似,所有的测试类都必须要放到”src/test/java”目录下。
TestHello.java
package com.maven.test01;
import org.junit.*;
import static junit.framework.Assert.*;
public class TestHello {
@Test
public void testHello() {
Hello hello = new Hello();
assertEquals(hello.sayHello(),"hello world");
}
}
这里我们使用了junit,按照以往的方式,需要手动下载junit的jar文件,然后手动拷贝的工程目录,而使用maven,只需要将junit在pom.xml文件中配置一下即可,由于我们的测试类当中依赖到了junit文件,所以需要配置其依赖。在pom.xml文件当中增加如下代码:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
</dependencies>
接下来运行”mvn test”命令,就可以测试我们的Hello类了。
此时会在target目录下生辰测试报告等文件,并且测试类也会编译好,放在target文件夹中。
接下来执行”mvn clean”命令,看下效果:
执行完成该命令以后,发现 编译和测试时候生成的target文件夹已经被删除了。
另外我们还可以执行这样的命令:”mvn clean package”,此时会首先执行clean命令,然后执行package命令。
此时target中的所有文件都是执行package命令生成的,可以发现,当执行package命令的时候,会自动完成“编译”,“测试”,“打包成jar”的工作。
如果需要将我们的项目打包到本地仓库中,可以执行”mvn clean install”命令。
那么,将test01打包到本地仓库有什么用呢??接下来我们创建第二个工程来说明这一点。新建一个test002的工程。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.maven.test02</groupId>
<artifactId>test02_second</artifactId>
<version>SNAPSHOT-0.0.1</version>
<dependencies>
<dependency>
<groupId>com.maven.test01</groupId>
<artifactId>test01_hello</artifactId>
<version>SNAPSHOT-0.0.1</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
可以看到这里引用了刚才打包好的test001,这里依赖的groupId,artifactId,就是在test001的pom.xml文件中定义的。
在”src\main\java”目录下新建一个SecondHello.java,内容如下:
package com.maven.test02;
import com.maven.test01.Hello;
public class SecondHello {
public void runHelloSay() {
Hello hello = new Hello();
hello.sayHello();
}
}
可以看到这里引用了test001工程中的Hello.java类但是我并没有导入相关的jar文件,而是仅仅在pom.xml文件中配置对应的依赖关系就可以使用了。
可以看到使用maven来管理项目是非常方便的,按照其约束执行指定的命令是非常方便的。好了,今天关于maven 的学习就到这里了,希望大家能够喜欢。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/mockingbirds/article/details/47302815