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>指不需要代理的网站。