美文网首页
工具库之《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》

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