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

来源:互联网 发布:java员工管理系统简历 编辑:程序博客网 时间:2024/06/04 00:53

前言



上篇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的快照版本(例如:0.0.1-SNAPSHOT)


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


把pom.xml拷贝出来,删除掉多余的部分,只留一个文件头即可:

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"   
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
  5.   
  6. </project>  

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



创建基于Maven的Java项目



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


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

[java] view plain copy
  1. package com.wl.maven01.model;  
  2.   
  3. public class HelloWorld{  
  4.     public String sayHello(){  
  5.         return "Hello World!";  
  6.     }  
  7. }  

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

i

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

[java] view plain copy
  1. package com.wl.maven01.model;  
  2.   
  3. import org.junit.*;  
  4. import org.junit.Assert.*;  
  5.   
  6. public class HelloWorldTest{  
  7.     @Test  
  8.     public void testHello(){  
  9.         Assert.assertEquals("Hello World!",new HelloWorld().sayHello());  
  10.     }  
  11.       
  12. }  


这里引入了junit的jar包,Maven的一大特点就是通过pom.xml去管理jar包以及相关依赖,我们只需要在配置文件中写入依赖的相关配置,那么Maven就会自动从Maven中央仓库中将我们的jar包下载到本地仓库,关于依赖和仓库的概念后面再细说,这里我们只需要知道我们的Maven项目不必再手动将jar包add到项目的classpath中,而是在pom.xml中声明即可,Maven会自动下载到本地。下面看看我们的pom.xml文件:

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <project  
  3.     xmlns="http://maven.apache.org/POM/4.0.0"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
  6.   <modelVersion>4.0.0</modelVersion>  
  7.   <groupId>com.wl.maven01</groupId>  
  8.   <artifactId>maven-test</artifactId>  
  9.   <version>0.0.1-SNAPSHOT</version>  
  10.     
  11.   <dependencies>  
  12.     <dependency>  
  13.       <groupId>junit</groupId>  
  14.       <artifactId>junit</artifactId>  
  15.       <version>4.11</version>  
  16.     </dependency>  
  17.   </dependencies>  
  18. </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的一些核心概念。

阅读全文
0 0
原创粉丝点击