Maven学习札记(一) 环境搭建与Hello World

Maven学习笔记(一) 环境搭建与Hello World
今天开始学习Maven。也开始尝试用博客记录自己的学习历程。写下心得体会以便日后巩固。
水滴石穿。

准备的学习资料主要是机械工业出版社《Maven实战》这本书,该书基于Maven3。豆瓣上的评价不错。

另外的资料就是网上的文档和stack overflow了。

今天大致了解了一下Maven的背景,搭了搭环境,照猫画虎一个hello world。

既然是跨平台的东西,我就在windows上用吧。从http://maven.apache.org/download.html下载3.0.4版本,配置好环境变量M2_HOME=D:\bin\apache-maven-3.0.4,加入Path。 即可在命令行执行mvn脚本。相当轻松。

在eclipse上安装m2eclipse插件还是花了点力气的。顺着http://m2eclipse.sonatype.org/sites/m2e去安装,一直报错,说是缺少插件或者不兼容,网上找了一通,装了GEF,subclipse,还是不成功。 最后发现m2eclipse已经交由eclipse基金会维护了,发布在http://eclipse.org/m2e上。于是直接从这里安装就一路顺风顺水了。看来这书虽然是11年出版的,还是没跟上时代的步伐啊:)

基本上搭环境的难度不大。于是就开始上手hello world吧。

首先是在非IDE环境下。在hello-world根目录下建一个pom.xml配置文件,POM(Project Object Model)定义了项目的基本信息,用于描述项目如何构建,声明项目依赖等等。

主代码:
package com.able.mvnbook.helloworld;

public class HelloWorld {

     public String sayHello() {
		
		return "Hello Maven!!";
	
	}
	
	public static void main(String[] args) {
	
		System.out.println(new HelloWorld().sayHello());
		
	}
	
}



测试代码:
package com.able.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);
		
	}
} 




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.able.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.able.mvnbook.helloworld.HelloWorld</mainClass>
									</transformer>
								</transformers>
							</configuration>
						</execution>
					</executions>
				</plugin>
			</plugins>
		</build>
		
					
</project>





其中groupId定义了项目属于的组,往往与项目所在组织或公司有关。

artifactId定义当前Maven项目在组中的唯一ID。

version定义版本号,这里用SNAPSHOT表示尚处于开发中。这个我倒是第一次学到。

name定义一个对用户更为友好的项目名称,便于信息交流。

测试代码用了JUnit,因此在pom.xml中需要配置一个依赖,即dependency用于声明。其中scope声明为test表示该依赖只对测试有效,在测试代码中import JUnit代码可用而在主代码中import JUnit就会造成编译错误。 当然,默认的scope是compile,表示依赖对主代码和测试代码均有效。

为了把包含入口main方法的类信息添加到manifest中,以生成可执行的jar文件,需要配置一个maven-shade-plugin插件。配置完后项目在打包时会把mainClass信息放在MANIFEST中,执行mvn clean install,构建完成后在target目录下可以看到hello-world-1.0-SNAPSHOT.jar和original-hello-world-1.0-SNAPSHOT.jar,前者可运行,后者为原始jar。 在项目根目录执行java -jar target\hello-world-1.0-SNAPSHOT.jar即可得到控制台输出内容。


几个命令行下常用的命令,顾名思义即可:
mvn clean compile
mvn clean test
mvn clean package
mvn clean install

其中clean 是告诉Maven清理输出目录target。

至此,命令行使用基本就可以了。


在eclipse上可以用Import Maven Project导入之前写的项目,也可以直接new一个新的项目,记得在select an archetype的地方选择maven-archetype-quickstart,然后根据与前面相同的规则输入groupId,artifactId,version,package等信息即可创建新的Maven项目。在运行时,会发现Run as下面有很多常用的命令,规则和前面也是一样的,一跑就通。


于是,Maven的初期工作完成。接下来继续学习。