[Maven实战](3)Maven创建项目

前两篇文章我们已经大概了解并安装好了Maven。现在我们开始使用Maven创建项目,在此我们创建一个最简单的Hllo World项目。让我们对Maven有一个初步的认识,对于其中的诸多要点与疑点,以后文章中慢慢一起学习。所以这篇文章主要是让我们对Maven创建项目的流程有一个大概的了解。

1. Maven项目目录结构



2. 主代码

默认情况下项目主代码位于src/main/java目录下,遵循这个约定,创建该目录,然后在该目录下创建文件com/sjf/model/helloworld.java (com.sjf.model 是包名)。
   
   
package com.sjf.model;
 
 
public class HelloWorld {
 
public String sayHello(){
return "Welcome to Maven World";
}
public static void main(String[] args) {
System.out.println(new HelloWorld().sayHello());
}
}

注意:

绝大多数情况下,应该把项目主代码放到src/main/java目录(遵循Maven约定),而无需额外配置,Maven会自动搜索该目录找到项目主代码。


3. 编写POM

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

现在先为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.sjf.mavendemo</groupId>
<artifactId>hello-world</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Maven Hello World Project</name>
</project>

代码第一行是XML头,指定了该XML文档的版本和编码方式。紧接着是project元素,project是所有pom.xml的根元素,它还声明了一些POM相关的命名空间等。

根元素下的第一个元素是modelVersion指定了当前POM模型的版本,对于Maven2 和 Maven3 来说,它只能是4.0.0。

groupId,artifactId和version三个元素定义了一个项目基本的坐标,在Maven的世界中,任何jar,pom或者war都是以这些基本的坐标区分的。

groupId定义了项目属于哪个组,往往和项目所在的组织或公司相关联。比如说在googlecode上建立一个名为myapp的项目,那么groupId就为com.googlecode.myapp。在本实例中为com.sjf.mavendemo。

artifactId定义了当前Maven项目在族中唯一的ID,在本实例中为hello-world。

version指定了Hello World项目当前的版本,1.0SNAPSHOT。SNAPSHOT意思为快照,说明该项目还处于开发之中,是不稳定的版本。

name声明了一个对于用户更为友好的项目名称,不是必须的,但是推荐为每个POM声明name,以方便信息交流。

4. 编译

代码编写完成之后,使用Maven进行编译,在项目根目录下运行mvn compile会得到如下结果:




如果是第一次编译,会下载一些东西存储在.m2/repository下。


compile告诉Maven编译项目主代码,将项目主代码编译至target/classes目录下。默认情况下,Maven构建的所有输出都在target/目录中。


5. 测试代码

5.1 测试POM

默认情况下项目主代码位于src/test/java目录下,遵循这个约定,创建该目录,然后在该目录下创建文件com/sjf/model/helloworldTest.java (com.sjf.model 是包名)。

首先为helloworld项目添加一个JUnit依赖,修改项目的POM代码如下:
   
   
<?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.sjf.mavendemo</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.10</version>
</dependency>
</dependencies>
</project>

代码中添加了dependencies元素,该元素下可以包含多个dependency元素以声明项目的依赖。这里添加了一个依赖(JUnit),groupId为junit,artifactId为junit,version为4.10。有了这段声明,Maven就能构自动下载junit-4.10.jar。哪到底从那下载呢?没有Maven之前,我们需要手动从JUnit官网上下载jar包。有了Maven之后,可以自动访问中央仓库(http://repo1.maven.org/maven2)下载需要的文件。

5.2 测试代码

配置了测试依赖,接着可以编写测试类了。
   
   
package com.sjf.model;
 
import org.junit.Assert;
import org.junit.Test;
 
 
public class HelloWorldTest {
@Test
public void testSayHello(){
Assert.assertEquals("Welcome to Maven World",new HelloWorld().sayHello());
}
}


5.3 测试

测试用例编写完毕之后就可以调用Maven执行测试。运行 mvn test:




test告诉Maven编译项目测试代码,将项目测试代码编译至target/test-classes目录下。


5.4 整体结构

6. 打包和运行

将项目进行编译和测试之后,下一个重要步骤就是打包(Package)。Hello World项目POM中没有指定打包类型,使用默认打包类型jar。使用如下简单执行命令进行打包:
    
    
mvn clean package
Maven会在打包之前执行编译,测试等操作。看到的jar:jar任务负责打包,实际上就是jar插件的jar目标将项目主代码打包成一个名为 hello-world-1.0-SNAPSHOT.jar的文件。该文件也位于target/输出目录中。如果需要的话,就可以复制这个jar文件到其他项目的classpath中从而使用HelloWorld类。

但是,如何才能让其他的Maven项目直接引用这个jar呢?还需要一个安装步骤:
    
    
mvn clean install
13.png
图13

在打包之后,又执行了安装任务install:install。从输出可以看到该任务将项目输出的jar安装到了Maven本地仓库中,可以打开相应的文件夹看到Hello World项目的pom和jar。(C:\Users\Administrator\.m2\repository\com\sjf\mavendemo\hello-world\1.0-SNAPSHOT)

14.png
图14

之前说过JUnit的POM以及jar的下载的时候,只有构件被下载到本地仓库后,才能由所有Maven项目使用,所以只有将Hello World的构件安装到本地仓库之后,其他Maven项目才能使用它。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@SmartSi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值