maven是一个工具,主要是用来对Java项目进行构建(编译、测试、打包等)和依赖管理,它能够用简单的命令来构建项目,还能通过配置的方式自动下载项目依赖的jar包。
本篇和大家一起来讨论maven的基本用法。
创建maven项目
打开eclipse,new=>project=>maven project=>next,不要勾选create a simple project,保持默认,=>next,默认选中quickstart模板,=>next,输入group id和artifact id,然后version和package保持默认即可,properties暂不填写,=>finish。maven项目创建完成了
maven项目的目录结构
下面是maven项目的经典目录结构
pom.xml
target
classes
test-classes
src
main
java
test
java
pom.xml是maven中的配置文件,pom(project object model)文件定义了该项目的坐标(坐标的概念下面会讲到),依赖项等内容。target目录下放置的是对项目打包后的文件。src目录中存放的是源代码,main目录中存放的是主代码,test中存放的是单元测试代码。main和test中的java目录中存放的是java代码。
这个项目结构对maven的构建非常重要,一定要遵守。
这个项目模板包含一个App.java,该类包含一个main方法。还包含一个AppTest.java,该类是用来对App.java做单元测试的。
依赖管理与坐标
一个项目一般都会依赖很多jar包,如果每个包都要到对应的官方网站上下载和存放,显然比较麻烦,maven受欢迎的一个重要愿意就是它把依赖管理做的很好。maven有一个庞大的中央仓库,里面存放的有各种各样的包,程序员只需要配置一下包的id,就可以将对应的包下载到本项目的特定位置。但是,怎样来唯一标识一个包呢?maven通过坐标来唯一标识一个包。在maven的世界里,每一个构件(包)都要明确定义自己的坐标。当你需要应用别的构件时,也只需要配置一下该构件的坐标即可。
下面是我刚才创建的项目的坐标。
<groupId>org.zdk.test</groupId>
<artifactId>maventest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
groupId一般是当前项目隶属的大项目的名称,而artifactId则是当前maven项目的名称或当前模块的名称,这两个属性没有太严格的要求。version是当前的版本号(SNAPSHOT的快照意思,大概是说当前项目还正在开发,可能不稳定),packaging是当前项目的打包方式,默认值是jar。
下面是一个内容比较简单的pom.xml文件的内容。我加入了几个对SpringFramework包的依赖,是为了多用几个例子说明坐标的概念,而本篇文章并不涉及spring的内容。
<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>org.zdk.test</groupId>
<artifactId>maventest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>2.5.6</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>2.5.6</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>2.5.6</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>2.5.6</version>
</dependency>
</dependencies>
</project>
这个文件中,先通过groupId,artifactId和version来定义了当前项目的坐标,又在dependencies中依赖了好几个其它的构件。
maven常用命令
- 编译 mvn compile
- 测试 mvn test
- 打包 mvn package
- 安装到本地库 mvn install
以上四个命令有层次关系,也就是说,运行mvn test
时,会先运行mvn compile
,运行mvn package
时,会先依次运行上面的两个命令,运行mvn install
时,会先依次运行上面三个命令。
- 清理 mvn clean
清理就是删除生成的target文件夹。
也可以将mvn clean
命令同上面的四个命令写到一块执行,如下面的命令会先清理,然后再运行测试
mvn clean test
下面我们来运行几个命令。首先启动一个命令行工具,然后定位到你的项目的根目录(根目录就是pom.xml所在的目录)。我本地的项目存在于E:\JavaCode\maventest文件夹中,所以我需要先输入以下命令
e:
cd E:\JavaCode\maventest
然后清理并打包
mvn clean package
maven会先清理target目录,然后编译、测试并打包。如果你看到最后输出的大概如下,则说明打包成功了
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
打开你根目录的的target文件夹,里面的东西就是maven生成的,包括一个jar包和几个文件夹。
以上就是maven最基本的使用方法,本文如有讲述不清的地方,请在下方的评论处留言。