专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > XML/SOAP

Maven学习笔记(2)——Maven目录结构、pom.xml解析&基础命令(一)

发布时间:2010-05-20 14:01:29 文章来源:www.iduyao.cn 采编人员:星星草
Maven学习笔记(二)——Maven目录结构、pom.xml解析&基础命令(一)



前言



上篇blog学习了Maven的下载与安装,有了家伙就可以放手去干活了,所以本篇blog我们开始学习Maven的一些基本使用方法。



Maven的约定目录结构



使用Maven管理项目的话,那么项目的结构目录务必要按照Maven约定的目录结构来创建项目,我们在官方文档中可以看到Maven提供的目录结构图:


简单介绍一下每个目录下应当存放的文件类型,在官网中可以看到标准的Introduction to the Standard Directory Layout,如下图所示:


显而易见,每个目录下应当放什么样类型的文件都说的很清楚了,一般情况下常用的是以下4个目录,

src/main/java  存放项目的java类源文件,即:Xxx.java

src/main/resources  存放项目的资源文件,如spring、mybatis的配置文件等等

src/test/java  存放项目的用于测试的java类源文件,即:XxxTest.java

src/test/resources  存放项目的测试相关的资源文件

在上面的上面的图中我们还看到了一个pom.xml配置文件,这个文件很重要,它是Maven的核心配置文件,我们的项目版本,jar包依赖等等都以标签的形式保存在了这个配置文件中,在官方文档中也可以具体查看关于这个文件的介绍:


我在上图中标记出来的4个元素是必须配置的4个基础元素,至于为什么,我们可以在Introduction to the POM中看一下pom.xml的Minimal POM:


显而易见,已经说的很清楚了,the minimum requirement for a POM的配置,缺一不可。如果懒得看那一大段英文的原版解释,那么我下面就简要的解释一下这4个元素的含义。

modelVersion ——描述这个pom.xml文件是遵从哪个版本的项目描述符,maven3应当设置成4.0.0

groupId ——指明了创建项目的组织的唯一标识符,一般就是包名了

artifactId ——指的是项目中的主要的模块名(primary artifact),默认命名方式是“项目名-模块名”

version ——指的是项目模块的版本,通常使用的是Maven的快照版本


Maven的目录结构清楚了之后,我们现在就通过手动创建文件夹的方式去创建一个Maven结构的项目并尝试编译运行。不过在此之前我们需要一个包含文件头的pom.xml的模板文件,在哪找呢?很简单,现在许多开源项目都是通过maven去打包的,比如mybatis,我们找到mybatis的jar包,解压后可以在如下目录中看到pom.xml文件:


把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/maven-v4_0_0.xsd">

</project>

好了,现在我们就可以根据上面介绍的Maven目录和pom.xml的必备元素来手动构建一个基于Maven的java项目了。



创建基于Maven的Java项目



首先我们依据Maven约定的目录结构创建文件夹以及pom.xml文件,如下图所示,首先在src/main/java目录下创建我们的java类源文件:


代码很简单,返回一个字符串:

package com.wl.maven01.model;

public class HelloWorld{
	public String sayHello(){
		return "Hello World!";
	}
}

接下来在src/test/java目录下创建用于测试的测试类java源文件:

i

主要用于测试HelloWorld类的sayHello方法的返回值与断言是否一致,代码如下:

package com.wl.maven01.model;

import org.junit.*;
import org.junit.Assert.*;

public class HelloWorldTest{
	@Test
	public void testHello(){
		Assert.assertEquals("Hello World!",new HelloWorld().sayHello());
	}
	
}


这里引入了junit的jar包,Maven的一大特点就是通过pom.xml去管理jar包以及相关依赖,我们只需要在配置文件中写入依赖的相关配置,那么Maven就会自动从Maven中央仓库中将我们的jar包下载到本地仓库,关于依赖和仓库的概念后面再细说,这里我们只需要知道我们的Maven项目不必再手动将jar包add到项目的classpath中,而是在pom.xml中声明即可,Maven会自动下载到本地。下面看看我们的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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.wl.maven01</groupId>
  <artifactId>maven-test</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
    </dependency>
  </dependencies>
</project>

可以看到我们通过<dependency>元素来声明了我们的依赖jar包,当我们编辑pom文件后保存的时候Maven就会自动去下载jar包了,这也是Maven最主要的优点之一。配置文件和java文件都写好之后,我们就可以通过Maven去编译、测试以及打包我们项目了。



编译(compile)、测试(test)和打包(package)



首先是编译项目,我们在命令行下切换到我们Maven项目的根路径下:



通过Maven命令mvn compile编译项目:



在上图中我们可以看到Compiling 1 source file to xxx BUILD SUCCESS字样,即编译了一个源文件到D盘的Maven01/target/classes目录下,下面我们再观察一下之前的Maven项目目录:


和Maven的输出信息一致,确实生成了target文件夹,这就是Maven规定的用于存放编后的字节码文件的目标文件夹,同样的在意料之中,我们编译后的字节码文件也在这个target文件夹下,如下图所示我们可以看到编译后的class文件:



熟悉了Maven的第一个命令之后,我们可以再进行测试,即通过mvn test命令来对运行我们Maven项目的单元测试:


如上图所示,Running com.wl.maven01.model.HelloWorldTest BUILD SUCCESS字样,显而易见的已经成功运行了我们的测试类。但是在target文件夹下又多出了2个文件夹:


surfire-reports目录用于存放生成的测试报告,而test-classes同理肯定是用于存放测试类编译后的字节码文件了。


最后我们再看一下打包命令——mvn package


如上图所示,Building jar:xxx.jar BUILD SUCCESS,很明显打包成功,打好的jar包在D:/Maven01/target根目录下,我们可以在指定的目录中看到它:




总结



本篇blog介绍了Maven的约定目录结构以及Maven的三个基本命令——compile、test和package,下一篇blog将继续介绍Maven的部分命令以及Maven的一些核心概念。

版权声明:本文为博主原创文章,未经博主允许不得转载。

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: