关于maven,做错的十件事
maven管理的java项目越来越多,令人遗憾的是在使用maven的时候,多多少少都会遇到这样那样的问题,于是会有各种各样的解决办法,下面是一个列表,列出了使用maven的误区和解决办法。
1.频繁在所有项目使用mvn install并且随时在更新
这是我见过的最常见的问题,解决了这个问题有许多的好处。在maven的文档中找不到一句对这种情况的描述,不过我坚信一句话:每个artifact在maven仓库中都有一个家。
在你的公司里,应该有一个仓库管理工具。每一个你开发的模块都应该发布到这个仓库上去。你可能会问,应该什么时候发布?答案是,每次在你的构建服务器构建之后,都需要发到仓库。我们通常都使用Hudson来做这件事情,另外还有Continuum和TeamCity也还不错。
现在,当你所有的项目都在仓库里有的时候,你的项目就不再需要不断地mvn install了。如果你修改一个模块,你只需要重建这个模块,其余依赖的模块会由maven自动从仓库中下载。
2.你和你的团队成员依靠复制.m2文件夹来解决项目里的依赖找不到的问题
这看起来很疯狂,不过这件事情经常发生。解决的办法,设置一名仓库管理员。一旦管理好了仓库,就不会再出现大家找u盘复制.m2文件夹的事情了。因为可以加速,你不应该把本地的仓库整个地删除掉,毕竟在本地读取仓库是最快的。
3. 你为了解决依赖找不到一个老版本构件的问题,把最新的pom文件修改了版本弄到了老文件里后安装
考虑到这种情况,有人把一个模块的版本从1.3-SNAPSHOT修改成了1.4-SNAPSHOT。你马上要去度假,所以呢你就不想再更新和安装1.3的版
54chen Twitter memo 2011-03-13
Flashcache一个非常不错的软件(准确的说是一个Linux的模块), 可以动态加载。Flashcache通过在文件系统(VFS)和设备驱动之间新增了一次缓存层,来实现对热门的缓存。#系统架构# #
amoeba系统性能报告 http://goo.gl/fb/WeRBK #
amoeba系统性能报告
关于amoeba,请见http://www.54chen.com/java-ee/amoeba-rose-open-source-big-website-arch.html,他是一个不错的mysql proxy替代工具。
读操作
100个并发,mysql:
load:7-8
Rate: 225 req/s
Rate: 240 req/s
Rate: 216 req/s
Rate: 193 req/s
Rate: 212 req/s
Rate: 210 req/s
Rate: 208 req/s
Rate: 229 req/s
Rate: 215 req/s
Rate: 231 req/s
Rate: 241 req/s
Rate: 210 req/s
Rate: 273 req/s
Rate: 247 req/s
Rate: 212 req/s
amoeba:
load:13-15
Rate: 214 req/s
Rate: 185 req/s
Rate: 174 req/s
Rate: 181 req/s
Rate: 210 req/s
Rate: 194 req/s
Rate: 187 req/s
Rate: 190 req/s
Rate: 189 req/s
Rate: 167 req/s
Rate: 182 req/s
Rate: 182 req/s
Rate: 185 req/s
Rate: 178 req/s
Rate: 184 req/s
Rate: 187 req/s
Rate: 183 req/s
Rate: 196 req/s
Rate: 177 r
54chen Twitter memo 2011-03-06
Amoeba+rose:开源项目搭建大型网站可扩展构架实记 http://goo.gl/fb/CE2Rg #
某公司猎头言:X大目前人才战略,确实是不惜代价挖小米科技的人。无言以对。 #
人人网不登录的时候,首页提示:禁止利用互联网等从事违法活动。这是神马情况? #
touch iconv.tmp && find . -iname "*.java" -exec iconv -f gbk -t utf-8 '{}' -o iconv.tmp \; -exec mv iconv.tmp '{}' \; #linux
Amoeba+rose:开源项目搭建大型网站可扩展构架实记
java是一把双刃剑,可以很重地伤人,亦可很重地自伤。曾在一处见到,淘宝在长期使用java构建web项目后,得出一个结论:积重难返。
实际工作经验得到的结论,积重难返的原因,往往不是java本身的缘故,而是团队成员基础积累参差不齐,许多次的“一不小心”积累成了最终的结果。到了悔之晚矣的时候自然就积重难返了。如何避免java使用自伤,最关键在于,统一团队成员的code入口,框下可能发生的事情,避开不能发生的事情,言归正传,下面开始介绍两个非常不错的java开源项目,搭配两个项目,可以搞定所有的mysql+java项目的任何方向的扩展和自由的开发而不担心积重难返。
项目简介
1) rose框架:
来自人人网王志亮大侠的大作,其优异的性能撑下了SNS网站复杂多变的业务(人人网大量使用),同时开发非常方便,有大量的文档可供参考。
项目地址:
http://code.google.com/p/paoding-rose/
2) Amoeba:
Amoeba(变形虫)项目,专注分布式数据库 proxy 开发。对客户端透明。具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到目标数据库、可并发请求多台数据库合并结果。使用这个项目可以将DB层透明,简单做到分库分表,甚至无限partition。作者陈思儒大侠。
下面有一篇两年前Fenng对作者的采访:
http://www.infoq.com/cn/articles/interview-chensiru-amoeba
项目地址:
http://amoeba.meidusa.com/
构架图
相关配置
1) 配置rose中的
54chen Twitter memo 2011-02-27
执行分布式数据存储上的聚集查询,类似 Hive 和 Pig 的框架提供给了一个概要模型,可以隐式地处理进程。 #
消息灵通人士透露,去年Quara获得了1400万美元投资,目前他们只有9名员工。 #
linkedin也被墙了 #
分布式日志系统scribe使用手记 http://goo.gl/fb/rm6aP #
http://www.qconbeijing.com/speakers.aspx 受到@许世伟 大侠的邀请,收集一下大家想知道什么,我的工作经验:1.分布式存储nosql 2.soa化的架构演进 3.无线互联网的架构差异 4.maven啥的运维相关工具使用介绍。 #
测试一下,还能同步新浪微薄不。 #
54chen Twitter memo 2011-02-20 http://goo.gl/fb/aoPUv #
分布式日志系统scribe使用手记
scribe 是facebook 开源的分布式日志系统 。其使用了thrift传输log,由于使用thrift,所以不论是什么语言的项目都可以实现日志收集,可达到远程或者是本地同步远程的分布式日志收集效果,在其示例配置中,并发量可达到max_msg_per_second=2000000,对普通的应用来说,每秒上百万的访问量可能性很小,因此基本上即使最简单的配置,远程收集所有项目的log也是可靠的,如果压力大的话,可以采取主从的配置,将日志打到本地后由scribe的主从配置来自动同步。下面讲述如何安装和使用scribe。
下载boost、thrift、scribe
boost_1_45_0.tar.gz
thrift-0.5.0.tar.gz
facebook-scribe-2ee14d3.zip
通过yum安装需要的依赖
yum install libevent libevent-devel python-devel
yum install gcc-c++
yum install automake
yum install byacc flex
安装boost
tar -zxvf boost_1_45_0.tar.gz
cd boost_1_45_0
./bootstrap.sh
./bjam install --prefix=/opt/soft/bootstrap
安装thrift-0.5.0
tar zxvf thrift-0.5.0.tar.gz
./configure --with-php-config=/opt/soft/php/bin/php-config -
54chen Twitter memo 2011-02-20
Open Flash Chart搭配JOFC,是展示变化多端的统计日志数据不错的选择。 #
【Facebook 这五条管理技术团队的经验总结】1、招聘很紧急,而且要找牛人 2 流程由实践者确立 3 内部晋升,不找空降的管理人员 4、开发工具代替人力低效劳动 5、技术领导,不要外行指挥内行。 #
facebook使用thrift,百度、人人网使用ICE #
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为 MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计. #
scribe 是facebook 开源的分布式日志系统 。 可以用java 借助log4j 向分布式scribe 写入日志。 #
http://www.54chen.com/java-ee/maven-m2eclipse-not-support-nested-module.html maven nested module 功能的个人意见。 #
闲话maven m2eclipse不再支持nested module的原因 http://goo.gl/fb/3idT6 #
求靠谱的log分析并统计的NB开源项目。 #
中国正式超过日本成全球第二大经济体 http://news.163.com/11/0214/08/6SREU94K0001124J.html 【该评论已关闭】 #
今天和朋友们聚会,呆在大公司的兄弟普遍都发慌,工作没有挑战,这个行业的发展还不足以让普通员工也
闲话maven m2eclipse不再支持nested module的原因
Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. 如果你已经有十次输入同样的Ant targets来编译你的代码、jar或者war、生成javadocs,你一定会自问,是否有一个重复性更少却能同样完成该工作的方法。Maven便提供了这样一种选择,将你的注意力从作业层转移到项目管理层。Maven项目已经能够知道如何构建和捆绑代码,运行测试,生成文档并宿主项目网页.
我严重支持大范围使用maven,但对于内嵌module的支持,我表示怀疑。在使用eclipse进行java开发的时候,要使用maven,m2eclipse插件是必不可少的。之所以在新版本的m2eclipse不再支持nested module的功能了,也许是m2eclipse的人员和我一样有相同的担忧。
1)项目内嵌导致工程脆弱
maven的目标是松耦合项目与项目之间的联系,任何一个项目不用关心所依赖项目的变化和生命周期,关联的项目不用管是不是在你的eclipse workspace中,还是本地的仓库中还是远程的仓库里。但是一旦有了项目的内嵌,这就变成了紧耦合的项目关系,你必须关心子文件夹里的东西,整个项目变得更加脆弱。
2)浪费时间
如果你的项目有无数的内嵌子项目,一旦你修改了其中一个子项目的代码,你不得不全部重新检出、测试、打包,这样的生命周期都必须要花时间来做,不必须的时间浪费在这里了。
3)鼓励独立的项目反对代码重用
通常情况下,maven鼓励大家把具有独立功能的模块独立成单独的项目。如果你的项目有一部分代码需要被别的项目重用,你应该做的事情是把这
54chen Twitter memo 2011-02-13
研究一下maven里引用ant的子项目怎么搞 #
用virtualbox作开发机,团队迈向更高效 #
读好代码,如入芝兰之室,久而不闻其香;读破代码,如过鲍鱼之肆,久而闻其臭. #
从我后台的同步twitter的代码发现,twitter的读写同步越来越慢了。 #
虚拟机作开发,是个不错的选择。 #
http://www.baidu.com/s?wd=%B3%C2 百度真是给面子,这也能把我博客排前头 #
今日开工,米聊的同志们基本到齐,兔年大吉! #
54chen Twitter memo 2011-02-06 http://goo.gl/fb/Wt4nW #
54chen Twitter memo 2011-02-06 http://goo.gl/fb/CImSm #
54chen(陈臻),大负载构架挑战者,不折不扣的blogger,曾经还是业余老湿,梦想把技术变成科学,现在奋斗在无线互联网创业公司。
EX:
人人网分布式研究人员
雅虎、淘宝搜索技术人员
金山抠腚人员
暂居北京,情绪稳定。
曾用代号有:cc0cc、零蛋。
EX:
人人网分布式研究人员
雅虎、淘宝搜索技术人员
金山抠腚人员
暂居北京,情绪稳定。
曾用代号有:cc0cc、零蛋。
SEARCH
Tag
Comments
- wendell: 初学,不知道load的文件怎么来的, ...
- nodexy: 看起来好适合铁道部啊 哈哈 个人...
- robin: 陈兄,我要买小米手机,帮我搞一个...
- 54chen: 您能提供下zip包的名字、configure参数...
- yaodong: nginx/1.0.10 刚刚测试 body_max_count 这个...
- paying: 老兄给我一份好吗?476356282@qq.co...
- 54chen: 感谢测试,已经fixed且push到gi...
- yaodong: 谢谢 辛苦啦, 我会及时关注 如果有...
- 54chen: 结果:1.0.10的参数检查严格了,今天...
- 54chen: 1.0.9下测试通过,今天我试试1.0.10版...






