参阅书籍《maven实战》
maven是什么?
maven主要服务于基于Java平台的项目构建、依赖管理和项目信息管理,可以帮助我们自动化构建过程。 (构建:清理、编译、运行单元测试、生成文档、打包、部署等) maven解决版本依赖,通过一组坐标maven可以准确定位每一个构件——artifact。
maven安装(Windows)
- 首先确保自己安装JDK1.4及其以上版本,运行以下命令进行检测
$ echo %JAVA_HOME% $ java -veriosn
- 下载maven,解压放置工作目录 配置环境变量,如M2_HOME=C:\apache-maven-3.0.5 增加PATH后增加%M2_HOME%/bin/
- 测试maven环境配置,执行以下命令
$ mvn -v
配置HTTP代理
有些时候为了公司安全,需要为Maven配置HTTP代理才可以正常访问外部仓库 用户配置文件(~/.m2/settings.xml) 全局配置文件($M2_HOME/conf/settings.xml) 详细信息可见settings.xml文件
在Eclipse中安装maven插件
在Help->Eclipse Marketplace中搜索maven,安装Maven Integration for Eclipse
默认情况下Eclipse运行在jre上,而m2eclipse的一些功能需要运行在jdk上,解决方案是在eclipse.ini文件中增加如下
--launcher.XXMaxPermSize
256m
-vm
C:\Program Files\Java\jdk1.7.0_79\bin\javaw.exe
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xms128m
-Xmx512m
更换jre
jdk安装时,会在同目录下安装一个jre。在Window->Preferences->Java->Installed JREs中将jre更改为jdk目录中的jre。
不使用内嵌的maven
为了使命令行操作和IDE中使用相同的maven。在Window->Preference->Maven->Installation。点击右侧的Add选择maven安装目录。
Maven样例
1. 编写POM文件
创建项目文件夹,在项目根目录下创建pom.xml,其内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.4"
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.juvenxu.mvnbook</groupId>
<artifactId>hello-world</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Maven Hello World Project</name>
</project>
- 第一行是XML头,指定该XML文档版本和编码方式。
- project元素是所有pom.xml的根元素,其还声明了一些pom相关的命名空间和xsd元素。
- 根元素的第一个子元素modelVersion指定了当前pom模型的版本。对于Maven2和Maven3来说只能是4.0.0。
- groupId、artifactId、version是定义一个项目的基本坐标。
- groupId定义了项目属于哪个组。如com.mycom.myapp
- artifactId定义了当前maven项目在组中唯一的ID。如myapp-web、myapp-domain、myapp-util。
- version指定了当前项目的版本。如1.0-SNAPSHOT。
- name元素是对于用户更友好的项目名称,不是必须的。
2. 编写主代码
在项目根目录下创建src/main/java目录,在该目录下创建com/juvenxu/mvnbook/helloworld/HelloWorld.java,其内容如下:
package com.juvenxu.mvnbook.helloworld;
public class HelloWorld {
public String sayHello() {
return "Hello Maven";
}
public static void main(String[] args) {
System.out.print(new HelloWorld().sayHello());
}
}
在项目根目录下运行
$ mvn clean compile
3. 编写测试代码
本次测试使用JUnit测试工具 首先为pom添加依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.4"
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.juvenxu.mvnbook</groupId>
<artifactId>hello-world</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Maven Hello World Project</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
在项目根目录下创建src/test/java目录,在该目录下创建com/juvenxu/mvnbook/helloworld/HelloWorldTest.java,其内容如下:
package com.juvenxu.mvnbook.helloworld;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class HelloWorldTest {
@Test
public void testSayHello() {
HelloWorld helloworld = new HelloWorld();
String result = helloworld.sayHello();
assertEquals("Hello Maven", result);
}
}
在项目根目录下运行
$ mvn clean test
4. 打包
在项目根目录下运行
$ mvn clean package。
项目pom并未指定打包的类型,默认打包类型为jar。 maven会在打包之前执行编译、测试等操作。 jar插件的jar目标将项目主代码打包成hello-world-1.0-SNAPSHOT.jar并位于target目录下。
如果要让其他maven项目使用此jar包,需要将jar包安装到maven本地仓库中。执行以下命令
$ mvn clean install
5. 运行
至此我们开始运行Hello World项目,默认打包生成的jar不能直接运行,因为main方法的类信息不会添加到manifest中(jar文件中的META-INF/MANIFEST.MF文件)。我们需要借助maven-shade-plugin插件运行。
修改pom文件为
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.4"
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.juvenxu.mvnbook</groupId>
<artifactId>hello-world</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Maven Hello World Project</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.juvenxu.mvnbook.helloworld.HelloWorld</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
我们配置了mainClass为com.juvenxu.mvnbook.helloworld.HelloWorld,打包时这些信息将放入MANIFEST中。执行以下命令
$ mvn clean install,
构建完成之后在target目录下产生hello-world-1.0-SNAPSHOT.jar 和 original-hello-world-1.0-SNAPSHOT.jar。 前者带有Main-Class信息的可运行jar,后者为原始的jar。 执行jar文件
$ java -jar target\hello-world-1.0-SNAPSHOT.jar
6. 使用Archetype生成项目骨架
以maven3为例 运行mvn archetype:generate,会让你选择archetype的编号,默认编号对应maven-archetype-quickstart,直接回车选择该archetype。紧接着输入groupId、artifactId、version以及包名package。
例如:
Define value for property 'groupId': : com.juvenxu.mvnbook
Define value for property 'artifactId': : hello-world
Define value for property 'version': 1.0-SNAPSHOT: :
Define value for property 'package': com.juvenxu.mvnbook: : com.juvenxu.mvnbook.helloworld
Confirm properties configuration:
groupId: com.juvenxu.mvnbook
artifactId: hello-world
version: 1.0-SNAPSHOT
package: com.juvenxu.mvnbook.helloworld
Y: : Y
maven常用命令:
检测Maven版本:
$ mvn -v # 或者
$ mvn -version
获取帮助选项:
$ mvn -h # 或者
$ mvn -help
显示详细错误信息:
$ mvn -e
创建Java项目:
$ mvn archetype:create
-DgroupId=${groupId}
-DartifactId=${artifactId}
# 样例:
$ mvn archetype:create
-DgroupId=com.mycom
-DartifactId=myapp
-Dversion=0.1
创建Web项目:
$ mvn archetype:create
-DgroupId=${packageName}
-DartifactId=${webappName}
-DarchetypeArtifaceId=maven-archetype-webapp
转换成Eclipse工程
$ mvn eclipse:eclipse
清除Eclipse设置信息
$ mvn eclipse:clean
转换成idea项目
$ mvn idea:idea
编译源代码
$ mvn compile
编译测试代码
$ mvn test-compile
产生site
$ mvn site
测试
$ mvn test
$ mvn test -Dtest=${类名} # 单独运行测试类
打包
$ mvn package
$ mvn package -Dmaven.test.skip=true # 打包时不执行测试
清除
$ mvn clean # 将清除原来编译的结果
发布
$ mvn install # 将项目打包成构件安装到本地仓库
$ mvn deploy # 发布到本地仓库或服务器
GO-BACK UP-LEVEL TOP