Maven 项目管理工具 Apache Maven 主要服务于基于 Java 平台的项目构建,依赖管理 和 项目信息管理。 国内知名软件公司阿里巴巴和淘宝开始使用 Maven 管理他们的项目。 第一章 Maven 1.1 何为 Maven 1.1.1 何为构建 编写源代码 --> 编译 --> 运行单元测试 --> 生成文档, 打包, 部署。 maven clean install 1.1.2 Maven 是优秀的构建工具 1.1.3 Maven 不仅仅是构建工具 Java 不仅是一门编程语言,还是一个平台,通过 JRuby 和 Jython, 可以在java平台上编写和运行 Ruby 和 Python 程序。 Maven 不仅是构建工具,还是一个依赖管理工具和项目信息管理工具。他提供了中央仓库,能帮我们自动下载构件(artifact)。 也就是通过一组坐标可以准确定位每一个 artifact, 能找到任何一个 Java 类库 (如 jar 文件)。 约定优于配置 1.2 被误解的 Maven 使用 Maven 最高效的方式永远是命令行。 IntelliJ IDEA Maven 更好的集成 第二章 安装与下载 Maven 2.2.1 安装 : (1), 检查 echo $JAVA_HOME 与 $ java -version (2), http://maven.apache.org/download.html (3), tar -xvzf apache-maven-3.0-bin.tar.gz (4), ln -s apache-maven-3.0 apache-maven (5), export M2_HOME=/home/q/bin/apache-maven export PATH = $PATH:$M2_HOME/bin 将这两句话添加到 ~/.bashrc 这样每次启动一个终端,配置就能自动执行。 使用 : 安装目录分析 - bin, boot, conf, lib, LICENSE.txt, NOTICE.txt, README.txt boot : 里面是类加载器框架 conf : settings.xml 定制 maven 的行为。建议做法 复制该文件到 ~/.m2/目录下 在用户范围内定制maven的行为 lib : 真正的 maven 所在 2.3.2 默认在 ~/.m2 目录下除了 repository 仓库之外没有其他文件了。 但是最佳实践是 : 复制 M2_HOME/conf/settings.xml 到 ~/.m2/settings.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> <!-- 指定了当前 POM 模型的版本 --> <groupId>com.qunar.basicJava</groupId> <!-- com.mycompany.myapp 如 : com.google.guava --> <artifactId>javase</artifactId> <!-- hello-worl 定义了 MAVEN 项目在组中唯一的 ID --> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>basic-java</name> <!-- 一个对用户更为友好的项目名称,不必须 --> </project> ** Maven 的主代码 与 测试代码 ** (1), 主代码 会被 打包到最终的构件中 (如jar) 在工程目录下 : mvn clean compile /home/work/JavaProjects/JavaLearns/BasicJava/src/main/java/com/qunar/basicJava/javase/HelloWorld.java 约定优于配置 mvn clean compile clean:clean resources:resources compiler:compile 默认情况下 maven 构建的所有的输出都在 tarjet 目录中。 resources:resources 为定义项目资源,暂时略过。 compiler:compile 将项目的主代码编译至 target/classes 目录 (2), 测试代码不会被打包 <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> 依赖范围 : 表示该依赖范围只对测试代码有效, 如果不声明依赖范围,默认为 compile,表示该依赖对主代码和测试代码都有效。 </dependency> 典型的单元测试包含三个步骤:(1)准备测试类及数据 (2),执行要测试的行为 (3),检查结果 测试方法标注 @Test 测试代码编写完毕后,可以 mvn clean test, 实际执行的是 : clean:clean, resources:resources, compiler:compile, resources:testResources Maven 执行测试test之前,它会先自动执行项目主资源处理,主代码编译,测试资源处理,测试代码编译等工作。这是maven生命周期的特性。 如遇到错误 : 可能是,Maven核心插件-compiler插件默认只支持编译 Java 1.3 surefire:test surefire 是 maven 负责执行测试的插件,执行后会显示测试报告 3.4 打包和运行 项目进行,编译,测试之后,下一个重要步骤就是打包 package, Hello World 的 POM 中没有指定打包类型,使用默认的打包类型jar. mvn clean package 打包名称为 : artifact-version.jar 如需要自己定制 : finalName 如有需要可以复制这个 jar 文件到其他项目的 classpath 中而使用 HelloWorld 类。但是如何让其他的 Maven 项目直接引用这个 jar 呢? 还需要执行 mav clean install; 这样该 HelloWorld 项目输出的 jar 安装到了 Maven 本地仓库中。 但是 HelloWorld 类是有main的,不会添加到 mainfest 中,为了生成可以执行的 jar,需要 maven-shade-plugin 见《Maven实战》53P 总结 : 学习了 Maven 的编译,测试,打包等知识。 3.5 使用 Archetype 生成项目骨架 Maven3 mvn archetype:generate 未来章节,会讨论 如何开发 Maven Archetype 意思就是自己定制自己的 Archetype 例如 : gid : com.youdao.mvnbook aid : helloworld