MAVEN使用最佳实践

上传人:woxinch****an2018 文档编号:38980512 上传时间:2018-05-10 格式:DOC 页数:6 大小:301.27KB
返回 下载 相关 举报
MAVEN使用最佳实践_第1页
第1页 / 共6页
MAVEN使用最佳实践_第2页
第2页 / 共6页
MAVEN使用最佳实践_第3页
第3页 / 共6页
MAVEN使用最佳实践_第4页
第4页 / 共6页
MAVEN使用最佳实践_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《MAVEN使用最佳实践》由会员分享,可在线阅读,更多相关《MAVEN使用最佳实践(6页珍藏版)》请在金锄头文库上搜索。

1、MAVEN 使用最佳实践使用最佳实践闫国玉 2009-10-26本文档介绍一些在使用本文档介绍一些在使用 Maven 过程中不是必须的,但十分有用过程中不是必须的,但十分有用的实践。的实践。目录目录1.1设置 MAVEN_OPTS 环境变量.21.2配置用户范围SETTINGS.XML.21.3不要使用 IDE 内嵌的 MAVEN.31.4搭建内部仓库管理器.41.5尽可能的遵循 MAVEN的约定.51.6优先编译被依赖的模块.51.7利用 MAVEN插件创建项目.51.1 设置设置 MAVEN_OPTS 环境变量环境变量当 Maven 项目很大,或者你运行诸如 mvn site 这样的命令的

2、时候,maven 运行需要很大 的内存,在默认配置下,就可能遇到 java 的堆溢出。解决的方法是调整 java 的堆大小的值。 Windows 环境中 找到文件%M2_HOME%binmvn.bat ,这就是启动 Maven 的脚本文件,在该文件中你能看 到有一行注释为:REM set MAVEN_OPTS=-Xdebug -Xnoagent -Dpiler=NONE. 它的意思是你可以设置一些 Maven 参数,我们就在注释下面加入一行: set MAVEN_OPTS= -Xms128m -Xmx512m 之后,当你运行 Maven 命令如 mvn -version 的时候,你会看到如下的

3、输出: E:testmvn -version E:testset MAVEN_OPTS= -Xms128m -Xmx512m Maven version: 2.0.9 Java version: 1.6.0_07 OS name: “windows 2003“ version: “5.2“ arch: “x86“ Family: “windows“ 我们看到,配置的 Maven 选项生效了,OutOfMemoryError 也能得以相应的解决。 Linux 环境中 也可以通过设置环境变量解决该问题, 如,编辑文件 /etc/profile 如下 MAVEN_OPTS=-Xmx512m expo

4、rt JAVA_HOME MAVEN_HOME MAVEN_OPTS JAVA_BIN PATH CLASSPATH 如果你使用 Hudson 用 Hudson + Maven 做持续集成,并不幸也遇到了类似的错误,那么上述两种方式都将不 再起作用了,因为 Hudson 使用自己的 maven-agent 来启动 Maven,不会去调用 Maven 的脚本, 自然相应的配置也就无效了。 好在 Hudson 也给为我们提供了配置点,在 Hudson 的项目配置页面中,有一块 Build 区域, 这里我们已经设置了 Root Pom 和 Goals。注意该区域的右下角有一个“Advanced.“按

5、钮,点击 会看到 MAVEN_OPTS 输入框,这里输入“-Xmx512m“就 OK 了。 m2eclipse 中 类似以上的方法都会失效,所幸 m2eclipse 提供了配置点。步骤如下: 项目上右击 - Run As - Run Configurations - Maven Build 上右击 - New 这时会看到一个 maven 运行配置对话框,这里面其它的配置我不多解释了,为了解决内存溢出 的问题,我们可以选择第二个 TAB: JRE,然后在 VM arguments 中输入配置如:-Xms128m - Xmx512m。1.2 配置用户范围配置用户范围 settings.xmlMav

6、en 用户可以选择配置$M2_HOME/conf/settings.xml 或者/.m2/settings.xml。前者是全局 范围的,整台机器上的所有用户都会直接收到该配置的影响,而后者是用户范围的,只有当前 用户才会收到该配置的影响。 我们推荐使用用户范围的 settings.xml,主要是为了避免无意识地影响到系统中其他用户, 当然,如果你有切实的需求,需要统一系统中所有用户的 settings.xml 配置,则当然应该使用全 局范围的 settings.xml。 除了影响范围这一因素,配置用户范围 settings.xml 文件还能够方便 Maven 的升级。直接 修改 conf 目录

7、下的 settings.xml 会造成 Maven 升级的不便,每次升级到新版本的 Maven,我们 就需要赋值 settings.xml 文件,而如果使用/.m2 目录下的 settings.xml,就不会影响到 Maven 安装文件,升级时就不需要触动 settings.xml 文件。1.3 不要使用不要使用 IDE 内嵌的内嵌的 Maven不论是 Eclipse 还是 NetBeas,当我们集成 Maven 的时候,都会安装上一个内嵌的 Maven, 这个内嵌的 Maven 通常会比较新,但不一定很稳定,当然往往也会和我们在命令行使用的 Maven 不是同一个版本。这里又会出现两个潜在的

8、问题,首先,较新版本的 Maven 存在很多不 稳定因素,容易造成一些难以理解的问题。其次,由于除了 IDE,我们也经常还会使用命令行 的 Maven,如果版本不一致,容易造成构建行为的不一致,这是我们所不希望看到的。因此, 我们应该在 IDE 中配置 Maven 插件使用与命令行一直的 Maven。 在 m2eclipse 环境中,点击菜单栏中的 Windows,然后选择 Perfrences,在弹出的对话框 中,展开左边的 Maven 项,选择 Instanllation 子项,在右边的面板中,我们能够看到有一个默 认的 Embedded Maven 安装被选中了,点击 Add然后选择我们

9、的 Maven 安装目录 M2_HOME,添加完毕之后选择这一个外部的 Maven。如下图:NetBeans Maven 插件默认会侦测 PATH 环境变量,因此会直接使用与命令行一致的 Maven 环境。点击菜单栏中的工具工具,选择选项选项,选择其他其他标签栏,再选择 Maven 子标签栏,你就能看 到如下的配置:1.4 搭建内部仓库管理器搭建内部仓库管理器仓库管理器有两个服务目的:首先它的角色是一个高度可配置的介于你的组织与公开 Maven 仓库之间的代理,其次它为你的组织提供了一个可部署你组织内部生成的构件的地方。 代理 Maven 仓库有很多好处。对于一开始使用 Maven 的情况来说

10、,通过为所有的来自中央 Maven 仓库的构件安装一个本地的缓存,你将加速组织内部的所有构建。如果有开发人员想要 下载 Spring Framework 的 2.5 版本,并且你在使用 Nexus,那些依赖(以及依赖的依赖)只需 要从远程仓库下载一次。如果有一个高速的 Internet 网络连接,这看起来没什么大不了,但是 如果你一直要求你的开发人员去下载几百兆的第三方依赖,那么真正节省的时间将会是 Maven 检查依赖新版本以及下载依赖的时间。通过本地仓库提供 Maven 依赖服务可以节省数百的 HTTP 请求,在大型的多项目构建中,这样可以为一次构件节省几分钟的时间。 除了简单的时间和带宽

11、的节省,仓库管理器为组织提供了一种控制 Maven 下载的机制。你 可以详细的设置从公开仓库包含或排除特定的构件。能够控制从核心 Maven 仓库的下载对于很 多组织来说是经常是一个必要前提,它们需要维护一个组织中使用依赖的严格控制。一个想要 标准化某个如 Hibernate 或者 Spring 依赖版本的组织可以通过在仓库管理器中仅仅提供一个特 殊版本的构件来加强这种标准。还有一些组织可能关心确保所有外部的依赖拥有和组织的法律 规范相容的许可证。如果一个企业生产了一个分发应用程序,它们可能想要确定没有人不小心 添加了一个涉及 GPL 许可证的依赖。仓库管理器为那些需要确信总体架构和政策实施的

12、组织提 供了这一层次的控制。 除了控制对远程仓库的访问以外,仓库管理器也为 Maven 的全面使用提供了一些很至关重 要的东西。除非你希望你组织的每一个成员下载并构建一个单独的内部项目,否则你会希望为 开发人员和部门之间提供一种共享内部项目构件的快照版本和发布版本的机制。Nexus 为你的 组织提供了这样的部署目标。在你安装了 Nexus 之后,你可以开始使用 Maven 让它部署快照版和发布版至一个由 Nexus 管理的定制仓库。1.5 尽可能的遵循尽可能的遵循 Maven 的约定的约定Maven 允许你自定义,但不推荐你这么做。因为一旦你使用这种自定义,习惯 Maven 约定的 人一开始会

13、觉得奇怪。只有一些特殊的情况,这些自定义手段能帮你解决实际的问题,比如你 在处理遗留代码,你没办法改变源码目录结构,这个时候只有让 Maven 妥协。 其实基本上所有的约定,或者说默认配置,都可以在 Maven 的超级 POM(super pom)中找到。 由于所有的 POM 都继承了这个超级 POM(类似于 java 中所有类都继承于 Object) ,因此它的 默认配置就被继承了。以 Maven 2.0.9 为例,你可以在%m2_home%/lib/下看到一个名为 maven- 2.0.9-uber.jar 的文件,打开这个文件,可以找到 org /apache/maven/project

14、/pom-4.0.0.xml 这个文 件,这就是超级 POM。 Maven 提供了一套科学的默认配置,它要求你遵循这些配置约定,然后它就会帮你处理日 常的事务 compile, test, package 等等。使用 Maven 的时候,你应该尽可能遵循它的配置约定, 一方面可以简化配置,另一方面可建立起一种标准,减少交流学习成本。一旦你习惯了这种约 定,你得到的回报是巨大的。1.6 优先编译被依赖的模块优先编译被依赖的模块假设一个项目 C 有两个模块,模块 A 和模块 B,其中模块 A 依赖模块 B。若你直接编译项 目 C,Maven 本应该先编译模块 B,再编译模块 A, ,因为模块 A

15、依赖模块 B。但是不幸的是, Maven 这方面支持的并不是那么完美。所以如果模块 B 有改动,我们应该先编译模块 B,再编 译整个项目 C。希望 Maven 会在未来的版本中改进这个问题。1.7 利用利用 Maven 插件创建项目插件创建项目当我们需要创建一个基于 Maven 的项目时,我们可以有两种选择。一种是遵循 Maven 约定, 自己创建项目需要的所有目录和文件(例如 pom.xml) ,但是这种方式是不被推荐的。因为这种 方式需要手动,而我们往往容易在不经意中犯下错误(例如拼写错误) 。我们可以利用 Maven 的 IDE 插件(例如 m2eclipse)创建一个基于 Maven 的项目,这种方式会自动生成 Maven 项目标准的目录和文件。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号