Maven学习笔记(一)

来源:互联网 发布:wifi自动切换软件 编辑:程序博客网 时间:2024/05/07 01:58

一、Maven概述

Maven,是一个软件(特别是Java软件)项目管理及自动构建工具,由Apache软件基金会所提供。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤(摘自维基百科)。Maven的安装就不在这里赘述了,并不复杂,在网上可以找到很多现成的材料,主要记录一些我学习Maven时的笔记。

二、Maven的目录结构

详细的Maven目录结构和各个目录的作用可以参考这篇文章。

三、pom文件

Maven使用项目对象模型(Project Object Model,POM)来配置,项目对象模型存储在名为 pom.xml 的文件中。下面是一个简单的pom文件示例(摘自维基百科)。
<project>  <!-- model version is always 4.0.0 for Maven 2.x POMs -->  <modelVersion>4.0.0</modelVersion>    <!-- project coordinates, i.e. a group of values which       uniquely identify this project -->    <groupId>com.mycompany.app</groupId>  <artifactId>my-app</artifactId>  <version>1.0</version>  <!-- library dependencies -->    <dependencies>    <dependency>          <!-- coordinates of the required library -->            <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>3.8.1</version>            <!-- this dependency is only used for running and compiling tests -->            <scope>test</scope>          </dependency>  </dependencies></project>
其中project标签的子标签groupId代表了开发此项目的组织名,artifcatId表示项目名、模块名,而version表示项目的版本信息。

四、Maven初识

(一)、基本的Maven命令

在弄懂了Maven项目的目录结构之后就可以尝试建立一个这样结构的Maven工程了,首先创建一个mvn-test01这个目录,在这个目录下新增一个src的文件夹,在src下创建java文件夹,在java文件夹下就可以创建项目的文件夹和源代码了,最终我创建完成的目录如图所示。
我同时还写了一个简单的HelloWorld小程序,只是简单地返回一个Hello World!字符串。
package com.imooc.model;public class HelloWorld {public String sayHello() {return "Hello World!";}}
至此,main目录下的文件就创建完成了,接下来是创建test目录下的文件,目录结构与main的目录结构相同,如图所示。
同时创建一个HelloWorldTest的测试小程序,在测试类中我使用了Junit单元测试工具,具体代码如下:
package com.imooc.model;import org.junit.*;import org.junit.Assert.*;public class HelloWorldTest {@Testpublic void testSayHello() {Assert.assertEquals("Hello World!", new HelloWorld().sayHello());}}
源代码和测试代码都完成之后就需要建立一个pom文件来描述这个项目了,在项目根目录下新建一个pom.xml,具体内容如下:
<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.imooc</groupId>  <artifactId>mvn-test01</artifactId>  <version>0.0.1SNAPSHOT</version>  <dependencies>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>4.10</version>    </dependency>  </dependencies></project>
我定义的groupId为com.imooc,artifactId为mvn-test01,version是0.0.1SNAPSHOT,因为我的测试方法用到了Junit单元测试工具,但是项目里并没有引入相应的jar包,所以需要在pom文件中添加一个依赖,用于引入相应的jar包。
接下来就可以编译这个工程了,要编译这个maven工程,就需要使用mvn compile命令,这个命令用于编译项目,引入相应的jar包,并生成target文件夹。在没有执行mvn compile命令之前,项目的目录结构如下图所示:

打开命令行,进入当前项目的目录,运行命令mvn compile,终端会打印一系列的日志,如果是第一次运行该项目,程序会先下载相应的jar包,可能会需要一段时间,如果运行成功,日志显示build success。

这时再打开原来的项目路径,就会发现多了一个target文件夹。

这个文件夹下包含了将项目里的源码编译过的字节码文件和测试报告。
现在分析以下maven引入包的流程:使用mvn compile编译源代码,编译过程中如果发现引入其他的jar包,则去pom文件中查找依赖包的坐标,引入坐标后,去本地仓库中查找;如果本地仓库中有相关jar包,则将jar包加入项目的classpath中,如果没有相关jar包,则去网络的中央仓库中查找并下载到本地仓库中,同时将jar包加入项目的classpath中。
编译完成后就需要对项目进行测试,使用mvn test可以运行项目的test文件夹下的测试类,并显示测试的结果。
在将maven工程编译完成并且测试通过后,可以使用mvn package命令对项目进行打包,打包完成后在target文件夹下会生成一个项目的jar包。

至此一个maven工程的编译、测试和打包过程就完成了,现在来看另一种场景,如果我有另一个maven项目叫mvn-test02,它里面有一个类叫SayHello,在这个类中有一个方法sayHello,在这个方法里调用了mvn-test01工程中HelloWorld的sayHello方法,代码如下。
package com.imooc.model2;import com.imooc.model.HelloWorld;public class SayHello {public String sayHello() {return new HelloWorld().sayHello();}}
这时就需要考虑mvn-test01与mvn-test02是两个不同的项目,如果直接运行mvn compile,编译会报找不到类的错误,那么如何在mvn-test02中调用mvn-test01中的方法呢?首先要在mvn-test01目录下运行mvn install命令将mvn-test01工程打包成jar包并安装到本地仓库中,然后在mvn-test02项目中的pom文件里将mvn-test01引入,pom文件如下:
<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.imooc.test2</groupId>  <artifactId>mvn-test02</artifactId>  <version>0.0.1SNAPSHOT</version>  <dependencies>      <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>4.10</version>    </dependency>      <dependency>      <groupId>com.imooc</groupId>      <artifactId>mvn-test01</artifactId>      <version>0.0.1SNAPSHOT</version>    </dependency>  </dependencies></project>
这时再编译mvn-test02项目就不再报错了。

(二)、archetype插件

从上面的建立项目目录的过程可以看出,如果不依靠IDE,纯手工建立一个Maven项目目录是很复杂的,因为要建立很多的文件夹,一不小心就乱了,这时可以尝试使用archetype插件来帮忙生成一个符合Maven规定的目录结构。
1、使用mvn archetype:generate命令来生成目录,在终端输入mvn archetype:generate命令后,终端会提示让用户输入项目的groupId、artifactId、version、package等信息,当输入完成后,相应的目录会自动生成。
2、使用mvn archetype:generate -DgroupId=组织名,通常是公司网址的反写+项目名 -DartifactId=项目名-模块名 -Dversion=版本号 -Dpackage=代码存在的包,这样可以一次性生成相应的目录结构不需要在终端提示下输入。
0 0
原创粉丝点击