一、Maven 简介
1. 作为Apache组织中的一个颇为成功的开源项目,Maven主要服务于基于Java平台的项目构建、依赖管理和项目信息管理。
2.下载地址:
http://maven.apache.org/download.html
3. Windows本地安装:
将maven解压到某个目录下;
增加环境变量 M2_HOME(E:\work\apache-maven-3.0.3),然后在Path下面增加 %M2_HOME%\bin;
在cmd窗口测试: mvn -v
4 .Eclipse插件m2eclipse安装地址:http://m2eclipse.sonatype.org/sites/m2e
m2eclipse要求使用JDK,而eclipse默认运行有JRE上,原需在eclipse.ini文件上配置如下:
--launcher.XXMaxPermSize
256M
-vm
D:/Program Files/Java/jdk1.6.0_14/bin/javaw.exe
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms512m
-Xmx512m
5. 配置MAVEN_OPTS环境变量(-Xms256m -Xmx512m),控制Maven运行的内存。
6. 配置用户范围setting.xml,放在~/.m2/settings.xml(全局放在%M2_HOME%/conf/settings.xml),放在用户范围的好处是Maven升级时不用重新拷贝settings文件,而且不会影响本系统上面的其它用户。
二、Maven的入门使用
1. 新建一个目录hello-world
2. 编写POM
POM(项目对象模型)定义了项目的基本信息,用于描述项目如何构建,声明项目依赖等等。在hello-world下新建一个pom.xml文件
<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">
//指定当前POM模型的版本
<modelVersion>4.0.0</modelVersion>
//定义项目的基本坐标,groupId定义项目属于那个组,artifactId定义当前Maven项目在组中唯一的ID,version指定项目当前版本
<groupId>com.mycom.myproject</groupId>
<artifactId>hello_world</artifactId>
<version>1.0-SNAPSHOT</version>
<name>projectName</name> //声明一个更为友好的项目名称
<packaging>jar</packaging> //声明打包类型
</project>
3. 编写主代码
项目主代码和测试代码不同,项目的主代码会被打包到最终的构件中(如jar),而测试代码只在运行测试时用到,不会被打包。默认情况下,Maven假设项目主代码位于src/main/java/目录,创建该目录,然后在下面创建文件com/mycom/myproject/helloworld/HelloWorld.java,注意下面的包级目录。
package com.mycom.myproject.helloworld;
public class HelloWorld{
public String sayHello(){
return "Hello Maven";
}
public static void main(String[] args){
System.out.print(new HelloWorld().sayHello());
}
}
4. 使用Maven命令进行编译(mvn clean compile)
clean告诉Maven清理输出目录target/,compile告诉Maven编译项目主代码到target/classes目录下,
5. 编写单元测试代码
Maven项目中默认的测试代码目录是src/test/java,新建此目录。要使用JUnit,首先需要为Hello World项目添加一个JUnit依赖,修改项目的POM文件如下:
<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.mycom.myproject</groupId>
<artifactId>hello_world</artifactId>
<version>1.0-SNAPSHOT</version>
<name>projectName</name>
<packaging>jar</packaging>
//添加JUnit依赖
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope> //该依赖只对测试有效,默认为compile对主代码和测试代码都有效
</dependency>
</dependencies>
</project>
编写测试代码如下:
package com.mycom.myproject.helloworld;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class HelloWorldTest{
@Test
public void testSayHello(){
HelloWorld hw = new HelloWorld();
String result = hw.sayHello();
assertEquals("Hello Maven",result);
}
}
6. 使用Maven命令进行测试(mvn clean test)
测试代码编译之后在target/test-classes下生成了二进制文件,并生成了surefire和surefire-reports测试文件。
7. 打包(mvn clean package)
POM中指定了打包类型为jar,如果没有指定默认也为jar。将项目打包成一个名为 hello-world-1.0-SNAP-SHOT.jar文件放在target/输出目录中
8. 安装(mvn clean install)
这样,你的jar就放到你的本地库了,其他的Maven项目就可以直接引用这个jar了。
9. 使用Archetype生成项目骨架
10. m2eclipse简单使用
导入Maven项目:Import -> Maven -> Existing Maven Projects,选择后它会自动去下载所有依赖,但是eclipse下载依赖的速度真的太慢了,有时候一个包下不了卡死半天。这时可以使用命令行方式随便执行一个mvn命令都会自动去下载依赖,一直重复执行直到Success。
创建Maven项目:New -> Other -> Maven -> Maven Project -> Next(不要选Create a simple project ...) -> Next -> 输入groupId、artifactId、version、package -> Finish。
运行Maven命令:在Maven项目或者pom.xml上右击 -> Run As -> Maven build...(运行自定义命令) -> 在Goals里输入我们想要执行的命令 -> Run。
三、Maven仓库
1. Maven在某个统一的位置存储所有Maven项目共享的构件,实际的Maven项目将不再各自存储其依赖文件,它们只需要声明这些依赖的坐标,在需要的时候(如编译项目的时候需要将依赖加入到classpath中),Maven会自动根据坐标找到仓库中的构件,并使用它们。项目构建完毕后生成的构件也可以安装或者部署到仓库中,供其它项目使用。
2. 仓库的布局
任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存储路径,该路径与坐标的大致对应关系为 groupId/artifactId/version/artifactId-version.packaging 。
3. 查找仓库构件
当Maven根据坐标寻找构件的时候,它首先会查看本地仓库,如果本地仓库存在此构件,则直接使用;如果本地仓库不存在此构件,或者需要查看是否有更新的构件版本,Maven就会去远程仓库查找,发现需要的构件之后,下载到本地仓库再使用,如果本地仓库和远程仓库都没有需要的构件,Maven就会报错。
4. 本地仓库
默认情况下,每个用户在自己的用户目录下都有一个路径名为 C:\Users\xxx\.m2\repository\ (Linux路径为/home/xxx/.m2/repository/)的本地仓库。也可以修改Maven安装目录下的conf/settings.xml文件修改默认路径如下:
<localRepository>E:\repositorywy</localRepository>
5. 私服(Nexus)
私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。当Maven需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为Maven的下载请求提供服务。此外,一些无法从外部仓库下载到的构件也能从本地上传到私服上供大家使得。
在settings.xml中配置Nexus仓库如下:
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>E:\repositorywy</localRepository>
<servers> //Nexus仓库对于匿名用户中只读的,故需添加认证信息
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin</password>
</server>
</servers>
<profiles> //配置xxxNexus仓库
<profile>
<id>xxxNexus</id>
<repositories>
<repository>
<id>xxxNexus</id>
<url>http://127.0.0.1:8081/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>xxxNexus</id>
<url>http://127.0.0.1:8081/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles> //激活profile
<activeProfile>xxxNexus</activeProfile>
</activeProfiles>
......
</settings>
使用 mvn deploy 命令将本地构件放入私库中。
6. 中央仓库
中央仓库是Maven核心自带的远程仓库,它包含了绝大部分开源的构件,这就是Maven为什么能做到“开箱即用”。Maven的安装文件自带了中央仓库的配置。