搭建私有仓库

Maven的仓库是用来存放Maven工程依赖的包的(通常为jar和pom,war包也可以依赖,在一些很复杂的项目中才能用到)。仓库分为三种:中央仓库、第三方仓库、本地仓库。

中央仓库

由Maven官方提供,地址:http://repo1.maven.org/,包含了几乎所有开源项目的包,但没有非开源项目的包,如:sun的私有包,Oracle的驱动包等。在使用上也有一些限制:
第一,Maven的官方仓库的服务器在国外,在国内访问非常慢,经常因为网络超时导致无法下载;
第二,Maven管方仓库有使用频率限制,如果大的团队频繁从官方仓库下载包,会导致IP被封,从而所有人都无法使用;
第三,私有包不适合传到Maven官方仓库;
第四,组织对外网访问的限制,有些公司是不允许随便连接外网。

第三方仓库

由第三方公司搭建,如:http://repository.jboss.com/maven2/、http://repository.sonatype.org/content/groups/public/,公用的“第三方仓库”同样存在“中央仓库”的问题,可能没有IP限制;另一种私有的第三方库只在组织内部使用,通常使用nexus搭建,没有中央仓库和第三方公用仓库的限制,可以愉悦的发布私有包,更重要的下载速度快、稳定。
强烈建议每个使用Maven的组织都搭建自己的私有仓库。

本地仓库

本地仓库相当于“中央仓库”或“第三方仓库”在运行Maven的电脑上的一个缓存,当然只缓存了用过的包,默认在${user.home}/.m2目录下,由于“本地仓库”通常比较大,初始化比较慢,第一次使用时最好从其他人的电脑上复制一份,这样可以大大节省初始化的时间。建议在${MAVEN_HOME}/config/setting.xml中重新指定“本地仓库”的目录,防止缓存过大影响电脑的正常运行,这一点在持续集成服务器上尤其重要。

统一的setting配置

团队成员使用统一的setting.xml文件,在setting.xml中设置使用的仓库、禁用官方仓库等全局设置,非常不建议在项目的pom中做指定仓库这样的设置,这样做的原因主要是因为一个公司只应有一个私有仓库,这样即节省资源,也利于项目的重用和管理。

创建的顶级POM

每一个产品都应该有一个顶级的pom模块儿,在此模块儿中对使用的包、插件、发布用的仓库和一些其他项目级的配置进行设置,其他模块儿都是pom的子模块儿。这样的好处是整个产品的所有模块儿使用的包是一样的,能有效的避免各个模块儿单独配置带来的版本冲突问题。

合理的参数列表

运行mvn命令时常用的参数有,-B -e -U -pl -D -P,这些参数是Maven自身的,在命令行、持续集成环境都适用。

-B

使Maven在批处理模式下运行,避免需要人工参与交互而造成挂起,在持续集成等不希望人工参与的环境很有用。

-e

在运行maven出现异常时打印完整的异常栈,对问题的分析很有帮助

-U

强制Maven检查所有快照版(snapshot)依赖的更新,默认情况下Maven每天检查快照版(snapshot)依赖的是否更新,在实际开发中快照版的更新频率远高于这个频率,-U参数能保证每一次运行都是基于最新状态的,在持续集成环境这一点尤其重要。

-D

设置maven运行时的系统变量,和Java的-D参数类似,如:maven.repo.local、maven.test.skip

-P

指定构建使用的环境变量,通常每个项目(尤其是web项目)会在不同的环境下运行,如:开发环境、测试环境、生产环境等,不同的环境的配置是不完全相同的,使用Maven的profiefs可以方便的构建出适合不同运行环境的包,运行时使用的环境变量由-P参数指定。

-pl

在一个项目有多个模块儿,而又不想同时构建所有模块儿时,通过-pl参数指定要构建的模块儿,个人觉得这个参数用的场景不多,在模块儿很多的情况下,更应该从模块儿的上进行拆分,减少模块儿间的依赖。
 
综上所述,建议的Maven构建命令:jar和pom工程:mvn clean install/deploy -B -e -U -P,web工程:mvn clean package -B -e -U -P

读一本Maven的好书

建议使用Maven的同学们抽时间去阅读一下《Maven实战》这本书,是一本很好的Maven书籍,适合所有Maven用户。

【转】使用Maven的一些小建议,希望你能喜欢的更多相关文章

  1. extjs 优化小建议

    1 原文信息 原文标题: Sencha Con 2013: Ext JS Performance tips 原文地址: [http://edspencer.net/2013/07/19/sencha- ...

  2. 有用的JavaScript开发小建议

    这篇文章将向你分享一些不为人知的但很有用的JavaScript小建议,对那些刚涉及使用JavaScript编程语言的初级开发者应该有很大的帮助. 1. 用数组长度截取数组 我们都知道,对象都是通过使用 ...

  3. 在JAVA中记录日志的十个小建议

    JAVA日志管理既是一门科学,又是一门艺术.科学的部分是指了解写日志的工具以及其API,而选择日志的格式,消息的格式,日志记录的内容,哪种消息对应于哪一种日志级别,则完全是基于经验.从过去的实践证明, ...

  4. Python入门小建议

    "java从心"正式更名"KEN DO EVERTHING".Ken(Can) Do Everything,无所不能 Believe youseft then ...

  5. Docker 部署 redis教程,附带部分小建议,防止踩坑

    Docker 部署 redis,附带部分小建议,防止踩坑 跟所有人一样,我们先从docker基本命令开始 一.拉取redis镜像(配图来自菜鸟,其实截图没多大意义,对比看下) # 默认就拉取laste ...

  6. 微信小程序--关于加快小程序开发的几个小建议

    加快小程序开发的几个小建议 1.使用 app.json创建页面 ​ 按照我们平常的开发习惯,创建一个新的页面,一般都会先创建文件夹,再创建对应page的形式,创建完成后,app.json中会自动注册该 ...

  7. redis优化小建议

    1.优化的一些小建议 1.尽量使用短的key 当然在精简的同时,不要为了key的"见名知意".对于value有些也可精简,比如性别使用0.1. 2.每个redis设置合理内存 每个 ...

  8. Maven 配置使用小技巧

    Spark开发中遇到了一些小问题,都是大神随便一个手指头帮我解决的.保持学习,积累吧! 一. 基于Intellij IDEA编辑器 1. 快捷键 注释/去注释   Ctrl+Shift+? 2. re ...

  9. 关于OpenCart的一个小建议

    OpenCart是一套老牌的开源自由B2C电商系统,最近watch了其托管在在github上的项目,发现还是很活跃的,每天都有人反馈bug. 初步的看一下,它是支持在后台管理多个店铺的,而且可以同一个 ...

随机推荐

  1. 【Android开发】Api_Android_Distribute

    原文链接:http://android.eoe.cn/topic/android_sdk {"version": "20120817","pageid ...

  2. x64共享库中的位置无关代码(PIC)

    原作者:Eli Bendersky http://eli.thegreenplace.net/2011/11/11/position-independent-code-pic-in-shared-li ...

  3. 关于第三方cookie的作用域以及针对用户行为的使用

    cookie,很多网站都会用的一个机制,可以保存用户的相关信息,token等等,很多人熟知的应该是第一方cookie,可以针对二级域名进行信息的保存,如果遇到跨域的情况,那么第一方cookie是没有用 ...

  4. golang bufio、ioutil读文件的速度比较(性能测试)和影响因素分析

    前言 golang读取文件的方式主要有4种: 使用File自带的Read方法 使用bufio库的Read方法 使用io/ioutil库的ReadAll() 使用io/ioutil库的ReadFile( ...

  5. Postman调用WebService,包括头验证部分

    Postman调用WebService时,Body中选择Raw,最右端选择XML(txt/xml),然后把某个方法显示在页面的xml拷贝到请求框中即可,如下图: 以下是postman中的设置,

  6. 浅谈hibernate的sessionFactory和session

    一.hibernate是什么? Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hiber ...

  7. hdu 1874 畅通工程续(求最短距离,dijkstra,floyd)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1874 /************************************************* ...

  8. socket.io笔记三之子命名空间的socket连接

    当客户端发送admin命名空间下的连接,如果主连接也监听了connetion事件,主连接的connection事件会先触发执行,然后紧接着触发执行admin命名空间下的connection事件.如果客 ...

  9. nodejs中aes-128-cbc加密和解密

    和java程序进行交互的时候,java那边使用AES 128位填充模式:AES/CBC/PKCS5Padding加密方法,在nodejs中采用对应的aes-128-cbc加密方法就能对应上,因为有使用 ...

  10. std::bind()图解

    参考:http://blog.think-async.com/2010/04/bind-illustrated.html 避免链接失效,就把文中图转过来了,这几张就清楚的说明了bind的用法和原理.