[Maven]构建一个简单的Maven项目-HelloWorld

    本篇内容为根据徐晓斌版《Maven实战》的第3章 Maven使用入门整理而成的学习笔记。
编写项目:
    编写一个Maven项目,主要包括三个部分:POM文件、主代码、测试代码
1. 编写POM(Project Object Model,项目对象模型)
    a. 创建名为hello-world的文件夹,并在文件夹中新建一个文件pom.xml
    b. 文件内容如下:
<?xml version = "1.0" encoding="UTF-8"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0"
		xmls: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头,指定了该文档的版本和编码方式;
    project元素,是所有pom.xml的根元素,它还声明了一些POM相关的命名空间及xsd元素;
    modelVersion元素,指定了当前POM模型的版本,对于Maven2及Maven3来说,它只能是4.0.0;
    groupId、artifactId、version元素,定义了一个项目基本的坐标,分别定义了项目所在的组、当前Maven项目在组中的唯一ID、以及项目当前的版本;
    name元素,声明了一个对于用户更为友好的项目名称。
    POM使得项目对象模型最大程度的与实际代码想独立。
2. 编写主代码
    a. 默认情况下,主代码位于src/main/java目录,创建该目录,并在目录下创建文件com/juvenxu/mvnbook/helloworld/HelloWorld.java
    b. 主代码如下:
package com.juvenxu.mvnbook.helloworld;

public class HelloWorld {

    public String sayHello() {
        return "Hello Maven";
    }

    public static void main(String[] args) {
        System.out.println(new HelloWorld().sayHello());
    }
}
 
    其中:该Java类的包名与之前在POM中定义的groupId和artifactId相吻合。
    c. 主代码编写完毕后,使用Maven进行编译,在项目根目录下运行命令mvn clean compile。将会依次执行三个任务:
            clean:clean任务:删除target/目录;
            resources:resource任务(未定义项目资源,略过);
            compiler:compiler任务:将项目主代码编译至target/classes目录
        至此,Maven完成了项目的清理和编译任务。
3. 编写测试代码
    a. Maven项目中默认的测试代码目录是src/test/java,创建该目录;
    b. 要使用JUnit,需要在项目中添加一个JUnit依赖,修改POM如下:
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.7</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
 
    在name元素之后,添加dependencies元素,该元素可包含多个dependency元素以声明项目的依赖,其中
        通过基本坐标groupId、artifactId、version,maven可以自动下载junit-4.7.jar;
        scope元素,为依赖范围,test表明该依赖只对测试有效,如果不声明范围,默认值为compile,表示该依赖对主代码和测试代码都有效。
    c. Maven的compiler插件,默认只支持编译Java1.3,而Junit4的@Test注解,需要-source 5或更高版本以启动,因此需要配置该插件,使其支持java 5,在dependencies元素之后,添加build元素,代码如下:
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.5</source>
					<target>1.5</target>
				</configuration>
			</plugin>
		</plugins>
	</build>
      d. 编写测试类,在src/test/java目录下创建测试文件,内容如下:
package com.juvenxu.mvnbook.helloworld;

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

import com.juvenxu.mvnbook.helloworld.HelloWorld;

public class HelloWorldTest {

    @Test
    public void testSayHello() {
        HelloWorld helloWorld = new HelloWorld();
        String result = helloWorld.sayHello();
        assertEquals("Hello Maven", result);
    }
}
     e. 调用Maven执行测试,运行mvn clean test。测试通过。
 
打包和运行:
打包:
        执行命令mvn clean package进行打包,将项目主代码打包成一个名为hello-world-1.0-SNAPSHOT.jar的文件,该文件也位于target/输出目录中。
安装:
        执行命令mvn clean install,将目录输出的jar安装到Maven本地仓库中,可以打开相应的文件夹看到Hello World项目中的pom和jar。这样,其他Maven项目才可以使用它。
运行:
        默认打包生成的jar是不能直接运行的,因为带有main方法的类信息不会添加到manifest中,因此需要借助maven-shade-plugin插件生成可执行的jar文件,POM配置如下:
			<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元素中添加plugin元素,配置mainClass,项目在打包时就会将该信息放到mainifest中。
        重新运行mvn clean install,执行jar文件java -jar target\hello-world-1.0-SNAPSHOT.java。控制台输出:Hello Maven
 
使用Archetype生成项目骨架
        文件的基本目录结构以及pom.xml文件,可以称为项目的骨架,这其中有一些Maven的约定。当多次搭建Maven骨架时,就会造成很多的重复工作,因此,Maven提供了Archetype以帮助我们快速生成项目骨架。
        以Hello World为例,如果是Maven 3,运行
        mvn archetype:generate
        如果是Maven 2 ,最好运行如下命令
        mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-5:generate
        根据提示,输入要创建项目的groupId、artifactId、version以及包名package。
        Archetype插件将根据我们提供的信息创建项目骨架。
手动创建的项目骨架如下图:


 自动构建的项目骨架如下图:


 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值