读书人

Maven札记1-Maven核心概念及代理配置

发布时间: 2012-07-03 13:37:43 作者: rapoo

Maven笔记1-Maven核心概念及代理配置

1. Maven定义

??? Maven是一个项目管理工具,它包含了一个项目对象模型(POM)、一组标准集合、一个项目生命周期、一个依

??? 赖管理系统;以及用来运行定义在生命周期阶段中插件(plugin)的目标(goal)的逻辑;主要服务于基于Java平

??? 台的项目构建、依赖管理和项目信息管。

2. 基于项目定义的模型的特征

2.1? 依赖管理
?????? 由于项目是根据一个包含组标识符,构件标识符和版本号的唯一的坐标定义的。项目间可以使用这些坐标来声明

?????? 依赖。
2.2 远程仓库
?????? 和项目依赖相关的,我们可以使用定义在项目对象模型(POM)中的坐标来创建Maven 构件的仓库。
2.3 全局性构建逻辑重用
?????? 插件被编写成和项目模型对象(POM)一起工作,它们没有被设计成操作某一个已知位置的特定文件。一切都

?????? 被抽象到模型中,插件配置和自定义行为都在模型中进行。
2.4 工具可移植性/集成
????? 像 Eclipse,NetBeans,和 InteliJ 这样的工具现在有共同的地方来找到项目的信息。在 Maven 出现之前,

????? 每个 IDE 都有不同的方法来存储实际上是自定义项目对象模型(POM)的信息。Maven 标准化了这种描述,而

????? 虽 然每个 IDE 仍然继续维护它的自定义项目文件,但这些文件现在可以很容易的由模型生成。
2.5 便于搜索和过滤构件
????? 像 Nexus 这样的工具允许你使用存储在 POM 中的信息对仓库中的内容进行索引和搜索。

3. Maven与Ant的区别

??? Ant(Another Neat Tool,另一个整洁的工具):基于任务和依赖的构建系统,是自定义的程序化构建,是过程式的。

??? ? Ant 没有正式的约定如一个一般项目的目录结构,你必须明确的告诉 Ant 哪里去找源代码,哪里放置输出。随

?????? 着时间的推移,非正式的约定出现了,但是它们还没有在产品中模式化。

??? ? Ant 是程序化的,你必须明确的告诉 Ant 做什么,什么时候做。你必须告诉它去编译,然后复制,然后压缩。
??? ? Ant 没有生命周期,你必须定义目标和目标之间的依赖。你必须手工为每个目标附上一个任务序列。

?

??? Maven: 采用了约定由于配置的(Convention over Configuration)的思想,是声明式的。

??? ? Maven 拥有约定,因为你遵循了约定,它已经知道你的源代码在哪里。它把字节码放到 target/classes ,然

?????? 后在 target 生成一个 JAR 文件。
??? ? Maven 是声明式的。你需要做的只是创建一个 pom.xml 文件然后将源代码放到默认的目录。Maven 会帮你处

?????? 理其它的事情。
??? ? Maven 有一个生命周期,当你运行 mvn install 的时被调用。这条命令告诉 Maven 执行一系列的有序的步骤,??

????? 直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven 运行了许多默认的插件目标,这些目

????? 标完成了像编译和创建一个 JAR 文件这样的工作。

4. Maven核心概念

4.1 Maven的插件和目标(Plugins and Goals)

????? 以上述Quickstart Archetype为例,create为目标;一个Maven插件是一个单个或者多个目标的集合。

?????? 一个目标是一个明确的任务,它可以作为单独的目标运行,或者作为一个大的构建的一部分和其它目标一起运行。

?????? 一个目标是Maven中的一个“工作单元(unit of work)”。目标的例子包括Compiler插件中的compile目标,它

????? 用来编译项目中的所有源文件,或者Surefire插件中的test目标,用来运行单元测试。通过-D传入参数,如

????? packageName参数,不穿该参数,将默认采用groupId作为包名。

4.2 Maven生命周期(Lifecycle)

????? 生命周期是包含在一个项目构建中的一系列有序的阶段。

????? Maven可以支持许多不同的生命周期,但是最常用的生命周期是默认的Maven生命周期,这个生命周期中一开

????? 始的一个阶段是验证项目的基本完整性,最后的一个阶段是把一个项目发布成产品。 插件目标可以附着在生命周

????? 期阶段上。随着Maven沿着生命周期的阶段移动,它会执行附着在特定阶段上的目标。每个阶段可能绑定了零个

????? 或者多个目标。

????? 以运行mvn package命令为例,当Maven经过以package为结尾的默认生命周期的时候,下面的目标按顺序

????? 被执行:

???? (1)resources:resources
????? Resources插件的resources目标绑定到了resources 阶段。这个目标复制src/main/resources下的所有资

????? 源和其它任何配置的资源目录,到输出目录。
???? (2)compiler:compile
????? Compiler插件的compile目标绑定到了compile 阶段。这个目标编译src/main/java下的所有源代码和其他任

????? 何配置的资源目录,到输出目录。
???? (3)resources:testResources
????? Resources插件的testResources目标绑定到了test-resources 阶段。这个目标复制src/test/resources

????? 下的所有资源和其它任何的配置的测试资源目录,到测试输出目录。
???? (4)compiler:testCompile
????? Compiler插件的testCompile目标绑定到了test-compile 阶段。这个目标编译src/test/java下的测试用例和

????? 其它任何的配置的测试资源目录,到测试输出目录。
???? (5)surefire:test
????? Surefire插件的test目标绑定到了test 阶段。这个目标运行所有的测试并且创建那些捕捉详细测试结果的输出

????? 文件。默认情况下,如果有测试失败,这个目标会终止。

???? (6)jar:jar
????? Jar插件的jar目标绑定到了package 阶段。这个目标把输出目录打包成JAR文件。

4.3 Maven坐标(Coordinates)

????? Maven项目坐标:groupId:artifactId:packaging:version:(classifie)

????? classifie为可选的。

????? 项目唯一标识符:groupId:artifactId:version。

4.4 Maven仓库(Repositories))

????? 下载Maven核心插件和依赖的远程仓库地址:http://repo1.maven.org/maven2.

????? Maven仓库存储构件的目录格式是:

????? /<groupId>/<artifactId>/<version>/<artifactId>-<version>.<packaging>

4.5 Maven依赖管理((Dependency Management)

????? Maven支持传递性依赖。

4.6 站点生成和报告(Site Generating and Reporting)

????? 命令:mvn site

5. Maven目录分析

??? bin:包含mvn 运行的脚本;

??? boot: mvn 的类加载器框架;

??? conf: 用与定制mvn的行为,包含settings.xml文件;

??? lib: 包含Maven运行时需要的Java类库。

6. 配置HTTP代理

??? 在settings.xml文件中,配置代理主机:192.168.1.106,端口:8888:

??? <proxy>
????? <id>optional</id>
????? <active>true</active>
????? <protocol>http</protocol>
????? <username>proxyuser</username>
????? <password>proxypass</password>
????? <host>192.168.1.106</host>
????? <port>8888</port>
????? <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
??? </proxy>

??? 其中<active>为True指激活该代理,<nonProxyHosts>指不需要代理的网站。

读书人网 >开源软件

热点推荐