以前就听过maven,但一直没具体接触,最近听一个同学推荐这工具功能蛮强大的。本着好奇之心,这周末就尝试了maven的工具使用,意外的是还是遇到了不少问题,在此做一个简单的总结。
一、下载与安装
download:官网网址如下
http://maven.apache.org/download.cgi
安装
maven下载后解压即可,没有.exe安装文件,之后进行一下配置
step1:根据maven版本要安装相应版本的jdk,maven3.3版本则需要至少1.7(包括)以上版本的jdk,具体请见官网,并且要配置jdk的环境变量,JAVA_HOME在环境变量中是一定要配置的
step2:在环境变量中设置maven_home(maven的安装目录),并且将%maven_home%\bin添加到path的环境变量中 上述配置完成后,打开dos命令行 输入mvn -v即可查看maven的相关版本信息,证明基本配置ok,如java_home没设置,此时会提示在环境变量中需设置java_home变量值
step3:可以设置maven下载jar到本地目录的位置,默认是${user.home}/.m2/repository,可以在%maven_home%\conf\setting.xml中更改重新指定,将如下标签:<localRepository>G:/workspace/maven_repository</localRepository> 放到根标签settings下即可
二、用maven编译与测试java源文件
安装配置maven后即可通过maven的一些命令来为我们编译,测试 java程序。
setp1:建立指定格式的文件结构(最重要,最重要,最重要的一步,重要的事情说三遍),如下:
path(执行mvn命令目录)\src\main\java\...\XXX.java
path(执行mvn命令目录)\src\test\java\...\XXXTest.java
path(执行mvn命令目录)\pom.xml
说明:path指的是某个盘下的某个目录,比如G:\maven_workspace_demo,也等同于 执行命令目录
step2:配置pom.xml,最基本的配置信息如下:
<?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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.kingdee.maven</groupId>
<artifactId>maven_welcome</artifactId>
<version>1.0.0</version>
<properties>
<project.build.sourceEncoding>
UTF-8
</project.build.sourceEncoding>
</properties>
</project>
step3:在dos中通过命令cd进入path目录下进行编译,命令如下 mvn compile
注意:是进入path目录下,即与src,pom.xml同级的目录下执行 mvn compile命令 编译 执行命令目录\src\main\java\包名\java源文件
如果执行该命令的目录下没有pom.xml文件则会提示该文件找不到;
如果该执行目录有pom.xml,但是java源文件是如下格式放的 执行命令目录\包名\java源文件,那么此时会提示 \src\main\resources 下没有资源,此时也不会在pom.xml同级目录下生成target\classes文件夹;
如果执行目录有pom.xml,但java源文件是如下格式放的 执行命令目录\src\main\resources\包名\源文件,那么此时在pom.xml同级目录下会生成target\classes的文件夹,但此时只是将源文件夹里的内容拷贝到了 执行命令目录\target\classes\包名\java源文件,此时java源文件并没有编译成.class文件
有且仅有按如下格式放java源文件 执行命令目录下\src\main\java\包路径\java源文件,才会将java源文件编译成.class文件,生成的.class文件路径如下 执行命令目录\target\classes\包名\.class文件,此时 执行命令目录\src\test\java\包名\测试类java源文件 并没有被编译
step4:写一个类测试java源文件中的方法,该测试类中引用了junit4中的相关类,因此还需做如下配置
将测试类放到 执行命令目录(src,pom.xml的同级目录)\src\test\java\包名\测试类.java (\src\test\java\ 这是执行mvn test命令 编译 测试类进行测试的固定结构格式)
在pom.xml中引用junit的jar,添加如下配置内容
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.4</version>
</dependency>
</dependencies>
进入path目录下执行 mvn test 命令,则会编译 测试类,并且执行里面的@Test的方法,输出测试类相关方法的测试结果。
注意:在执行mvn compile 或者 mvn test命令时,maven会根据pom.xml里面配置信息去做一些事,比如在step4中,配置了junit4的依赖项,如果检测到maven本地仓库中没有junit4 4.4版本的jar,则会先从maven的远程仓库中下载到本地来,在进行之后的操作。
三、配置依赖本地不同目录下的java类
path1\src\main\java\包名\java源文件1
path1\pom1.xml
path2\src\main\java\包名\java源文件2
path2\pom2.xml
假如java源文件2中的类引用了java源文件1中的类,需要哪些步骤才能正常的编译java源文件2呢?
step1:进入path1,是path1不是path2,执行mvn install命令,该命令会将path1 /src/main/java 下的java源文件编译 ,并且会自动放到本地的respository中,所以不需要执行mvn compile 也可以
step2:编辑pom2.xml,将pom1.xml中定义的坐标groupId,artifactId,version 组成dependency 放到pom2.xml 中的dependencies中
step3:通过dos命令进入path2,执行mvn compile 就可以正确编译 java源文件2了,不会提示缺少类了