坚信科学,分享技术

>>>尝试更加利于阅读的2014版科学院,以后都在新版上写。

Tag Archives: maven

maven库nexus拖不到jar包小记

使用maven,nexus是个不错的选择。 最常见的问题: 1.SNAPSHOT拿不到最新的包。 2.明明在maven central库里搜索到的包,却提示Missing。 3.plugin提示Missing。 1.SNAPSHOT拿不到最新的包。 这个问题往往得nexus+hudson造成的。因为daily build导致与日俱增的jar包堆积在一个文件夹下,文件数目过多,导致在取最新的包时超时了。 解决办法: 浏览器打开nexus, login->scheduled tasks->add,添加一个定时清理目录的计划任务即可。最后一个选项“remove if released”需要慎重,平时开发可能不是特别正规的时候可能会snapshot和release都需要。 2.明明在maven central库里搜索到的包,却提示Missing。 网上大多数说法都是index失败了,个人经验实际不然(当然不排除你的问题就是index失败)。 当nexus.log里没有任何异常时,请注意以下内容: 在central搜索时,如果只有pom没有jar,那说明这个依赖的项目可能有多个依赖,一定要加上pom,默认是jar。 3.plugin提示Missing。 通常原因是:nexus设置的搜索顺序有问题。 login->Public Repositories -> configuration 左边的是正在使用的定义好的仓库组,右边是可以使用的,正确的顺序应该是先在Release找,然后Snapshots,然后3rd party,最后才去外网下(这时nexus才拖下来新的jar/pom)。

Continue reading

Posted in java | Tagged , | 2 Comments

maven插件编写实例

概况 实现一个自定义的类,必须要继承自 org.apache.maven.plugin.AbstractMojo,同时实现execute方法。 maven使用了在注释中写代码,BT的写法,所以注释里的@goal @parameter都是有含义的。 实例 mvn hello:gogo   这样的一个命令,到代码里,应该是如下过程 进入 hello被叫做plugin的prefix,maven会去寻找以hello开头的插件。 在插件的pom里必须定义其名字为hello开头的,例如: <artifactId>hello-maven-plugin</artifactId>   goal目标 hello后面的gogo叫做goal,目标,则以注释中写代码的方式来完成: /**  *@goal gogo  **/   HelloMojo extends AbstractMojo   需要的依赖 <dependency>    <groupId>org.apache.maven</groupId>    <artifactId>maven-plugin-api</artifactId>    <version>3.0.3</vers

Continue reading

Posted in java | Tagged | Leave a comment

maven打jar包自动生成run脚本-appassembler插件的使用

关键配置: <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>appassembler-maven-plugin</artifactId> <version>1.1.1</version> <configuration> <programs> <program> <mainClass>com.chen.logtailer.Tail</mainClass> <name>app</name> </program> </programs> </configuration> </plugin> #mvn package appassembler:assemble #sh target/appassembler/bin/app 优点: 不需要管理各种run的脚本,自动生成。

Continue reading

Posted in java | Tagged , | 2 Comments

关于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的版

Continue reading

Posted in java | Tagged , | 6 Comments

闲话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鼓励大家把具有独立功能的模块独立成单独的项目。如果你的项目有一部分代码需要被别的项目重用,你应该做的事情是把这

Continue reading

Posted in java | Tagged , , | 4 Comments

试用新型JAVA构建工具Gradle

54chen在研究一个开源项目的时候,发现其使用的构建工具很特殊,叫Gradle,和ant maven类似,他提供的东西更加有感觉,不过冒似版本还不高,最新的0.9也只是一个预览版本。 名词解释 ant 当一个代码项目大了以后,每次重新编译,打包,测试等都会变得非常复杂而且重复,因此c语言中有make脚本来帮助这些工作的批量完成。在Java 中应用是平台无关性的,当然不会用平台相关的make脚本来完成这些批处理任务了,ANT本身就是这样一个流程脚本引擎,用于自动化调用程序完成项目的编译,打包,测试等。除了基于JAVA是平台无关的外,脚本的格式是基于XML的,比make脚本来说还要好维护一些。 maven Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. 如果你已经有十次输入同样的Ant targets来编译你的代码、jar或者war、生成javadocs,你一定会自问,是否有有一个重复性更少却能同样完成该工作的方法。Maven便提供了这样一种选择,将你的注意力从作业层转移到项目管理层。Maven项目已经能够知道如何构建和捆绑代码,运行测试,生成文档并宿主项目网页. 项目的主页地址为:http://maven.apache.org/ Gradle Gradle是一个基于Groovy的build工具——“Ease - Freedom - Power for your build Gradle试图使用Groovy语法来提供Ant的灵活性;它支持多项目的创建,为Ivy提供了一个layer,提供了build-by-conve

Continue reading

Posted in java | Tagged , , , | 10 Comments

ubuntu 9.10安装配置eclipse、subclipse、m2eclipse(svn插件和maven插件)

ntfs硬盘安装ubuntu 9.10方案见: x200 ntfs硬盘安装ubuntu9.10正式版手记 eclispe 3.51安装: sudo apt-get install eclipse 整完会在应用程序中多出来一项“编程”。 此时的eclipse是以自带的jre来运行的,后面的maven插件会要求eclipse在jdk里运行,而不是jre里,所以再安装一下jdk: sudo apt-get install sun-java6-jdk 这样,jdk会安装到/usr/lib/jvm/java-6-sun 然后修改eclipse.ini sudo vim /usr/lib/eclipse/eclipse.ini 在-vmargs上一行加入: -vm /usr/lib/jvm/java-6-sun-1.6.0.15/bin (有回车) 同时选择一下window->preferences->java->installed jres增加对应目录的jre 然后开始 Help->install new software subclipse http://subclipse.tigris.org/update_1.2.x 安装好subclipse。subclipse提供了svn的支持。 然后同样安装m2eclipse插件: m2eclipse比较麻烦,需要依次安装的有: emf http://download.eclipse.org/modeling/emf/updates/releases/ cdt http://download.eclipse.org/t

Continue reading

Posted in java, 生活备份 | Tagged , , | Leave a comment

[五四陈]java项目管理神兵利器maven和nexus使用手记

"尽管 Ant 对于构建 Java 程序而言是事实上的标准工具,但这个工具在许多方面都不胜任项目管理任务。相反,Ant 提供的东西,Maven(出自 Apache Jakarta 项目的高级项目管理工具)都能提供,而且更多。" --转自IBM开发者网络 适用场景 如果你的项目互相有jar包的依赖,WEB-INF/lib下有大量杂乱的jar包,svn里lib目录下时常要更新东西,并且你为此伤透了脑筋,团队战斗力无法提升,那么,你就需要这两样利器了。 主角出场 windows环境居多 http://maven.apache.org/ 项目的主页,有洋文 http://maven.apache.org/download.html 下载的地方 安装的说明-好yy的居然有中文! http://www.sonatype.com/books/maven-book/reference_zh/installation.html 大概意思就是下一个包然后设置环境变量。主要目的就是让你的本地环境能够执行mvn。 跑龙套的出场 linux环境犹佳 http://nexus.sonatype.org/ 项目的主页,有洋文 http://nexus.sonatype.org/downloads/ 下载的地方 安装的说明 http://www.sonatype.com/books/nexus-book/reference/install.html 就是下一个包然后以webserver方式运行下。主要目录是让你的jar包能有个放处。 类似 ./bin/jsw/macosx-universal-32/nexu

Continue reading

Posted in java, 架构研究 | Tagged , , | 2 Comments