人体骨骼,Maven那点事儿,步步惊心电视剧

0. 前语

Jason Van Zyl,在 Java 十大风云人物排行榜上或许会看到他。

这兄弟是干嘛的?

他便是 Maven 的创始人,人们都敬称他为“Maven 他爸”。

毋庸置疑,Jason 也是一个秃顶。James Gosling、Rod John人体骨骼,Maven那点事儿,步步惊心电视剧son、Gavin King,你们能够通知我为什么吗?

您从前是否会遇到这些问题:

  • 咱们要开发一个 Java 项目,为了确保编译经过,咱们会处处去寻觅 jar 包。当编译经过了,在运转的时分,却发现ClassNotFoundException,卧槽!还差 jar 包啊?再去找找吧。
  • 每个 Java 项意图目录结构都没有一个一致的标准,装备文件处处都是,单元测验代码究竟应该放在哪里,没有一个威望的标准。
  • 可运用 Ant 做为项目构建东西,它能够主动化地完结编译、测验、打包等使命,的确为咱们省了不少事儿,但编写 Ant 的 XML 脚本绝非是一件轻松的作业。

有了 Maven,以上这一切都不再是问题了。

Jason 便是 Java 开发标准的“救世主”!他给咱们带来了一种全新的项目构建方法,让咱们的开发作业愈加高效。

不只如此,Jason 仍是一名“野心家”,他不只期望每个 Java 开发者都能运用他界说的标准,还要咱们都从他家里去获取 jar 包(他家便是 Maven 中心库房),咱们只需通知他,咱们想要的 jar 包详细在什么方位即可(这个方位便是 Maven 坐标)。

看来 Jason 要做的是两件作业:

  1. 一致开发标准与东西
  2. 一致办理 jar 包

这两件作业他都做到了,并且还做了更多的作业。

工欲善其事,必先利其器。咱们也来玩玩 Maven 这货吧!先得去下载一个。

1. 装置 Maven

Maven 是 Apache 基金会的尖端项目,一般状况下,被 Apache 看中的都不会是烂货。

咱们能够从 http://maven.apache.org/ 下载 Maven 开发包,其实便是一个压缩包,下载结束后,解压一下,装备一下环境变量就能够用了。真是超简略!

假定咱们刚刚下载了一个 apache-maven-3.1.1-bin.zip 文件,现在将其解压到 D:/tool 目录下 。咱们不姜镇宇妨将解压后的目录重命名为 Maven,这样Maven 的根目录便是 D:/tool/maven 了。

有两人体骨骼,Maven那点事儿,步步惊心电视剧个环境变量能够装备:

  • M2_HOME = D:/tool/maven
  • MAVEN_OPTS = -Xms128m -Xmx天然生成快活人现场直播512m

以上 M2_HOME 是必需求装备的,假如想让 Maven 跑得更快点,能够依据自己的状况来设置 MAVEN_OPTS。

现在咱们能够翻开 cmd,输入:

mvn -v

我想您必定会看到一些信息,祝贺您,Maven 装置成功!

在运用 Maven 之前,很有必要了解一下 Maven 究竟是怎样办理 jar 包的,这便是 Maven 库房要干的活了。

2. 了解 Maven 库房

运用 Maven 给咱们带来的最直接的协助,便是 jar 包得到了一致办理,那么这些 jar 包寄存在哪里呢?它们就在您的 本地库房 中,坐落 C:\Users\用户名\.m2 目录下(当然也能够修正这个默许地址)。

实际上可将本地库房了解“缓存”,由于项目首先会从本地库房中获取 jar 包,当无法获取指定 jar 包的时分,本地库房会从 长途库房(或 中心库房) 中下载 jar 包,并放入本地库房中以备将来运用。这个长途库房是 Maven 官方供给的,可经过 http://search.maven.org/ 来访问。这样一来,本地库房会跟着项意图堆集越来越大。经过下面这张图能够明晰地表达项目、本地库房、长途库房之间的联系。

这个结构是否与 Git 的本地库房与长途库房有异曲同工之妙呢?

已然 Maven 装置了,那么本地库房也就有人体骨骼,Maven那点事儿,步步惊心电视剧了,下面咱们就一起来创立一个 Maven 项目吧。

3. 创立 Maven 项目

咱们无妨创立一个 Java Web 项目,只需在 cmd 中输入:

mvn archetype:generate

随后 Maven 将下载 Archetype 插件及其一切的依靠插件,这些插件其实都是 jar 包,它们寄存在您的 Maven 本地库房中。

在 cmd 中,您会看到几百个 Archadn029etype(原型),可将它了解为项目模板,您得从中挑选一个。

咱们的方针是创立 Java Web 项目,所以您能够挑选 maven-archetype-webapp(能够在 cmd 中进行含糊查找),随后 Maven 会与您进行一些对话,Maven 想知道以下信息:

  • 项目 Archetype Version(原型版别号)是什么?—— 可挑选 1.0 版别
  • 项目 groupId(安排名) 是什么?—— 可输入 com.smart
  • 项目 artifactId(构件名)是什么?—— 可输入 smart-demo
  • 项目 version(版别号)是什么?—— 可输入 1.0
  • 项目 package(包名)是什么?—— 可输入 com.smart.demo

以上这种方法称为 Interactive Mode(交互形式)

假如您是一位高效人士,或许觉得这样的交互过于繁琐,那么您也能够测验仅运用一条命名,来完结相同的作业:

mvn archetype:generate -DinteractiveMode=false -DarchetypeArtifactId=maven-a人体骨骼,Maven那点事儿,步步惊心电视剧rchetype-webapp -DgroupId=com.smart -DartifactId=smart-demo -Dversion=1.0

以上这种方法成为 Batch Mode(批处理形式)

当然,还有第三种挑选,运用 IDE 来创立 Maven 项目,您能够运用 Eclipse、NetBeans、IDEA 来创立 Maven 项目,操作过程应该是十分简略的。

您也能够运用 IDEA 直接翻开一个 Maven 项目,只需求 File -> Open -> 挑选 pom.xml,那么新密神仙洞下面您就能够在 IDE感喟的拼音A 中开发 Maven 项目了,贴一张图片吧:

其实这个目录结构还不太齐备,咱们需求手艺增加几个目录上去,终究的目录结构看起来是这样的:

咱们手艺创立了三个目录:

  1. src/main/java
  2. src/test/java
  3. src/test/resources

为什么主动生成的目录不齐备?的确挺无语的,咱们就不要去纠结了。不过有必要略微解释一下这个 Maven 目录标准:

  • main 目录下是项意图首要代码,test 目录下寄存测验相关的代码。
  • 编译输出后的代码会放在target 目录下(该目录与 src 目录在同一级别下,这儿没有显现出来)。
  • java 目录下寄存mc康路 Java 代码,resources 目录下寄存装备文件。
  • webapp 目录下寄存 Web 运用相关代码。
  • pom.xml 是 Maven 项意图装备文件。

其间 pom.xml 称为 Project Object 回族怎么看罗兴亚人Model(项目方针模型),它用于描绘整个 Maven 项目,所以也称为 Maven 描绘文件。

可见 pom.xml 才是了解 Maven 的要害点,很有必要看看它究竟长什么样。民国美厨娘

4. 了解 pom.xml

当 您翻开主动生成的 pom.xml,或许会感觉到可读性不太好,有必要做一下格式化,经过收拾后是这样的:


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">
4.0.0
com.smart
smart-demo
1.0
war
smart-demo Maven Webapp
http://maven.apache.org


junit
junit
3.8.1
test



smart-demo


从上往下扼要阐明一下:

  • modelVersion:这个是 POM 的版别号,现在都是 4.0.0 的,有必要得有,但不需求修正。
  • groupId、artifactId、version:别离表明 Maven 项意图安排名、构件名、版别号,它们三个合起来便是 Maven 坐标,依据这个坐标能够在 Maven 库房中对应仅有的 Maven 构件
  • packaging:表明该项意图打包方法,war 表明打包为 war 文件,默许为 jar,表明兴盛电气江苏有限公司打包为 jar 文件。
  • name、url:表明该项意图称号与 URL 地址,含义不大,能够省掉。
  • dependencies:界说该项意图依靠联系,其间每一个 dependency 对应一个 Maven 项目锦衣佞臣,可见 Maven 坐标再次呈现,还多了一个 scope,表明效果域(下面会描绘)。
  • build:表明与构建相关的装备,这儿的 finalName 表明终究构建后的称号 smart-demo.war,这儿的 finalName 还能够运用另一种方法徐帅春来界说(下面会描绘)。

假如用树形图来表达 pom.xml,那么会愈加明晰:

可见,除了项意图基本信息(Maven 坐标、打包方法等)以外,每个 pom.xml 都应该包含:

  1. Lifecycle(生命周期)
  2. Plugins(插件)
  3. Dependencies(依靠)

Lifecycle 是项目构建的生命周期,它包含 9 个 Phase(阶段)。

咱们知道,Maven 是一个中心加上多个插件的架构,而这些插件供给了一系列十分重要的功用,这些插件会在许多阶段里发挥重要效果。

以上表格中所呈现的插件称号实际上是插件的别号(或称为前缀),比方:compiler 实际上是 org.apache.maven.plugins:maven-compiler-plugin:2.3.2,这个才是 Maven 插件的彻底称号。

每个插件又包含了一些列的 Goal(方针),以 compiler 插件为例,它包含以下方针:

  • compiler:help:用于显现 compiler 插件的运用协助。
  • compiler:compile:用于编译 main 目录下的 Jav阴亲a 代码。
  • compiler:testCompile:用于编译 test 目录下的 Java 代码。

可见,插件方针才是详细干活的人,一个插件包含了一个多个方针,一个阶段可由零个或多个插件来供给支撑。

咱们能够在 pom.xml 中界说一些列的项目依靠(构件包),每个构件包都会有一个 Scope(效果域),它表明该构件包在什么时分起效果,包含以下五种:

  1. compile:默许效果域,在编译、测验、运转时有用
  2. test:关于测验时有用
  3. runtime:关于测验、运转时有用
  4. provided:关于编译、测验时有用,但在运转时无效
  5. system:与 provided 相似,但依靠于系统资源

可用一张矩阵表格来表明:

假如您想开发一个 Smart 运用,可参阅如下 p om.xml:


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">
4.0.0

UTF-8
1.0
人体骨骼,Maven那点事儿,步步惊心电视剧

com.smart
smart-demo
1.0
war



junit
junit
4.11
test



mysql
mysql-connector-java
5.1.25
runtime



javax.servlet
javax.servlet-api
3.0.1
p桦甸青年rovided



java农家长嫂x.servlet
jstl
1.2
runtime



com.smart
smart-framework
${smart.version}






org.apache.maven.plugins
maven-compiler-plugin
2.5.1

1.6
1.6




org.apache.maven.plugins
maven-surefire-plugin
2.15

true




org.apache.maven.plugins
maven-war-plugin
2.4

${project.artifactId}




org.apache.tomcat.maven
tomcat7-maven-plugin
2.2




以上 pom.xml 大致解释一下:

  • 咱们可运用 properties 来界说一些装备特点,例如:project.build.sourceEncoding(项目构建源码编码方法),可设置为 UTF-8,可防止中文乱码。也可界说相关构件包版别号,枝桠和枝丫的差异例如:smart.version,便于日后一致晋级。
  • 主张运用最新版别的 JUnit,经过 Archetype 主动生成的 JUnit 太老了(3.8.1),可改为最新版(4.11)。
  • 由于没必要运用 MySQL 客户端的 API,它仅软软兔奶糖仅在运转时有用,所以咱们将 MySQL 构件包的效果域设置为 runtime。
  • 由于咱们只想在代码中运用 Servlet API,而不想将它所对应的 jar 包放入 WEB-INF 的 lib 目录下,所以咱们可设置 Servlet 构件包的效果域为 provi参加葆婴每月有使命吗ded。
  • 为了确保在 JDK 1.6 运转,咱们可装备 maven-compiler-plugin 插件,设置输入源码为 1.6,编译输出的字节码也为 1.6。人体骨骼,Maven那点事儿,步步惊心电视剧
  • 假如想越过测验,可装备 maven-surefire-plugin 插件,将 skipTests 设置为 true。
  • 假如想装备生成的 war 包为 artifactId,可修正 maven-war-plugin 插件,将 warName 修正为 ${project.artifactId},这样就无需再装备 finalName 了。
  • 假如想经过 Maven 将运用布置到 Tomcat 中,可运用 tomcat7-maven-plugin 插鹰的重生是真的吗件,可运用 mvn tomcat7:run-war 指令来运转 war 包。

5. 运用 Maven 指令

前面咱们现已运用了几个 Maven 指令,例如:mvn archetype:generate,mvn tomcat7:run-war 等。其实,可运用两种不同的方法来履行 Maven 指令:

方法一:mvn <插件>:<方针> [参数]

方法二:mvn <阶段>

现在咱们接触到的都是第一种方法,而第二种方法才是咱们日常中运用最频频的,例如:

  • mvn clean:清空输出目录(即 target 目录)
  • mvn compile:编译源代码
  • mvn package:生成构件包(一般为 jar 包或 war 包)
  • mvn install:将构件包装置到本地库房
  • mvn deploy:将构件包布置到长途库房

履行 Maven 指令需求留意的是:人体骨骼,Maven那点事儿,步步惊心电视剧有必要在 Maven 项意图根目录处履行,也便是当时目录下必定存在窥阴器一个名为 pom.xml 的文件。

6. 跋文

Maven 使 Java 开发愈加标准化与主动化,其实 Maven 那点事远远不止这些,假如您把握了以上这些基础知识,再去学习 Maven 的高档特性,我想必定会是一件十分轻松的作业。

  • 原文:my.oschina.net/huangyong/blog/194583