返回介绍

2.5 Maven

发布于 2024-09-08 18:29:25 字数 6075 浏览 0 评论 0 收藏 0

2.5.1 maven 简述

Maven 是一个强大的 Java 项目管理工具,它 包含了一个项目对象模型 POM (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase) 中插件(plugin) 目标(goal) 的逻辑。当你使用 Maven 的时候,你用一个明确定 义的项目对象模型来描述你的项目,然后 Maven 可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
​ Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。
maven 有以下功能:

  • 构建:比如生成 class、jar、war 或者 ear 文件
  • 生成文档:比如生成 javadoc、网站文档
  • 生成报告:比如 junit 测试报告
  • 生成依赖类库:生成文档,说明项目多其他软件的依赖
  • 有关 SCM:SCM(Software Configuration Management),软件配置管理,比如版本控制,比如 bug 管理等等
  • 发布:生成供发布的分发包,比如生成 Struts2 的分发包,供提交给用户使用
  • 部署:比如,web 应用程序,自动部署到指定的服务器上

2.5.2 pom.xml 配置

Maven 的中心思想是 POM 文件(项目对象模型)。

  • POM 文件是以 XML 文件的形式表述项目的资源,如源码、测试代码、依赖(用到的外部 Jar 包)等。
  • POM 文件应该位于项目的根目录下。
  • 所有的 Maven pom 文件都继承自一个父 pom。如果没有指定父 pom,则该 pom 文件继承自根 pom。
    下图说明了 Maven 是如何使用 POM 文件的,以及 POM 文件的主要组成部分:
    1574528774760
    图表 2 maven 过程

如下为一个最小化的 POM 文件示例:

<?xml version="1.0" encoding="utf-8"?>
<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>com.jenkov</groupId>
  <artifactId>Java-web-crawler</artifactId>
  <version>1.0.0</version>
  <dependencies>
    <dependency>
   <groupId>org.hamcrest</groupId>
   <artifactId>hamcrest-all</artifactId>
   <scope>test</scope>
    </dependency>  <dependency/>
  </dependencies>
  <build>
    <pluginManagement>
   <plugins>
     <plugin/>
   </plugins>
    </pluginManagement>
  </build>
</project>

说明:

  • modelVersion 属性表示使用的 POM 模型的版本。
  • groupId 属性是一个组织或者项目(比如开源项目)的唯一 ID。大多数情况下,你会使用项目的 java 包的根名称作为 group ID。
  • artifactId 属性包含你正在构建的项目的名称。
  • versionId 包含项目的版本号。
  • 其它标签:build pluginManagement plugins plugin dependencies dependency 等等
    上文中的 groupId,artifactId 和 version 属性,在项目构建后会生成一个 jar 文件,位于 Maven 仓库的如下路径中(目录和文件名):
    MAVEN_REPO/groupId/groupId/groupId/artifactId/version/version/version/artifactId-$version.jar
    即:
    MAVEN_REPO/com/jenkov/Java-web-crawler/1.0.0/Java-web-crawler-1.0.0.jar
    如果你的项目使用[ Maven 目录结构 ],而且项目没有外部依赖,上面的最简化 POM 文件就是你构建项目所需的所有配置了。

2.5.3 maven 项目结构和命令

表格 23 maven 项目标准目录布局

目录文件简介
src/main/JavaApplication/Library sources
src/main/resourcesApplication/Library resources
src/main/resources-filteredApplication/Library resources which are filtered. (Starting with Maven 3.4.0, not yet released.)
src/main/filtersResource filter files
src/main/webappWeb application sources
src/test/JavaTest sources
src/test/resourcesTest resources
src/test/resources-filteredTest resources which are filtered by default. (Starting with Maven 3.4.0, not yet released.)
src/test/filtersTest resource filter files
src/itIntegration Tests (primarily for plugins)
src/assemblyAssembly descriptors
src/siteSite
pom.xmlmaven 项目的配置文件
LICENSE.txtProject's license
NOTICE.txtNotices and attributions required by libraries that the project depends on
README.txtProject's readme

Maven 配置文件

配置文件名为 settings.xml,两个配置文件分别为:

  • Maven 安装目录中:$M2_HOME/conf/settings.xml
  • 用户主目录中(Default):${user.home}/.m2/settings.xml
    两个配置文件都是可选的。如果两个文件都存在,则用户目录下的配置会覆盖 Maven 安装目录中的配置。

Maven 命令

# 创建 maven 项目
mvn archetype:generate
# 编译项目,编译测试程序:
mvn compile
mvn test-compile
# 打包发布,打包时跳过测试
mvn package
mvn package -Dmaven.test.skip=ture
# 安装当前工程的输出文件到本地仓
$ mvn install
# 清理(删除 target 目录下编译内容)
mvn clean
mvn clean install
# 生成、清除 Eclipse 项目结构
mvn eclipse:eclipse
mvn eclipse:clean
# 仅打包 Web 页面文件
mvn war:exploded
  • 运行测试:mvn test

  • 生成站点目录: mvn site

  • 生成站点目录并发布:mvn site-deploy

  • 查看实际 pom 信息: mvn help:effective-pom

  • 分析项目的依赖信息:mvn dependency:analyze 或 mvn dependency:tree

  • 查看帮助信息:mvn help:help 或 mvn help:help -Ddetail=true

  • 查看插件的帮助信息:mvn :help,比如:mvn dependency:help 或 mvn ant:help 等等。

    denny@denny-ubuntu:~$ echo $MAVEN_HOME
    denny@denny-ubuntu:~$ mvn -version
    Apache Maven 3.0.5
    Maven home: /usr/share/maven
    Java version: 1.7.0_121, vendor: Oracle Corporation
    Java home: /usr/lib/jvm/Java-7-openjdk-i386/jre
    Default locale: en_US, platform encoding: UTF-8
    OS name: "linux", version: "4.2.0-27-generic", arch: "i386", family: "unix"
    

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文