搭建私有仓库

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. collections集合的总括。

    序言 突然遇到集合的有关面试题,感觉很懵逼,所以特意总结了一下,关于我们常用的 ArrayList.LinkedList.Set等集合的一些区别和用法. 还有,这份微小型总结肯定是从很多博文中摘取精华 ...

  2. 初学FPGA

    刚开始感觉FPGA不过也就是和51,ARM单片机那样写写程序就完事了,现在看来根本不是那么回事.从夏宇闻老师的Verilog HDL,黑金教程开始学起,但是感觉看到黑金时序篇时感觉少点什么,原来是缺少 ...

  3. UVa 10697 - Firemen barracks

    题目:已知三点.求到三点距离同样的点. 分析:计算几何.分三类情况讨论: 1.三点共线,不成立. 2.多点重叠,有多组解. 3.是三角形,输出中点. 说明:注意绝对值小于0.05的按0计算:负数的四舍 ...

  4. yum rpm 命令一运行就卡住 只有kill 掉

    由于rpm的数据库出现异常导至直接卡死,造成这种异常是因为之前不正常的安装或查询. 解决方法: # rm -f /var/lib/rpm/__db.00* #删除rpm数据文件 # rpm --reb ...

  5. kernel dump Analysis

    https://social.msdn.microsoft.com/Forums/vstudio/en-US/0c418482-7edd-4c91-b7f4-6005d550244a/got-the- ...

  6. CAS无锁实现原理以及ABA问题

    CAS(比较与交换,Compare and swap) 是一种有名的无锁算法.无锁编程,即不使用锁的情况下实现多线程之间的变量同步,也就是在没有线程被阻塞的情况下实现变量的同步,所以也叫非阻塞同步(N ...

  7. Unable to load configuration. - [unknown location]

    严重: Exception starting filter StrutsPrepareFilterUnable to load configuration. - [unknown location] ...

  8. 【Python】获取服务器时间

    import http.client import time import os def get_webservertime(host): conn=http.client.HTTPConnectio ...

  9. 有了#ifdef 为什么还需要#if defined

    有了#ifdef 为什么还需要#if  defined ? #include <stdio.h> #define A #define B void test(int a,int b) { ...

  10. Silverlight跨域访问wcf

    添加文件名为“clientaccesspolicy.xml”的文件 内容: <?xml version="1.0" encoding="utf-8"?&g ...