第一个maven应用
前置条件
- 已安装maven
建立目录并编写maven的pom.xml
在系统任意目录下建立项目目录,并在目录下建立pom.xml文件,修改pom.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <groupId>org.test</groupId> <artifactId>demo</artifactId> <version>1.0-SNAPSHOT</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> </project>
注释:
第一行为标准的xml头第三、四、五行为xml的约束,为固定写法,如果使用的maven版本不同可能会有不同
第六行为maven的POM项目模型版本,一般不会变。
第七行groupId为组织Id,一般为项目所属组织,构建时生成的路径也是由此生成。
第八行artifactId为项目名称,它和group ID一起唯一标识一个构件(项目)。
第九行version为项目版本号,项目当前版本,格式为:主版本.次版本.增量版本-限定版本号
第十一行properties节点中及其中的project.build.sourceEncoding定义了项目源代码的编码格式
建立源代码和测试代码目录
在项目目录中建立如下目录结构:
basedir └─src ├─main │ └─java │ └─org │ └─test │ └─main └─test └─java └─org └─test └─main
建立源代码和测试代码
新建文件:src\main\java\org\test\main\HelloMaven.java,内容如下:
package org.test.main; public class HelloMaven{ public static void main(String[] args){ System.out.println("Hello Maven"); } public String say(String name){ return "Hello "+name; } }
新建文件:src\test\java\org\test\main\TestHelloMaven.java,内容如下:
package org.test.main; import org.junit.*; import static org.junit.Assert.*; public class TestHelloMaven{ @Test public void testHelloMaven(){ HelloMaven hm = new HelloMaven(); String result = hm.say("Maven"); assertEquals(result,"Hello Maven"); } }
编译
打开一个终端,切换到项目目录,执行以下命令:
mvn compile
此时maven从中心仓库中下载需要依赖的项目包,到用户目录的.m2目录(此目录可配置)下,并且在完成后,编译源代码文件,并输出结果,如果结果如下,则表示编译成功:
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ demo --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to E:\maven\demo\target\classes [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.429 s [INFO] Finished at: 2015-10-20T15:23:50+08:00 [INFO] Final Memory: 16M/110M [INFO] ------------------------------------------------------------------------
此时,目录结构如下:
├─src │ ├─main │ │ └─java │ │ └─org │ │ └─test │ │ └─main │ └─test │ └─java │ └─org │ └─test │ └─main └─target ├─classes │ └─org │ └─test │ └─main └─maven-status └─maven-compiler-plugin └─compile └─default-compile
target目录为编译输出目录。
测试
修改pom文件,在project节点下添加如下内容:
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies>
此节点添加了项目对Junit包的依赖,其中的groupId、artifactId、version为Junit在maven中心仓库的坐标(唯一标识)。
修改完成后,在终端中执行如下命令:
mvn test
此时,maven下载与测试相关的包,以及依赖的Junit包到用户目录的.m2文件夹,之后完成测试。
显示如下内容表示命令执行成功:
------------------------------------------------------- T E S T S ------------------------------------------------------- Running org.test.main.TestHelloMaven Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.087 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.373 s [INFO] Finished at: 2015-10-20T15:31:57+08:00 [INFO] Final Memory: 14M/138M [INFO] ------------------------------------------------------------------------
测试之后的目录结构如下:
├─src │ ├─main │ │ └─java │ │ └─org │ │ └─test │ │ └─main │ └─test │ └─java │ └─org │ └─test │ └─main └─target ├─classes │ └─org │ └─test │ └─main ├─maven-status │ └─maven-compiler-plugin │ ├─compile │ │ └─default-compile │ └─testCompile │ └─default-testCompile ├─surefire-reports └─test-classes └─org └─test └─main
surefire-reports目录包含了测试结果。
清理
clean指令用于清除编译、测试、打包时生成的目录及文件。
在项目目录中运行命令:
mvn clean
此时项目目录下的target目录被删除。
打包
package指令用于生成项目的jar包。
在项目目录中运行命令:
mvn package
此时,maven会下载相关包,编译源代码,测试代码,执行测试,如果测试通过,源代码将被打包。target目录下会生成项目的jar文件。
安装
install 指令用于将包安装到本地的maven仓库中,供其它的项目引用。
在项目目录中运行命令:
mvn install
执行结束后,系统用户目录下会在生成对应目录及文件如下:
~/.m2/repository/org/test/demo$ls -alh total 5.0K drwxr-xr-x 1 Cloud 197121 0 十月 20 08:23 . drwxr-xr-x 1 Cloud 197121 0 十月 20 08:23 .. drwxr-xr-x 1 Cloud 197121 0 十月 20 08:23 1.0-SNAPSHOT -rw-r--r-- 1 Cloud 197121 274 十月 20 08:23 maven-metadata-local.xml
将maven项目转换成Eclipse支持的Java项目
在项目目录中运行命令:
mvn eclipse:eclipse
此时项目目录下会生成.classpath 和 .project。打开安装了Maven Integration for Eclipse插件的eclipse导入项目即可.
组合指令
maven的编译,清理,测试,打包,部署命令是可以几个命令同时组合起来使用的,常用的命令组合
如:
先清理再编译:mvn clean compile
先清理后打包:mvn clean package
maven的默认约定
上面的示例中,maven使用一条指令,就完成了很多工作。例如:例如,编译src/main/java目录下的源代码,输出到target目录下。这些目录,都是maven预设置的。maven采用类化于grails"约定优于配置"的原则。
目录 | 描述 |
${project.dir}/src/main/java | java源码目录 |
${project.dir}/src/main/resources | 资源文件目录 |
${project.dir}/src/main/filters | 资源过滤目录 |
${project.dir}/src/main/webapp | web应用文件目录(当打包为war时),如WEB-INF/web.xml |
${project.dir}/src/test/java | 测试java源码目录 |
${project.dir}/src/test/resources | 测试资源文件目录 |
${project.dir}/src/test/filters | 测试资源过滤目录 |
${project.dir}/src/it | 集成测试(主要为插件) |
${project.dir}/src/assembly | Assembly descriptors |
${project.dir}/src/site | 项目site输出目录 |
${project.dir}/LICENSE.txt | 项目许可证 |
${project.dir}/NOTICE.txt | 项目依赖类库的属性要求,及以通告 |
${project.dir}/README.txt | 项目的README文件,用于描述这份源码是用来做什么的?如何使用项目?项目中重要的文件和子目录的结构信息? |