`

二. Maven使用入门

 
阅读更多

1.编写POM

Maven项目的核心是pom.xml。POM(Project Object Model,项目对象模型)定义了项目的基本信息,用于描述项目如何构建,声明项目依赖。

基于Maven开发的Hello World

创建一个helloworld文件夹,并在该文件夹下新建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/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.gqshao.myapp</groupId>
	<artifactId>hello-world</artifactId>
	<version>1.0-SNAPSHOT</version>
	<name>Maven Hello World Project</name>
	<properties>
        	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
</project>

 第一行是XML头,指定xml文档的版本和编码方式

 

project:project元素是所有pom.xml元素的根,它还声明了一些POM相关的命名空间及xsd元素,这些属性用于第三方工具(如IDE中的XML编辑器)帮助我们编辑POM。

modelVersion:元素指定了当前POM模型的版本,Maven2及Maven3来说,只能是4.0.0

groupId:定义了项目属于哪个组比如公司是mycom,项目为myapp,那么groupId就应该是com.mycom.myapp
artifactId:定义当前Maven项目在组中唯一的ID,可以为不同的子项目(模块)分配artifactId
version:指定了当前的版本SNAPSHOT译为快照,说明该项目还在开发中,是不稳定的版本。

groupId、artifactId、version这三个元素定义了一个项目的基本坐标,在Maven中,任何jar、pom或者war都是基于这些基本坐标进行区分的
name:声明了一个对于用户更为友好的项目名称。

 

2.编写主代码

 项目主代码和测试代码不同,项目的主代码会被打包到最终的构件中(如jar),而测试代码只在运行测试时用到,不会被打包。

约定:Maven项目主代码位于 src/main/java 目录

遵循Maven的约定,创建该目录,然后在该目录下创建文件com/gqshao/myapp/helloworld/HelloWorld.java

 

package com.gqshao.myapp.helloworld;
public class HelloWorld{
	public String sayHello(){
		return "Hello World";
	}

	public static void main(String[] args){
		System.out.println(new HelloWorld().sayHello());
	}
}
 注意:Java类的包名是 com.gqshao.myapp.helloworld 这与之前POM中定义的groupId和artifactId相吻合。一般来说,项目中Java类的包都应该基于项目的groupId和artifactId。

在Hello World目录下运行mvn clean compile

D:\Hello World>mvn clean compile

D:\Hello World>set MAVEN_OPTS= -Xms128m -Xmx512m
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Hello World Project 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ hello-world ---
[INFO] Deleting D:\Hello World\target
[INFO]
[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ hello-world ---
[debug] execute contextualize
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory D:\Hello World\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ hello-world ---
[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent!
[INFO] Compiling 1 source file to D:\Hello World\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.639s
[INFO] Finished at: Mon May 06 13:30:47 CST 2013
[INFO] Final Memory: 5M/123M
[INFO] ------------------------------------------------------------------------

 解释:clean告诉Maven清理输出目录target\,compile告诉Maven编译项目主代码。

从输出中看到Maven首先执行了clean:clean 任务,删除target\目录。默认情况下,Maven构建的所有输出都在target\目录中;

再执行resources:resources任务;

最后执行compiler:compile任务,将项目主代码编译至target\class目录(编译好的类在D:\Hello World\target\classes\com\gqshao\myapp\helloworld)

 

3.编写测试代码

约定:Maven项目测试代码位于 src/test/java 目录

为Hello World项目添加一个JUnit依赖,修改项目的POM如下:

 

... ...
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.7</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
......
dependencies:该元素下可以包含多个dependency元素以声明项目的依赖,这里添加了一个依赖dependency——groupId是junit,artifactId是junti,version是4.7。scope为依赖范围,test表示该依赖只对测试有效。

 

 

编写测试类

在D:\Hello World\src\test\java\com\gqshao\myapp\helloworld下新建HelloWorldTest.java

 

package com.gqshao.myapp.helloworld;

import static org.junit.Assert.assertEquals;
import org.junit.Test;

import com.gqshao.myapp.helloworld.HelloWorld;

public class HelloWorldTest{
    @Test
    public void testSayHello(){
        HelloWorld helloWorld = new HelloWorld();

        String result = helloWorld.sayHello();

        assertEquals( "Hello Maven", result );
    }
}
 

 

进行测试

mvn clean test

 

如果遇到提示使用-source5或更高版本以启动注释在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/xsd/maven-4.0.0.xsd">
... ...
	<build>
		<plugins>
  			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.6</source>
					<target>1.6</target>
				</configuration>
  			</plugin>
		</plugins>
  </build>

</project>
 

 

4.打包和运行

(1)在POM中没有指定打包类型,使用默认打包类型jar。

执行命令mvn clean package

注意:Maven在打包之前会执行编译、测试等操作。完成后会在D:\Hello World\target\下生成helloWorld-1.0-SNAPSHOT.jar

 

(2)在其他项目中使用该jar包

如果有需要,可以直接复制该jar包到其他项目的classpath中从而使用HelloWorld类,如果想让其他Maven项目直接饮用到这个jar

执行命令mvn clean install

注意:在打包之后又执行了install:install任务,并将项目输出jar安装到了Maven本地仓库中。

 

上述mvn clean compile、mvn clean test、mvn clean package、mvn clean install为Maven最主要的命令。

执行test之前会执行compile,执行package之前会执行test,执行install之前会执行package

 

5.生成可执行文件

借助maven-shade-plugin,配置如下:

<?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/xsd/maven-4.0.0.xsd">
	<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.gqshao.myapp.helloworld.HelloWorld</mainClass>
								</transformer>
							</transformers>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>

 

plugin元素在<project>-<build>-<plugins>下面,在这里配置mainClass,项目在打包的时候会将该信息放到MANIFEST.MF中。

执行mvn clean install,在target\目录下生成helloWorld-1.0-SNAPSHOT.jar和original-helloWorld-1.0-SNAPSHOT.jar,后者是原始jar。

在helloWorld-1.0-SNAPSHOT.jar的META-INF\MANIFEST.MF中包含如下信息:

Main-Class: com.gqshao.myapp.helloworld.HelloWorld

 

执行该jar文件

D:\Hello World>java -jar target\helloWorld-1.0-SNAPSHOT.jar
Hello Maven

 

 

5.使用Archetype生成项目骨架

遇到提示直接回车执行默认编号,对应的Archetype为maven-archetype-quickstart,紧接着输入groupId、artifactId、version以及package

 

或经过筛选

mvn archetype:generate -DarchetypeCatalog=internal

16: internal -> org.apache.maven.archetypes:maven-archetype-quickstart ()
19: internal -> org.apache.maven.archetypes:maven-archetype-webapp (A simple Java web application)

 

6.m2eclipse简单使用

(1)导入项目

在eclipse中,File-Import-Other-Maven-Existing Maven Projects,在弹出的对话框中,Root Directory:选择要导入项目的目录。

(2)创建Maven项目

在eclipse中,File-New-Other-Maven-Maven Project,在弹出对话框中,使用默认选项(Use default Workspace location)-Next-选择maven-archetype-quickstart-Next-输入Group Id、Artifact Id、Version、Package-Finish

mvn archetype:generate

(3)运行mvn命令

在Maven项目上或pom.xml上右键,在弹出快捷菜单中选择Run As,就能看到常见的Maven命令;

如果默认选项中没有我们想要执行Maven命令,选择Maven build... 自定义Maven运行命令。在弹出对话框中的Goals中输入clean test。

这里还可以对内存进行优化选择第二个TAB: JRE,然后在VM arguments中输入配置如:

-Xms128m -Xmx512m

 

6.运行main方法

通过maven-compiler-plugin插件运行main方法,插件配置方式如下:

</build>
	<plugins>
		<plugin>
			<artifactId>maven-assembly-plugin</artifactId>
			<version>2.4</version>
			<configuration>
				<descriptorRefs>
					<descriptorRef>jar-with-dependencies</descriptorRef>
				</descriptorRefs>
			</configuration>
		</plugin>
	</plugins>
</build>

 运行方法:

clean package exec:java -Dexec.mainClass=com.myapp.hadoop.remote.WordCount

 

7.Maven项目导入eclipse

通过maven-eclipse-plugin,配置方式如下:

<!-- eclipse插件, 设定下载依赖包的source code -->
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-eclipse-plugin</artifactId>
	<version>2.9</version>
	<configuration>
		<downloadSources>true</downloadSources>
		<downloadJavadocs>false</downloadJavadocs>
	</configuration>
</plugin>

 运行命令

mvn eclipse:clean eclipse:eclipse

 然后可以导入eclipse中

 

 
 
分享到:
评论

相关推荐

    1.1.maven简介.mp4

    1.maven入门 1.1.maven简介 1.2.maven的作用 1.3.maven的安装 2.项目案例 2.1.构建项目 2.2.项目拆分 3.聚合和继承 3.1.聚合 3.2.继承 4.maven高级特性 4.1.属性配置 4.2.版本管理 4.3.资源管理 5.私服 5.1.nexus...

    Maven 使用入门.pdf

    Maven 使用入门.pdf

    maven eclipse 培训教程

    Maven构建并管理Flex项目入门.pdf Maven简单实用教程.docx OTNVD_WebLogicServerDevelopment_CN.pdf 《Maven实战》(国内首本Maven著作)(Maven的安装、配置及使用入门) 《Maven权威指南》.pdf.pdf

    Maven实战- 入门

    第 3 章 Maven 使用入门 16. 3.1 编写 POM 17. 3.2 编写主代码 18. 3.3 编写测试代码 19. 3.4 打包和运行 20. 3.5 使用 Archetype 生成项目骨架 21. 3.6 m2eclipse 简单使用 22. 3.7 NetBeans Maven 插件简单使用 ...

    JAVA(maven)项目管理器.doc

    2.maven快速入门; 2.1 Maven的概念; Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建。报告和文档的软件项目管理工具;它提供仓库概念,尽可能避免了运行环境的问题导致程序无法运行; ...

    技术部Maven入门培训.ppt

    很详细,推荐 1.Maven关键知识点 2.Maven的安装配置 3.用Maven构建项目 4.搭建Nexus私服 5.相关资料

    maven基础入门教程

    maven 入门教程PDF,包括maven介绍,配置,项目创建,eclipse创建maven项目等

    maven 使用入门第三章

    maven 使用入门第三章,只有第三章技术文档资料。

    超详细Maven快速入门到精通.txt打包整理.zip

    超详细Maven快速入门到精通.txt打包整理.zip

    Maven3入门

    Maven3入门

    4.maven学习.doc

    maven学习,适合小白,入门maven,或者想要精通maven的程序猿,欢迎大家下载优质文件,精品maven课程,有如疑惑可以私信我,或者发送到我的邮箱。

    Maven+SpringMVC的入门级HelloWorld实例

    Maven+SpringMVC的入门级HelloWorld实例,简单了解Maven和SpringMVC整合

    maven使用入门

    maven入门教程,maven是一个有用的构建工具,把源代码构建成可发布构件的工具,值得一学。

    Maven快速入门

    Maven快速入门,管理源码,版本控制,

    maven入门到精通

    maven入门到精通 用 Maven 做项目管理 在 Java世界中我们很多的开发人员选择用 Ant来构建项目,一个 build.xml能够完成编译、测试、打包、部署等很多任务,但我们也碰到了很多的问题,如 jar文件管理混乱,各个...

    maven + springmvc 入门实例

    maven + springmvc 入门实例,安装好maven之后导入myeclipse即可运行。maven安装方法请自行百度

    Maven入门文档.doc

    Maven入门文档,maven使用方法的简介

    maven的入门使用

    maven入门使用 maven创建web项目 maven生成eclipse项目 maven+jetty的使用 jetty在eclipse的配置和使用

    Maven实战 安装配置

    第3章 Maven使用入门16.3.1 编写POM17.3.2 编写主代码18.3.3 编写测试代码19.3.4 打包和运行20.3.5 使用Archetype生成项目骨架21.3.6 m2eclipse简单使用22.3.7 NetBeans Maven插件简单使用23.3.8 小结

Global site tag (gtag.js) - Google Analytics