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