Maven初探

本文描述了如何使用maven构建一个简单的Hello World项目

1.编写POM

Maven项目的核心是pom.xml(Project Object Model),pom定义了项目的基本信息,用于描述项目如何构建,声明项目依赖等等。先为Hello World项目编写一个简单的pom.xml。

首先创建一个hello-world的文件夹,在该目录下新建一个名为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.juvenxu.mvnbook</groupId>
  <artifactId>hello-world</artifactId>
  <version>1.0-SNAPSHOT</version>
  <name>Maven Hello World Project</name>
  </project>

modelVersion指定当前pom模型的版本,对于Maven2及Maven3来说,它只能是4.0.0。这段xml代码中最重要的是groupId、artifactId和version三行。这三个元素定义了一个项目基本的坐标。

groupId定义了项目属于哪个组,这个组往往和项目所在的组织或公司存在关联。如果你的公司是mycom,有一个项目叫myapp,那么groupId就应该是com.mycom.myapp。

artifactId定义了当前Maven项目在组中唯一的ID,我们为这个Hello World项目定义artifactId为hello-world。

version制定了项目当前版本------1.0SNAPSHOT。SNAPSHOT意为快照,说明该项目还处于开发中,是不稳定版本。

最后一个name元素声明了一个对于用户更为友好的项目名称,虽然这不是必须的。

2.编写主代码

    默认情况下,Maven假设项目主代码位于src/main/java目录,于是我们在hello-world文件夹下创建文件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.println(new HelloWorld().sayHello());
	}
}

代码编写完毕后,使用Maven进行编译,在hello-world文件夹下运行命令mvn clean compile。经过Maven编译,所有输出都在targer目录中。

3.编写测试代码

Maven项目中默认的主代码目录是src/main/java,对应的,Maven项目中默认的测试代码目录是src/test/java。因此需要创建该目录。

在编写测试代码之前,首先需要为Hello World项目添加一个JUnit依赖,修改项目的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.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>

代码中添加了dependencies元素,该元素下可以包含多个dependency元素以声明项目的依赖,这里添加了一个junit依赖。有了这段声明,Maven就能自动从中央仓库下载junit-4.7.jar。scope为依赖范围,值为test表明该依赖只对测试有效。也就是说,在测试代码中使用import junit代码没有问题,如果在主代码中使用import junit代码,则会造成编译错误。如果不声明依赖范围,默认为compile,表示该依赖对主代码和测试代码都有效。

配置了测试依赖,下面在src/test/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.打包

在编译、测试之后,下一个重要步骤就是打包(package)。Hello World的pom中没有指定打包类型,默认的打包类型为jar。执行命令mvn clean package进行打包,在项目的target目录中将会生成一个名为hello-world-1.0-SNAPSHOT.jar的文件。至此,可以复制这个jar文件到其它项目的classpath中从而使用HelloWorld类。

5.依赖范围

作用域 编译时有效 测试时有效 运行时有效 实例
compile spring-core.jar
test     junit.jar
runtime   mysql-connector-java.jar
provided   servlet-api.jar
system   JDK的rt.jar
时间: 2024-08-26 23:20:17

Maven初探的相关文章

Maven小结(一 初探)

1.下载Maven,解压并设置到环境变量中 https://maven.apache.org/download.cgi 需要先设置"JAVA_HOME",否则报错: 之后查看Maven版本成功: 1.1设置%MAVEN_OPTS% 为-Xms128m -Xmx512m,表示设置JVM的最小和最大内存: This variable contains parameters used to start up the JVM running Maven and can be used to s

国内物联网平台初探(一):百度物接入IoT Hub

国内物联网平台初探(一) ——百度物接入IoT Hub 马智 物接入IoT Hub - 架构 全托管的云服务,帮助建立设备与云端之间安全可靠的双向连接 支撑海量设备的数据收集.监控.故障预测等各种物联网场景 物接入IoT Hub - 功能 通信协议:支持MQTT 数据安全:设备级认证.策略授权:双向安全连接.SSL传输 开发语言:支持多种开发语言.兼容主流硬件设备 支持C.C#.Python.Java.PHP等 支持CLI命令行工具(Python) 分析服务:对接百度大数据服务 物接入IoT H

Gradle初探

(一):创建一个Gradle项目 1. 环境准备 1.1. 先上Gradle官网下载最新版的程序,地址:https://gradle.org/gradle-download/. 1.2. 配置环境变量 GRADLE_HOME:值为gradle根目录路径,并在PATH中添加 "%GRADLE_HOME%\bin" 1.3. 配置IDE工具的Gradle环境 这里我使用IDEA进行创建(eclipse应该也有对应的gradle插件). 首先在IDEA的settings中找到Gradle选项

Flynn初探:基于Docker的PaaS平台

Flynn是一个开源的PaaS平台,可自动构建部署任何应用到Docker容器集群上运行,其功能特性与组件设计大量参考了传统的PaaS平台Heroku.本文旨在从使用动机.基本对象.层次架构.功能组件.基本工作流这几个方面对Flynn做总体的介绍. 为什么需要Flynn 为了便于理解Flynn的作用与功能,让我们先来看看应用程序从开发到构建再到部署再到运行分别需要经历的几个实体状态: 更具体一点,以一个Java程序为例来描述: 源代码:包括*.java.log4j.properties.pom.x

初探AngularJS6.x---目录结构说明

初探AngularJS6.x---目录结构说明 在上一篇中我们进行了AngularJS6.x的基本环境搭建,并试着建了一个项目conk-out,今天我们来在这个项目上进行一些扩展. 我们的项目代码包括angular的组件,模版,样式文件,图片还有其他我们自己写的都集中在src里,这个跟java是一样的,这个目录以外的一些目录和文件则是帮助我们构建项目用的,所以可以暂时不用管它.可以使用treesrc/命令以树的形式展示出src目录下的所有目录及文件,如下图所示: 在app里我们看到了一系列和ap

跟我学SpringCloud | 第十二篇:Spring Cloud Gateway初探

SpringCloud系列教程 | 第十二篇:Spring Cloud Gateway初探 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如无特殊说明,本系列教程全采用以上版本 前面我们在聊服务网关Zuul的时候提到了Gateway,那么Zuul和Gateway都是服务网关,这两个有什么区别呢? 1. Zuul和Gateway的恩怨情仇 1.1 背景 Zuul是Netflix开源的一个项目,Spring只是将Zuul集成在了Spring

史上最详细的IDEA优雅整合Maven+SSM框架(详细思路+附带源码)

目录 前言: 1. 搭建整合环境 2.Spring框架代码的编写 3.SpringMVC框架代码的编写 4. Spring整合SpringMVC的框架 5.MyBatis框架代码的编写 6. Spring整合MyBatis框架 7.spring整合mybatis框架配置事务(Spring的声明式事务管理) 8.源码.源码.源码~重要的标题发三遍 前言: 网上很多整合SSM博客文章并不能让初探ssm的同学思路完全的清晰,可以试着关掉整合教程,摇两下头骨,哈一大口气,就在万事具备的时候,开整,这个时

Spring Cloud Gateway初探

Zuul和Gateway的恩怨情仇 1.1 背景 Zuul是Netflix开源的一个项目,Spring只是将Zuul集成在了Spring Cloud中.而Spring Cloud Gateway是Spring Cloud的一个子项目. 还有一个版本的说法是Zuul2的连续跳票和Zuul1的性能并不是很理想,从而催生了Spring Cloud Gateway. 1.2 性能比较 网上很多地方都说Zuul是阻塞的,Gateway是非阻塞的,这么说是不严谨的,准确的讲Zuul1.x是阻塞的,而在2.x

IDEA 配置maven

编写Maven的settings.xml文件内容如下 引入阿里镜像和maven在中国的中央仓库镜像 <?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sc