赞
踩
上篇blog介绍了maven最基础的一些核心概念,包括maven项目约定的目录结构、maven核心配置文件——pom.xml文件的解析以及3个基本的maven命令(compile、test、package),本篇blog将继续介绍剩余的maven命令,还会涉及到maven最重要的概念之一——Maven仓库,最后会学习如何通过maven自动构建java项目/javaweb项目以及自动构建可供选择的项目骨架。
本来打算继续学习剩余的maven命令,但有一个最常用的基础命令mvn install,它的作用是将我们的maven项目编译打包并安装到我们的本地Maven仓库,既然这里提到了仓库的概念,那么有必要优先学习一下它,况且它也是Maven中最核心的一个概念。首先看一下官方的介绍:
在Maven中仓库被用于保存和创建各种类型的artifacts(模块)以及依赖。简单来讲,仓库主要就是用于存放我们项目中用到的各种各样的jar包了,我们在pom.xml中声明的所有依赖jar包,其实都是来自本地仓库的引用。在上图中我们可以看到Maven有两种仓库,分别是local(本地)仓库和remote(远程)仓库,我们在使用Maven的过程中,比如运行一些Maven命令可以发现命令行的Downloading字样的信息:
其实就是Maven自动的从远程仓库去下载我们需要的依赖和库到Maven本地仓库。本地仓库的默认路径是~/.m2/repository,如下图所示:
图中就是Maven的本地仓库目录,可以看到许多已经下载好的依赖文件了。Maven本地仓库的默认路径在C盘,但通常我们不喜欢把文件存放在C盘,例如重装系统文件会丢失,或者占用C盘空间会影响操作系统运行速度等等原因,我们更愿意自定义仓库的目录,其实也很简单,找到Maven的全局配置文件(Maven安装目录下的conf/settings)文件,我们找到localRepository元素修改为本地路径即可:
- <!-- localRepository
- | The path to the local repository maven will use to store artifacts.
- |
- | Default: ${user.home}/.m2/repository
- <localRepository>/path/to/local/repo</localRepository>
- -->
- <localRepository>E:\apache-maven-3.3.3\repo</localRepository>
如上图所示我们将本地仓库的路径放在了Maven安装路径的根目录下的repo目录下,再次使用Maven的时候我们可以发现自动下载的依赖包都会保存在我们新指定的本地仓库路径下了:
说完了本地仓库,再回头看看上面黑窗口的那张图,Downloading后面的用红色线条标出的下载地址,那个就是Maven官方的全球远程仓库的地址了,我们可以在浏览器中尝试访问一下,发现会自动跳转到另一个地址:
这里可以看到许多我们认识的库了,比如android中常用的httpclint,还有spring中aop会用到的aopalliance等等。这个Maven中央仓库包含了绝大多数开源构件、源码以及作者信息等等,下面推荐2个主流的提供Maven搜索服务的站点,可用于查询某个具体的库的坐标信息:
对了,这里提到了坐标,这个概念也需要学习一下,虽然很简单但是也是Maven中很重要的概念之一。
Maven的坐标指的就是用来标识某个唯一的构件的规范,一个坐标通常由三部分组成,分别是:
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.1</version>
- </dependency>
Maven中拥有大量的各种各样的构件,所以我们需要拥有这种统一的规范来标识每一个构件的唯一性。
学习了上面这些概念之后,我们就可以继续上一篇blog学习剩余的几个重要的Maven命令了。
首先来看一下clean命令,这个命令很简单,作用就是清理编辑结果,即:删除target文件夹以及内容。
可以看到clean之前target文件夹是存在的,即maven在compile之后为我们生成的用于存放编译结果的目标文件夹,现在我们执行clean命令:
可以看到当我们执行了clean命令之后,显示了Deleting F:/MavenTest02/target,即删除了target文件夹,最后显示了BUILD SUCCESS字样即执行成功。
接下来我们再看一下install命令,同样的进入MavenTest02目录,运行mvn install命令:
可以看到上图中标出的信息,Installing F:/MavenTest02/pom.xml to E:/apache-maven-3.3.3/repo...
不难发现我们的MavenTest02已经成功打包并作为一个普通的构件安装到了我们本地的Maven仓库中。这样当我们在其他的Maven项目如果需要用到MavenTest02中的类时,就可以将它作为普通的依赖导入到pom.xml中即可,例如这样:
- <dependency>
- <groupId>com.wl</groupId>
- <artifactId>MavenHelloDemo</artifactId>
- <version>SNAPSHOT-0.0.1</version>
- </dependency>
mvn install是所有Maven命令中最常用的命令之一。
在这之前我们都是手动的去创建目录文件夹,在实际开发中显然是不可取的,实际开发肯定是通过IDE去创建项目,而IDE也无法自动创建,而是间接的调用了Maven的项目构建命令,那么接下来就学习一下构建命令的提供者——Archetypes插件,首先看一下官网的介绍:
可以在官网的这段简介中看到,使用archetype插件可以创建Maven项目,而且一个archetype会提供许多项目模板(骨架),上图中的代码也给出了archetype插件的使用命令和参数名。通常情况下我们使用mvn archetype:generate命令即可,如官方文档中Introdution to Archetypes中介绍的一样,
下面我们在命令行实际操作一下试试看,切换到F:/MavenTest04(空目录)后,输入mvn archetype:generate,
如果是第一次运行这个命令则会需要一些时间去自动下载jar包,最后我们可以看到Choose a number or apply filter,Maven的Archetype插件为我们提供了多达1393个项目模板可供选择,我们可以输入模板编号来选择,或者输入过滤器进行过滤,过滤器也很简单,比如我们需要创建web项目,那么输入“web+回车”就会筛选出所有web项目骨架了。当然我们如果不知道选择什么,也可以什么也不输入直接敲回车,就会选择默认的模板,其实就是一个普通java项目了。
接下来我们根据提示需要依次输入版本号、groupId、artifactId、version、package并输入“Y”来确认之后,我们就会在指定的目录下成功创建这个默认骨架的Maven项目了:
如上图所示,我们可以看到在F:/MavenTest04目录下成功创建了maven04-model这个项目:
最后我们直接安装并运行一下这个项目,通过mvn install将我们这个项目编译打包并安装到本地仓库,并通过java命令去运行jar包:
可以看到当我们将目录切换到MavenTest04/maven04-model目录下之后并执行mvn install命令,我们的项目正常编译打包并安装到了我们本地的Maven仓库,那么我们这个项目的jar包应该在target的根目录下,我们尝试执行一下:
成功输出了Hello World!没有任何问题,这就是我们的Archetype插件创建的项目了。
我们还可以通过指定参数名的方式去创建指定的某种骨架的项目,在上面的“How do I make my first Maven Project”的截图中我们可以看到官方提供的几个参数,分别是-DarchetypeGroupId、-DgroupId、-DartifactId。比如依旧创建上面的那个默认项目的话,我们可以直接运行这个命令:
mvn archetype:generate -DgroupId=com.wl.maven04 -DartifactId=maven04-model -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
如上图所示,可以看到有web project的骨架,simple maven project的骨架等等,我们根据需要自行选择即可,再补充一个很常用的骨架:maven-archetype-webapp,我们在创建web项目的时候更多的应该会选择这个骨架。下面我们就用这个骨架创建一个web项目并在浏览器Hello World!首先创建一个新的目录MavenWebTest,在命令行中切换到该目录并输入命令:
可以看到我们输入了命令并指定参数之后,成功在我们的F:/MavenWebTest目录下创建了mavenweb-model这个web项目,创建完成后我们把这个项目导入到MyEclipse中看一下目录结构(注意MyEclipse的话需要通过maven插件提供的导入来导入maven项目,具体下篇blog会介绍):
可以发现src/main下多了一个webapp目录,而这个目录其实就和我们普通web项目的webroot或webcontent是一样的了,我们的web相关文件(js、jsp、css)等都应该放在这个目录下了,下面再看一下这个自动生成的maven web项目的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.wl.mavenwebtest</groupId>
- <artifactId>mavenweb-model</artifactId>
- <packaging>war</packaging>
- <version>1.0-SNAPSHOT</version>
- <name>mavenweb-model Maven Webapp</name>
- <url>http://maven.apache.org</url>
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.1</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
- <build>
- <finalName>mavenweb-model</finalName>
- </build>
- </project>
如上图所示,确实如此。我们把这个war包拷贝到tomcat的webapps目录并启动tomcat:
访问一下看看:
没问题,成功显示了Hello World!
本篇blog介绍了仓库的概念、clean和install命令以及maven用于自动构建项目的archetype插件,到目前为止我们都没有使用IDE进行开发,而在实际开发环境中我们一般也不会通过命令行去创建项目,所以下篇blog会陆续学习如何将maven集成到我们的Eclipse和MyEclipse中去,需要什么样的插件,需要如何配置等等,学完下一篇blog才算真正进入maven学习的门槛,继续加油~Raito!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。