使用 Maven 管理 Java 项目

 

使用 Maven 并不是什么新鲜事了。不过,如果不是接触到 Node.js 里的 NPM 和 git ,或许我还真的很少会考虑到项目管理的问题。我想或许是以前真的很少接触过很多依赖关系的项目吧,但是,如果开发基于 Spring 的应用程序,依赖缺失的问题真的是一个十分困扰的问题。建议所有学习 Spring 的人都学习一下 Maven 这个工具。

稍微采纳一段来自百度百科的简介:(有修改,详情请参考 百度百科的 Maven 介绍 )

Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。 Maven这个单词来自于意第绪语,意为知识的积累,最早在 Jakata Turbine 项目中它开始被用来试图简化构建过程。当时有很多项目,它们的Ant build文件仅有细微的差别,而JAR文件都由CVS来维护。于是Maven创始者开始了Maven这个项目,该项目的清晰定义包括,一种很方便的发布项目信息的方式,以及一种在多个项目中共享JAR的方式。

这个项目和 Node.js 中的 npm 以及 ruby 中的 gem 很相似。简单地说,就是一个描述项目以及项目间关系的一个工具。

使用这个工具的两点好处:

  • 不需要手工维护依赖的文件位置。简化项目间依赖的问题。(在初学 Spring 的时候很容易找不到足够的依赖包,而这个文件可以帮助寻找)
  • 在 git 代码仓库中只保存和本项目相关的信息,其他代码可以通过描述由 Maven 自动获取。

在 Eclipse 中并未集成对 Maven 的支持。如果要在 Eclipse 中添加对 Maven 的支持,可以选择安装 Maven 的 Eclipse 的插件(即 m2e 插件,在 Eclipse 帮助菜单下的 Eclipse Marketplace 中可以搜索到)。对于开发基于 Spring 的程序,可以选择使用 STS 或者 MyEclipse 等第三方工具或者插件(这些工具包含了 m2e)。

只需要在新建项目的时候,选择 Maven 工程即可。对于已经建立的工程来说,也可以在项目窗格下右击项目,然后选择 Configure 菜单下的 Convert to Maven Project 即可。

然后, Maven 项目的关键在于使用 pom.xml 来管理项目以及项目依赖。在 pom.xml 中,主要分为几个区域:与当前项目相关的区域、依赖项、Maven 代码库地址、插件信息、编译代码等等。示例如下:

<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId><!-- 项目的组ID --></groupId>
    <artifactId><!-- 项目ID --></artifactId>
    <version><!-- 版本信息 --></version>
    <name><!-- 项目名称 --></name>
    <description><!-- 项目描述 --></description>
    <dependencies>
        <!-- 项目依赖项设置 -->
    </dependencies>

    <repositories>
        <!-- 项目依赖项的代码库,即如何获取依赖 -->
    </repositories>

    <build> <!-- 构建规则 -->
        <sourceDirectory>src</sourceDirectory>
        <resources> <!-- 资源位置 -->
            <resource>
                <directory>src</directory>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </resource>
        </resources>
        <plugins> <!-- 插件 -->
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

对于项目的依赖信息。Eclipse的图形化插件已经提供了相当详细的说明,例如,一个典型的依赖项可以写为:(在 <dependencies> 标签内)

<!-- mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.17</version>
</dependency>

而对于特定的代码库地址,可以在 <repositories> 中定义如下:

<repository>
    <id>EclipseLink</id>
    <url>http://download.eclipse.org/rt/eclipselink/maven.repo</url>
</repository>

至于构建目录以及包含文件,可以参考上述 pom.xml 中 <build> 标签内的内容。

一般来说,要找到 Maven 的依赖地址,可以通过在 Google 中搜索。