美文网首页
工具库之《Maven》

工具库之《Maven》

作者: 八汰 | 来源:发表于2014-11-22 18:02 被阅读1142次

Why Maven

只要还在做Java开发,Maven是绕不过去的一道坎。
尽管官方一再强调它作为一整套项目管理解决方案的定位,但大而全的目标加上复杂的设计,往往让初见Maven的人皱眉,最后也不过是使用其中的一两项功能。
一个东西的设计是否简洁优雅,其实并不由设计者说了算,而在于用户使用它的方式。当Maven没有对它的设计和功能做简化的时候,用户的使用方式投了票。

在我看来,人们离不开Maven,其实是离不开它这两个功能[1] 包管理。[2] 项目打包。

本文的内容分为5部分

  1. 厘清Maven 与 IDE (Eclipse / Intellij) 的关系
  2. 介绍一些背景知识,主要是关于Maven项目的创建和配置文件pom.xml
  3. Maven的包管理功能
  4. Maven的项目打包功能
  5. 附录是关于Maven的安装和配置,便于每次安装后快速配置

我希望通过本文,能

  • 厘清Maven的基本概念
  • 掌握Maven最常用的包管理和打包功能
  • 在安装Maven时能快速的配置好环境

Maven 与 IDE (Eclipse / Intellij) 的关系

Maven是个独立的工具,安装之后可以在命令行界面使用。
IDE 需要安装Maven插件,关联上已经安装的Maven之后,才能在IDE中调用Maven的功能。其中Eclipse的Maven插件为m2eclipse。Intellij则默认自带了Maven插件,直接做相应的关联配置即可。

后面的例子都会以命令行环境下的Maven命令作说明,重点在于说明Maven工具的功能。具体的IDE插件,只不过是图形化封装调用了Maven命令而已。

必要的背景知识

使用Maven首先需创建Maven工程。创建只需一条命令
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

  • archetype:generate是Maven众多插件中的一个,这个插件用于创建工程。
  • maven-archetype-quickstart则是说按照这个模版来创建工程。Maven有许多默认的和第三方编写的模版。
  • artifactId参数指明了工程所在目录的名字。
  • groupId参数则指定工程所属的java包。。

比如上述命令执行成功之后,就会在当前目录生成一个my-app目录,其目录结构如Figure 1所示。这个目录结构也是Maven提倡的所谓良好的工程组织结构,源码和测试代码分别在src和test目录下。


Figure 1. Maven工程目录结构

目录下的pom.xml文件是整个工程的配置文件,用Maven做包管理和打包配置都需要修改这个文件。

Maven包管理

当你的工程需要依赖于某个第三方的包时,只需要在pom.xml文件中加入依赖包的配置即可。一般第三方包都会在主页上给出其依赖配置,比如junit的配置如下:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
</dependency>

将其粘贴到pom.xml中的<dependencies>即完成了包依赖。然后在编译运行你的项目时Maven会根据配置自动的帮你下载依赖包。同时你也不必关注依赖包是否还依赖了其他的包,Maven会帮你管理好二级依赖。

增加了junit依赖的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.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>my-app</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>

</project>

Maven打包功能

Maven项目的打包很方便。只需要在项目根目录执行一条命令mvn package即可。
命令背后的原理是,maven将软件生命周期抽象为许多顺序的Phase,其中最常见的阶段顺序罗列如下:(更全的Phase列表见Maven官方文档

  • mvn compile : 编译项目
  • mvn test :运行测试用例
  • mvn package :将编译后的代码打包
  • mvn install :将打好的包加入到本地仓库
  • mvn deploy : 将本地包部署到maven远程仓库供更多人使用。

当运行mvn package时,Maven会将package阶段前包括package在内的Phase顺序执行一次。打好的包默认情况下放在target目录之下。
使用java命令即可运行
java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App
参数cp用于指定main函数所在的类路径,在本例中是main函数所在类为com.mycompany.app.App。

需要注意,默认情况下mvn package打包时并不会包含依赖的第三方包。假设需要将整个项目连同它的依赖打成一个包,从而可以方便的在任何Java环境下运行,可以使用Shade插件。
具体的使用方法将如下配置加入pom.xml,再次执行mvn package即在target目录下得到包含了所有依赖的包。

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.3</version>
        <configuration>
          <!-- put your configurations here -->
        </configuration>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  ...
</project>

附录:Maven的安装和配置

Maven只是一个工具包,下载之后将解压后的目录放到你喜欢的地方,然后做如下操作便可以运行 (Unix系统适用,Windows用户见官网文档):

  1. 确保安装了JDK并设置了环境变量JAVA_HOME,比如
    export JAVA_HOME=/usr/java/jdk1.7.0_51
    Mac OS X则用户则可以这样
    export JAVA_HOME=$(/usr/libexec/java_home
  2. 确保JAVA_HOME/bin目录在你的PATH环境变量中
    export PATH=$JAVA_HOME/bin:$PATH
  3. 设置Maven相关环境变量 (假设Maven解压在/usr/local/apache-maven/apache-maven-3.2.3)
export M2_HOME=/usr/local/apache-maven/apache-maven-3.2.3
export M2=$M2_HOME/bin
export PATH=$M2:$PATH
  1. 运行mvn -version成功即表示安装OK。

相关文章

  • 工具库之《Maven》

    Why Maven 只要还在做Java开发,Maven是绕不过去的一道坎。尽管官方一再强调它作为一整套项目管理解决...

  • Java图片处理工具类库

    Java图片处理工具类库 maven java

  • 第一章

    开发环境 构建工具:Apache Maven 集成开发工具:IntelliJ IDEA 数据库:MySQL、Red...

  • 常用的第三方库

    maven--开源项目管理工具 Butternife EventBus EventBus库 EventBus技术文...

  • Maven 常用命令

    Maven常用库&依赖 Maven库:http://repo2.maven.org/maven2/Maven依赖查...

  • Web学习笔记 - 第012天

    自动构建工具 Ant + Ivy / Maven / Gradle 数据库连接池 server.xml配置 数据库配置类

  • OA系统开发Java(IDEA版)

    一、环境配置 1.依赖配置 2.数据库配置 3.创建数据库连接工具类 4.创建Druid工具类 5. Maven项...

  • Maven - pom.xml 文件

    章节 Maven – 简介 Maven – 工作原理 Maven – Repository(存储库) Maven ...

  • Maven - 简介

    章节 Maven – 简介 Maven – 工作原理 Maven – Repository(存储库) Maven ...

  • Maven - 工作原理

    章节 Maven – 简介 Maven – 工作原理 Maven – Repository(存储库) Maven ...

网友评论

      本文标题:工具库之《Maven》

      本文链接:https://www.haomeiwen.com/subject/ubfwtttx.html