`

二. 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 使用入门详解 #### Maven 介绍与优势 Maven 是一款流行的 Java 项目管理和构建工具,它通过一套标准化的方法来简化项目的构建过程。Maven 的核心价值在于它能够简化项目构建过程,使得开发者能够更加...

    Java环境配置jdk.tomcat.maven.zip

    这个压缩包提供了一键配置所有这些环境变量的功能,极大地简化了初学者的入门步骤,而且声明无病毒,确保了使用的安全性。如果你在使用过程中遇到问题或需要源码,作者表示愿意免费提供。 总的来说,"Java环境配置...

    maven eclipse 培训教程

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

    maven基础入门教程

    ### Maven基础入门教程知识点整理 #### Maven概述 1. **Maven定义与历史** Maven是一个开源项目管理工具,由Apache软件基金会管理。它用纯Java编写,旨在简化Java项目的构建过程以及管理项目生命周期。Maven通过...

    Maven从入门到流畅使用.doc

    【Maven从入门到流畅使用】 Maven是一个强大的项目管理工具,主要应用于Java开发领域。它的核心功能包括项目对象模型(POM)、标准集、项目生命周期、依赖管理系统以及插件执行逻辑。通过POM,Maven能够管理和协调...

    Apache Maven入门篇(上)

    在“Apache Maven入门篇(上)”中,我们将探讨Maven的基本概念、安装步骤以及如何创建和管理一个简单的Java项目。 1. Maven的核心概念: - **POM(Project Object Model)**:POM是Maven项目的核心,是一个XML文件...

    技术部Maven入门培训.ppt

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

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

    标题"超详细Maven快速入门到精通.txt打包整理.zip"表明这是一个关于Maven的全面教程,涵盖了从基础到高级的各个方面,旨在帮助用户快速掌握Maven的使用。Maven是一个Java项目管理和综合工具,由Apache软件基金会开发...

    maven的快速入门.pdf

    学习SSM(Spring、Struts、MyBatis)框架之前,理解并掌握Maven的使用至关重要。 1. Maven的主要功能: - **依赖管理**:Maven通过坐标(GAV,即GroupId、ArtifactId、Version)来管理项目的依赖库,自动下载并...

    maven的入门使用

    ### Maven 入门使用 #### 一、Maven 安装与配置 Maven 是一款自动化构建工具,它可以帮助开发者简化 Java 项目的构建过程。在使用 Maven 之前,首先需要安装并配置好 Maven 环境。 **1. Maven 安装** - 下载 ...

    maven + springmvc 入门实例

    **SpringMVC与Maven入门实例详解** 在Java Web开发中,SpringMVC和Maven是两个非常重要的工具。SpringMVC是Spring框架的一部分,它提供了模型-视图-控制器(MVC)架构,用于构建可维护、高性能的Web应用程序。而...

    maven入门.docx

    ### Maven 入门详解 #### 一、Maven 概述与重要性 Maven 是一个流行的项目管理和整合工具,广泛应用于 Java 开发领域。它为开发者提供了完整的构建生命周期框架,帮助开发者简化项目的构建过程,使得项目的管理和...

    maven 简单使用教程

    【Maven简单使用教程】 Maven是一个基于Java的构建工具,专为管理和构建Java项目而设计。它简化了项目的构建过程,通过一个统一的构建生命周期和依赖管理机制,使得项目构建更加规范和高效。Maven的最新版本为2.0.9...

    使用IntelliJ IDEA 配置Maven(入门).doc.pdf

    **使用IntelliJ IDEA配置Maven入门** 在Java开发中,Maven是一个强大的构建工具,它可以帮助开发者管理和构建项目,解决依赖关系。IntelliJ IDEA是广受欢迎的Java集成开发环境,内置对Maven的良好支持。以下是使用...

    maven 使用入门第三章

    从给定的文件信息来看,标题为“maven 使用入门第三章”,这表明文档主要聚焦于Maven这一开源项目管理工具的使用指南,且重点在第三章的内容上。Maven是一个用于Java项目的自动化构建工具,它通过提供统一的项目信息...

    Maven3入门

    Maven3入门

    HAP框架-Maven入门手册.zip

    结合提供的资源“HAP框架-Maven入门手册.zip”,我们可以深入探讨Maven与HAP框架的基本概念、使用方法以及它们在实际开发中的应用。 1. Maven简介: Maven是由Apache软件基金会开发的项目管理工具,它以XML格式的...

Global site tag (gtag.js) - Google Analytics