Java学习系列文章第六篇:项目开发利器-Maven

什么是Maven

Maven是现在的Java程序员应该都会遇到或使用的一个工具。那Maven具体是什么?到底能干什么?

Maven是一个项目管理工具,用来管理项目的生命周期,如项目中各个项目之间的依赖管理,项目中使用到的jar包依赖管理,还有许多项目构建的插件等。使用Maven最大的好处就是不再需要我们手工维护项目中的各种jar包,及jar包需要依赖的其他jar包,也不再需要我们解决各种jar包之间的冲突,这一切maven帮我们都做好了。

目前Java开发中流行的集成开发工具Idea已经集成了Maven工具,打开Idea的设置选择Maven项,就可以看到自带的Maven的一些信息。我觉得Idea自带的Maven就挺好的,就没有去再安装一个。但是之前不知道Idea自带Maven工具,为此有次出现一个问题,就是因为两个Maven仓库的原因。在公司的电脑上我自己装了一个Maven,自己的电脑上没有装,直接使用Idea自带的Maven。

Maven仓库

使用 Maven 给我们带来的最直接的帮助,就是 jar 包得到了统一管理,那么这些 jar 包存放在哪里呢?它们就在您的 本地仓库 中,位于 C:Users用户名.m2 目录下(当然也可以修改这个默认地址)。

实际上可将本地仓库理解“缓存”,因为项目首先会从本地仓库中获取 jar 包,当无法获取指定 jar 包的时候,本地仓库会从 远程仓库(或 中央仓库) 中下载 jar 包,并放入本地仓库中以备将来使用。这个远程仓库是 Maven 官方提供的,可通过 http://search.maven.org/ 来访问。这样一来,本地仓库会随着项目的积累越来越大。通过下面这张图可以清晰地表达项目、本地仓库、远程仓库之间的关系。

Maven命令

Maven执行命令有两种方式:

  1. Interactive Mode(交互模式)
  2. Batch Mode(批处理模式)

交互模式创建项目

执行下面的命令

mvn archetype:generate

接下来会出现下面的选项:

  • 项目 Archetype Version(原型版本号)是什么?—— 可选择 1.0 版本
  • 项目 groupId(组织名) 是什么?—— 可输入 net.ydstudio
  • 项目 artifactId(构件名)是什么?—— 可输入 maven-demo
  • 项目 version(版本号)是什么?—— 可输入 1.0
  • 项目 package(包名)是什么?—— 可输入 net.ydstudio.demo

使用批处理模式创建项目

mvn archetype:generate -DinteractiveMode=false -DarchetypeArtifactId=maven-archetype-webapp -DgroupId=net.ydstudio -DartifactId=maven-demo -Dversion=1.0

创建项目这事我觉得还是用Idea来做,方便快捷。用命令创建的话,命令有时记得不全,不是很方便。

创建成功之后的项目中一般会有下面的几个目录,如果没有的话就自行创建。

  1. src/main/java,主要代码存放的地方
  2. src/test/java,测试代码存放的地方
  3. src/main/resources,配置、资源文件存放的地方
  4. src/main/webapp,Web应用相关代码存放的地方

还有一个重要的文件: pom.xml;pom.xml称为Project Object Model(项目对象模型),它用于描述整个Maven项目,所以也称为Maven描述文件。pom.xml 才是理解 Maven 的关键点,很有必要看看它到底长什么样。

pom文件

打开生成的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>net.ydstudio</groupId>
   <artifactId>maven-demo</artifactId>
   <version>1.0</version>
   <packaging>war</packaging>

   <name>maven-demo 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>maven-demo</finalName>
   </build>
</project>

我们来解释一下:

  • modelVersion:这个是pom的版本号,现在都是4.0.0的,必须得有,但不需要修改。
  • groupId、artifactId、version:分别表示 Maven 项目的组织名、构件名、版本号,它们三个合起来就是 Maven 坐标,根据这个坐标可以在 Maven 仓库中对应唯一的 Maven 构件。
  • packaging:表示该项目的打包方式,war 表示打包为 war 文件,默认为 jar,表示打包为 jar 文件。
  • name、url:表示该项目的名称与 URL 地址,意义不大,可以省略。
  • dependencies:定义该项目的依赖关系,其中每一个 dependency 对应一个 Maven 项目,可见 Maven 坐标再次出现,还多了一个 scope,表示作用域(下面会描述)。
  • build:表示与构建相关的配置,这里的 finalName 表示最终构建后的名称 maven-demo.war,这里的 finalName 还可以使用另一种方式来定义(下面会描述)。

我们可以在 pom.xml中定义一些列的项目依赖(构件包),每个构件包都会有一个 Scope(作用域),它表示该构件包在什么时候起作用,包括以下五种:

  1. compile:默认作用域,在编译、测试、运行时有效
  2. test:对于测试时有效
  3. runtime:对于测试、运行时有效
  4. provided:对于编译、测试时有效,但在运行时无效
  5. system:与 provided 类似,但依赖于系统资

Maven常见命令

前面我们已经使用了几个 Maven 命令,例如:mvn archetype:generate,mvn tomcat7:run-war 等。其实,可使用两种不同的方式来执行 Maven 命令:

  1. mvn <插件>:<目标> [参数]
  2. mvn <阶段>
    现在我们接触到的都是第一种方式,而第二种方式才是我们日常中使用最频繁的,例如:
  3. mvn clean:清空输出目录(即 target 目录)
  4. mvn compile:编译源代码
  5. mvn package:生成构件包(一般为 jar 包或 war 包)
  6. mvn install:将构件包安装到本地仓库
  7. mvn deploy:将构件包部署到远程仓库

执行 Maven 命令需要注意的是:必须在Maven项目的根目录处执行,也就是当前目录下一定存在一个名为 pom.xml 的文件。

相关文章

此处评论已关闭