<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>五四陈科学院-坚信科学，分享技术 &#187; maven</title>
	<atom:link href="http://www.54chen.com/tag/maven/feed" rel="self" type="application/rss+xml" />
	<link>http://www.54chen.com</link>
	<description>PHP、JAVA、缓存、架构、经验、分享</description>
	<lastBuildDate>Fri, 10 Feb 2012 12:21:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>maven库nexus拖不到jar包小记</title>
		<link>http://www.54chen.com/_linux_/maven-nexus-jar-note.html</link>
		<comments>http://www.54chen.com/_linux_/maven-nexus-jar-note.html#comments</comments>
		<pubDate>Mon, 30 Jan 2012 13:41:42 +0000</pubDate>
		<dc:creator>54chen</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[nexus]]></category>

		<guid isPermaLink="false">http://www.54chen.com/_linux_/maven-nexus-jar-note.html</guid>
		<description><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br>使用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）。<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br><p><img src="http://maven.apache.org/images/maventxt_logo_200.gif" alt="maven,nexus" /><br />
使用maven，nexus是个不错的选择。<br />
<strong>最常见的问题：</strong></p>
<blockquote><p>1.SNAPSHOT拿不到最新的包。<br />
2.明明在maven central库里搜索到的包，却提示Missing。<br />
3.plugin提示Missing。
</p></blockquote>
<p><strong>1.SNAPSHOT拿不到最新的包。</strong><br />
这个问题往往得nexus+hudson造成的。因为daily build导致与日俱增的jar包堆积在一个文件夹下，文件数目过多，导致在取最新的包时超时了。<br />
解决办法：<br />
浏览器打开nexus， login->scheduled tasks->add，添加一个定时清理目录的计划任务即可。最后一个选项“remove if released”需要慎重，平时开发可能不是特别正规的时候可能会snapshot和release都需要。</p>
<p><strong>2.明明在maven central库里搜索到的包，却提示Missing。</strong><br />
网上大多数说法都是index失败了，个人经验实际不然(当然不排除你的问题就是index失败)。<br />
当nexus.log里没有任何异常时，请注意以下内容：<br />
在central搜索时，如果只有pom没有jar，那说明这个依赖的项目可能有多个依赖，一定要加上<type>pom</type>，默认是jar。</p>
<p><strong>3.plugin提示Missing。</strong><br />
通常原因是：nexus设置的搜索顺序有问题。<br />
login->Public Repositories -> configuration<br />
左边的是正在使用的定义好的仓库组，右边是可以使用的，正确的顺序应该是先在Release找，然后Snapshots，然后3rd party，最后才去外网下（这时nexus才拖下来新的jar/pom）。</p>
<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></content:encoded>
			<wfw:commentRss>http://www.54chen.com/_linux_/maven-nexus-jar-note.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>maven插件编写实例</title>
		<link>http://www.54chen.com/java-ee/maven-plugin.html</link>
		<comments>http://www.54chen.com/java-ee/maven-plugin.html#comments</comments>
		<pubDate>Wed, 14 Dec 2011 12:33:39 +0000</pubDate>
		<dc:creator>54chen</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://www.54chen.com/java-ee/maven-plugin.html</guid>
		<description><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br>概况 实现一个自定义的类，必须要继承自 org.apache.maven.plugin.AbstractMojo，同时实现execute方法。 maven使用了在注释中写代码，BT的写法，所以注释里的@goal @parameter都是有含义的。 实例 mvn&#160;hello:gogo&#160;&#160; 这样的一个命令，到代码里，应该是如下过程 进入 hello被叫做plugin的prefix，maven会去寻找以hello开头的插件。 在插件的pom里必须定义其名字为hello开头的，例如： &#60;artifactId&#62;hello-maven-plugin&#60;/artifactId&#62;&#160;&#160; goal目标 hello后面的gogo叫做goal，目标，则以注释中写代码的方式来完成： /**&#160; *@goal&#160;gogo&#160; **/&#160;&#160; HelloMojo&#160;extends&#160;AbstractMojo&#160;&#160; 需要的依赖 &#60;dependency&#62;&#160;&#160; &#160;&#60;groupId&#62;org.apache.maven&#60;/groupId&#62;&#160;&#160; &#160;&#60;artifactId&#62;maven-plugin-api&#60;/artifactId&#62;&#160;&#160; &#160;&#60;version&#62;3.0.3&#60;/version&#62;&#160;&#160; &#60;/dependency&#62;&#160;&#160; 必需的选项 &#60;packaging&#62;maven-plugin&#60;/packaging&#62;&#160;&#160; 必需要是maven-plugin才能成功。 参数 如果要传什么参数给插件，应该是 /**&#160; *&#160;if&#160;false&#160;all&#160;compression&#160;is&#160;off&#160;(default&#160;is&#160;true)&#160; *&#160; *&#160;@parameter&#160;expression="${hello.enabled}"&#160;default-value="true"&#160; */&#160;&#160; private&#160;Boolean&#160;enabled=true;&#160;&#160; 使用时项目定义 然后在使用的项目里，需要定义的有 &#60;plugin&#62;&#160;&#160; &#160;&#160;&#160;&#160;&#60;groupId&#62;com.chen&#60;/groupId&#62;&#160;&#160; &#160;&#160;&#160;&#160;&#60;artifactId&#62;demo-maven-plugin&#60;/artifactId&#62;&#160;&#160; &#8230;<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br><p><img src="http://maven.apache.org/images/maventxt_logo_200.gif" alt="apache maven" /></p>
<p><strong>概况</strong><br />
实现一个自定义的类，必须要继承自 org.apache.maven.plugin.AbstractMojo，同时实现execute方法。<br />
maven使用了在注释中写代码，BT的写法，所以注释里的@goal @parameter都是有含义的。</p>
<p><strong>实例</strong></p>
<div class="chen-hl">
<ol class="dp-j" start="1">
<li class="alt"><span><span>mvn&nbsp;hello:gogo&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>这样的一个命令，到代码里，应该是如下过程</p>
<p><strong>进入</strong><br />
hello被叫做plugin的prefix，maven会去寻找以hello开头的插件。<br />
在插件的pom里必须定义其名字为hello开头的，例如：</p>
<div class="chen-hl">
<div class="bar"></div>
<ol class="dp-xml" start="1">
<li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">artifactId</span><span class="tag">&gt;</span><span>hello-maven-plugin</span><span class="tag">&lt;/</span><span class="tag-name">artifactId</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p><strong>goal目标</strong><br />
hello后面的gogo叫做goal，目标，则以注释中写代码的方式来完成：</p>
<div class="chen-hl">
<div class="bar"></div>
<ol class="dp-j" start="1">
<li class="alt"><span><span class="comment">/**</span>&nbsp;</span></li>
<li class=""><span><span class="comment">*@goal&nbsp;gogo</span>&nbsp;</span></li>
<li class="alt"><span><span class="comment">**/</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>HelloMojo&nbsp;<span class="keyword">extends</span><span>&nbsp;AbstractMojo&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p><strong>需要的依赖</strong></p>
<div class="chen-hl">
<div class="bar"></div>
<ol class="dp-xml" start="1">
<li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">dependency</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;<span class="tag">&lt;</span><span class="tag-name">groupId</span><span class="tag">&gt;</span><span>org.apache.maven</span><span class="tag">&lt;/</span><span class="tag-name">groupId</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;<span class="tag">&lt;</span><span class="tag-name">artifactId</span><span class="tag">&gt;</span><span>maven-plugin-api</span><span class="tag">&lt;/</span><span class="tag-name">artifactId</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;<span class="tag">&lt;</span><span class="tag-name">version</span><span class="tag">&gt;</span><span>3.0.3</span><span class="tag">&lt;/</span><span class="tag-name">version</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span><span class="tag">&lt;/</span><span class="tag-name">dependency</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p><strong>必需的选项</strong></p>
<div class="chen-hl">
<div class="bar"></div>
<ol class="dp-xml" start="1">
<li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">packaging</span><span class="tag">&gt;</span><span>maven-plugin</span><span class="tag">&lt;/</span><span class="tag-name">packaging</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>必需要是maven-plugin才能成功。</p>
<p><strong>参数</strong><br />
如果要传什么参数给插件，应该是</p>
<div class="chen-hl">
<div class="bar"></div>
<ol class="dp-j" start="1">
<li class="alt"><span><span class="comment">/**</span>&nbsp;</span></li>
<li class=""><span><span class="comment">*&nbsp;if&nbsp;false&nbsp;all&nbsp;compression&nbsp;is&nbsp;off&nbsp;(default&nbsp;is&nbsp;true)</span>&nbsp;</span></li>
<li class="alt"><span><span class="comment">*</span>&nbsp;</span></li>
<li class=""><span><span class="comment">*&nbsp;@parameter&nbsp;expression="${hello.enabled}"&nbsp;default-value="true"</span>&nbsp;</span></li>
<li class="alt"><span><span class="comment">*/</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span><span class="keyword">private</span><span>&nbsp;Boolean&nbsp;enabled=</span><span class="keyword">true</span><span>;&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p><strong>使用时项目定义</strong><br />
然后在使用的项目里，需要定义的有</p>
<div class="chen-hl">
<div class="bar"></div>
<ol class="dp-xml" start="1">
<li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">plugin</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">groupId</span><span class="tag">&gt;</span><span>com.chen</span><span class="tag">&lt;/</span><span class="tag-name">groupId</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">artifactId</span><span class="tag">&gt;</span><span>demo-maven-plugin</span><span class="tag">&lt;/</span><span class="tag-name">artifactId</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">version</span><span class="tag">&gt;</span><span>1.0</span><span class="tag">&lt;/</span><span class="tag-name">version</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">configuration</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">goalPrefix</span><span class="tag">&gt;</span><span>hello</span><span class="tag">&lt;/</span><span class="tag-name">goalPrefix</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">enabled</span><span class="tag">&gt;</span><span>false</span><span class="tag">&lt;/</span><span class="tag-name">enabled</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">configuration</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span><span class="tag">&lt;/</span><span class="tag-name">plugin</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>然后执行上述命令时自然可以执行HelloMojo的execute方法。</p>
<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></content:encoded>
			<wfw:commentRss>http://www.54chen.com/java-ee/maven-plugin.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>maven打jar包自动生成run脚本-appassembler插件的使用</title>
		<link>http://www.54chen.com/_linux_/maven-jar-auto-run-bash.html</link>
		<comments>http://www.54chen.com/_linux_/maven-jar-auto-run-bash.html#comments</comments>
		<pubDate>Tue, 24 May 2011 07:36:38 +0000</pubDate>
		<dc:creator>54chen</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[appassembler]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://www.54chen.com/_linux_/maven-jar-auto-run-bash.html</guid>
		<description><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br>关键配置： &#60;plugin&#62; &#60;groupId&#62;org.codehaus.mojo&#60;/groupId&#62; &#60;artifactId&#62;appassembler-maven-plugin&#60;/artifactId&#62; &#60;version&#62;1.1.1&#60;/version&#62; &#60;configuration&#62; &#60;programs&#62; &#60;program&#62; &#60;mainClass&#62;com.chen.logtailer.Tail&#60;/mainClass&#62; &#60;name&#62;app&#60;/name&#62; &#60;/program&#62; &#60;/programs&#62; &#60;/configuration&#62; &#60;/plugin&#62; #mvn package appassembler:assemble #sh target/appassembler/bin/app 优点： 不需要管理各种run的脚本，自动生成。<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br><p><img src="http://ww1.sinaimg.cn/bmiddle/569f6ce8jw1dhi9e5bj6wj.jpg" alt="" /></p>
<p>关键配置：</p>
<blockquote><p>&lt;plugin&gt;<br />
&lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;<br />
&lt;artifactId&gt;appassembler-maven-plugin&lt;/artifactId&gt;<br />
&lt;version&gt;1.1.1&lt;/version&gt;<br />
&lt;configuration&gt;<br />
&lt;programs&gt;<br />
&lt;program&gt;<br />
&lt;mainClass&gt;com.chen.logtailer.Tail&lt;/mainClass&gt;<br />
&lt;name&gt;app&lt;/name&gt;<br />
&lt;/program&gt;<br />
&lt;/programs&gt;<br />
&lt;/configuration&gt;<br />
&lt;/plugin&gt;</p></blockquote>
<p>#mvn package appassembler:assemble</p>
<p>#sh target/appassembler/bin/app</p>
<p><strong>优点：</strong><br />
不需要管理各种run的脚本，自动生成。</p>
<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></content:encoded>
			<wfw:commentRss>http://www.54chen.com/_linux_/maven-jar-auto-run-bash.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>关于maven，做错的十件事</title>
		<link>http://www.54chen.com/java-ee/about-maven-10-wrong-things.html</link>
		<comments>http://www.54chen.com/java-ee/about-maven-10-wrong-things.html#comments</comments>
		<pubDate>Tue, 15 Mar 2011 09:10:58 +0000</pubDate>
		<dc:creator>54chen</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://www.54chen.com/java-ee/about-maven-10-wrong-things.html</guid>
		<description><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br>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的版本了，而你的模块正好要依赖1.3版本的那个模块，你如何去弄到老的版本呢？嗯，你可以到处找找，在代码库里找到了这个模块的最新代码，而且版本还是1.3的，你更新了这个版本号并且进行了安装。或者你还可以把你的代码从1.4弄到1.3去，安装并祈祷能够正常工作。 我想上面的解决办法都不是很好，同样，你的公司需要一个代码仓库管理员，如果有一次1.3-SNAPSHOT成功的构建，那就应该在仓库里存在一份，问题解决。 4. 你有许多shell脚本或者是批处理文件，它们通过你的模块的target文件来产生一个zip文件 maven有方法专门做这件事情，叫做“assemblies”。他们不是最容易安装的，但是一旦你安装好了，将与maven完全无缝结合，这要比许多山寨自制的脚本要平滑得多。这些山寨的脚本有许多的问题，比如说版本开始改变，模块被移动等等。 5.你有许多的xml在pom里，目的只是复制文件到发布时的文件夹去，而且它不成很好的工作，也不轻便 这和4正好是对立的，maven看上去不是为了复制文件而构建。如果你想复制你的包（诸如war,ear,zip文件），写一个ant shell bat文件都会很简单完成。 6.你在build的时候总是呆在“checking for updates from xxx-repo”而你不知道什么原因 这是一个很让有些人很气愤的事情，往往花费太多时间去找问题所在。也许这个事情正好可以让你去喝杯咖啡。尽管如此，这个问题的一些通常原因，就是你有一个快照版本的依赖，并且在你的pom文件中有一堆的仓库列表。maven不关心哪个包去哪个仓库里取，所以看上去是从所有的仓库里更新所有的包。 如果你配置了你的maven安装时到指定的仓库里去寻找所有的包（在settings.xml里设置mirror），maven会只到这个仓库里寻找。当这个服务器在本地，将得到加速。用上仓库管理很重要， 7.如果你在release分支上写代码，你的trunk的构建将会失败（或者说是1.0-SNAPSHOT应该对所有人来说都是好用的） 有许多事情你应该记住，当给你的项目创建一个分枝的时候。其中之一是告诉你的构建服务器，并且其他模块需要修改版本为你的pom的声明。如果你忽略随后才做这事，当你想修改了分支里的代码又想在主干里开发时，你会遇到问题。 这里有一个goal在发布插件里，叫做“branch”，靠运行“mvn release:branch”，maven可以为你自动重命名pom文件里的版本号。（免责声明，我还没试过这个命令。。。目前我经常只在创建了一个release的时候才打分支，在“mvn release:perform”后使用“mvn release:prepare”） 8.整个公司内容的依赖都是以-SNAPSHOT结束 快照对开发者来说很舒服，它几乎要完成了，但是迟早，你应该要停下你的脚步，发送你的包给世人，或者是你的同事。一直呆在快照版本有许多的问题。首先它减慢了你的构建速度。因为maven不得不去检查最后的快照是不是在更新了。其次，如果你的项目依赖于一个快照版本，你很难判断是依赖哪个版本的快照。构建可能会失败，只是因为你拿到了一个更新的快照。 如果你依赖一个公司内部的模块，并且这个模块目前是好用的，那么修改所有的依赖为非快照版本后才发布，是一个不错的主意。这样我们才能知道，即使有家伙还在那个模块上疯狂写代码的时候，你的模块依旧可以构建通过，因为它依赖的是一个稳定的发布。 9.跑一下“mvn dependency:analyze”，没有使用和没有使用的依赖列表很长 这个很BT，但不知道准确依赖很危险。最大的问题是maven的传递依赖。 10.当有人发布了你使用的新版本的插件，你的构建就挂了 &#8230;<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br><p><img src="http://img03.taobaocdn.com/imgextra/i3/T13gR3Xa4cXXcFX9c3_050845.jpg" alt="java maven" /></p>
<p>maven管理的java项目越来越多，令人遗憾的是在使用maven的时候，多多少少都会遇到这样那样的问题，于是会有各种各样的解决办法，下面是一个列表，列出了使用maven的误区和解决办法。<br />
<strong>1.频繁在所有项目使用mvn install并且随时在更新</strong><br />
这是我见过的最常见的问题，解决了这个问题有许多的好处。在maven的文档中找不到一句对这种情况的描述，不过我坚信一句话：每个artifact在maven仓库中都有一个家。<br />
在你的公司里，应该有一个仓库管理工具。每一个你开发的模块都应该发布到这个仓库上去。你可能会问，应该什么时候发布？答案是，每次在你的构建服务器构建之后，都需要发到仓库。我们通常都使用<a href="https://hudson.dev.java.net/">Hudson</a>来做这件事情，另外还有<a href="http://continuum.apache.org/">Continuum</a>和<a href="http://www.jetbrains.com/teamcity/">TeamCity</a>也还不错。</p>
<p>现在，当你所有的项目都在仓库里有的时候，你的项目就不再需要不断地mvn install了。如果你修改一个模块，你只需要重建这个模块，其余依赖的模块会由maven自动从仓库中下载。</p>
<p><strong>2.你和你的团队成员依靠复制.m2文件夹来解决项目里的依赖找不到的问题</strong><br />
这看起来很疯狂，不过这件事情经常发生。解决的办法，设置一名仓库管理员。一旦管理好了仓库，就不会再出现大家找u盘复制.m2文件夹的事情了。因为可以加速，你不应该把本地的仓库整个地删除掉，毕竟在本地读取仓库是最快的。</p>
<p><strong>3. 你为了解决依赖找不到一个老版本构件的问题，把最新的pom文件修改了版本弄到了老文件里后安装</strong><br />
考虑到这种情况，有人把一个模块的版本从1.3-SNAPSHOT修改成了1.4-SNAPSHOT。你马上要去度假，所以呢你就不想再更新和安装1.3的版本了，而你的模块正好要依赖1.3版本的那个模块，你如何去弄到老的版本呢？嗯，你可以到处找找，在代码库里找到了这个模块的最新代码，而且版本还是1.3的，你更新了这个版本号并且进行了安装。或者你还可以把你的代码从1.4弄到1.3去，安装并祈祷能够正常工作。</p>
<p>我想上面的解决办法都不是很好，同样，你的公司需要一个代码仓库管理员，如果有一次1.3-SNAPSHOT成功的构建，那就应该在仓库里存在一份，问题解决。</p>
<p><strong>4. 你有许多shell脚本或者是批处理文件，它们通过你的模块的target文件来产生一个zip文件</strong><br />
maven有方法专门做这件事情，叫做“assemblies”。他们不是最容易安装的，但是一旦你安装好了，将与maven完全无缝结合，这要比许多山寨自制的脚本要平滑得多。这些山寨的脚本有许多的问题，比如说版本开始改变，模块被移动等等。</p>
<p><strong>5.你有许多的xml在pom里，目的只是复制文件到发布时的文件夹去，而且它不成很好的工作，也不轻便</strong><br />
这和4正好是对立的，maven看上去不是为了复制文件而构建。如果你想复制你的包（诸如war,ear,zip文件），写一个ant shell bat文件都会很简单完成。</p>
<p><strong>6.你在build的时候总是呆在“checking for updates from xxx-repo”而你不知道什么原因</strong><br />
这是一个很让有些人很气愤的事情，往往花费太多时间去找问题所在。也许这个事情正好可以让你去喝杯咖啡。尽管如此，这个问题的一些通常原因，就是你有一个快照版本的依赖，并且在你的pom文件中有一堆的仓库列表。maven不关心哪个包去哪个仓库里取，所以看上去是从所有的仓库里更新所有的包。<br />
如果你配置了你的maven安装时到指定的仓库里去寻找所有的包（在settings.xml里设置mirror），maven会只到这个仓库里寻找。当这个服务器在本地，将得到加速。用上仓库管理很重要，</p>
<p><strong>7.如果你在release分支上写代码，你的trunk的构建将会失败（或者说是1.0-SNAPSHOT应该对所有人来说都是好用的）</strong><br />
有许多事情你应该记住，当给你的项目创建一个分枝的时候。其中之一是告诉你的构建服务器，并且其他模块需要修改版本为你的pom的声明。如果你忽略随后才做这事，当你想修改了分支里的代码又想在主干里开发时，你会遇到问题。<br />
这里有一个goal在发布插件里，叫做“branch”，靠运行“mvn release:branch”，maven可以为你自动重命名pom文件里的版本号。（免责声明，我还没试过这个命令。。。目前我经常只在创建了一个release的时候才打分支，在“mvn release:perform”后使用“mvn release:prepare”）</p>
<p><strong>8.整个公司内容的依赖都是以-SNAPSHOT结束</strong><br />
快照对开发者来说很舒服，它几乎要完成了，但是迟早，你应该要停下你的脚步，发送你的包给世人，或者是你的同事。一直呆在快照版本有许多的问题。首先它减慢了你的构建速度。因为maven不得不去检查最后的快照是不是在更新了。其次，如果你的项目依赖于一个快照版本，你很难判断是依赖哪个版本的快照。构建可能会失败，只是因为你拿到了一个更新的快照。<br />
如果你依赖一个公司内部的模块，并且这个模块目前是好用的，那么修改所有的依赖为非快照版本后才发布，是一个不错的主意。这样我们才能知道，即使有家伙还在那个模块上疯狂写代码的时候，你的模块依旧可以构建通过，因为它依赖的是一个稳定的发布。</p>
<p><strong>9.跑一下“mvn dependency:analyze”，没有使用和没有使用的依赖列表很长</strong><br />
这个很BT，但不知道准确依赖很危险。最大的问题是maven的传递依赖。</p>
<p><strong>10.当有人发布了你使用的新版本的插件，你的构建就挂了</strong><br />
maven的插件不必写上版本，maven会找到最好的版本。当有新版本的插件的时候，你不必知道就会下载使用最新的。有时候，最好的判断不总是正确。根据经验，越新的越有bug。因此，明码标价写上你使用的插件的版本是有意义的</p>
<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></content:encoded>
			<wfw:commentRss>http://www.54chen.com/java-ee/about-maven-10-wrong-things.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>闲话maven m2eclipse不再支持nested module的原因</title>
		<link>http://www.54chen.com/java-ee/maven-m2eclipse-not-support-nested-module.html</link>
		<comments>http://www.54chen.com/java-ee/maven-m2eclipse-not-support-nested-module.html#comments</comments>
		<pubDate>Mon, 14 Feb 2011 16:02:13 +0000</pubDate>
		<dc:creator>54chen</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[module]]></category>
		<category><![CDATA[nested]]></category>

		<guid isPermaLink="false">http://www.54chen.com/java-ee/maven-m2eclipse-not-support-nested-module.html</guid>
		<description><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br>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鼓励大家把具有独立功能的模块独立成单独的项目。如果你的项目有一部分代码需要被别的项目重用，你应该做的事情是把这部分代码重构出来并成为独立的项目，然后再在两个项目中都添加依赖。这样子做的好处在于，分隔的关系让你的项目之间变得非常清晰。但如果用了maven的项目内嵌模块的功能，东西南北的项目都紧紧地绑在一起，项目将变得越来越难被其他项目再重新调用。 4）ant痛苦的历史 我们都还记得ant脚本时代的一个build的xml：执行缓慢、很难被其他工具使用、很难合并。 5）m2eclipse的nested module为什么要去掉？ 不是去掉了，m2eclipse将子项目嵌套显示变成了扁平的显示。一个多内嵌模块的项目，只需要使用import as maven projects 即可，在workspace中将以扁平的形式显示。 如果你有什么不同的见解，欢迎探讨。<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br><p><img src="http://www.etiri.com.cn/publish/ccw_gif/2006/36/a14_1t1.jpg" alt="maven m2eclipse nested module" /></p>
<p>Maven是基于项目对象模型(POM)，可以通过一小段描述信息来管理项目的构建，报告和文档的软件项目管理工具. 如果你已经有十次输入同样的Ant targets来编译你的代码、jar或者war、生成javadocs，你一定会自问，是否有一个重复性更少却能同样完成该工作的方法。Maven便提供了这样一种选择，将你的注意力从作业层转移到项目管理层。Maven项目已经能够知道如何构建和捆绑代码，运行测试，生成文档并宿主项目网页.<br />
我严重支持大范围使用maven，但对于内嵌module的支持，我表示怀疑。在使用eclipse进行java开发的时候，要使用maven，m2eclipse插件是必不可少的。之所以在新版本的m2eclipse不再支持nested module的功能了，也许是m2eclipse的人员和我一样有相同的担忧。<br />
<strong>1）项目内嵌导致工程脆弱</strong><br />
maven的目标是松耦合项目与项目之间的联系，任何一个项目不用关心所依赖项目的变化和生命周期，关联的项目不用管是不是在你的eclipse workspace中，还是本地的仓库中还是远程的仓库里。但是一旦有了项目的内嵌，这就变成了紧耦合的项目关系，你必须关心子文件夹里的东西，整个项目变得更加脆弱。<br />
<strong>2）浪费时间</strong><br />
如果你的项目有无数的内嵌子项目，一旦你修改了其中一个子项目的代码，你不得不全部重新检出、测试、打包，这样的生命周期都必须要花时间来做，不必须的时间浪费在这里了。<br />
<strong>3）鼓励独立的项目反对代码重用</strong><br />
通常情况下，maven鼓励大家把具有独立功能的模块独立成单独的项目。如果你的项目有一部分代码需要被别的项目重用，你应该做的事情是把这部分代码重构出来并成为独立的项目，然后再在两个项目中都添加依赖。这样子做的好处在于，分隔的关系让你的项目之间变得非常清晰。但如果用了maven的项目内嵌模块的功能，东西南北的项目都紧紧地绑在一起，项目将变得越来越难被其他项目再重新调用。<br />
<strong>4）ant痛苦的历史</strong><br />
我们都还记得ant脚本时代的一个build的xml：执行缓慢、很难被其他工具使用、很难合并。<br />
<strong>5）m2eclipse的nested module为什么要去掉？</strong><br />
不是去掉了，m2eclipse将子项目嵌套显示变成了扁平的显示。一个多内嵌模块的项目，只需要使用import as maven projects 即可，在workspace中将以扁平的形式显示。</p>
<p>如果你有什么不同的见解，欢迎探讨。</p>
<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></content:encoded>
			<wfw:commentRss>http://www.54chen.com/java-ee/maven-m2eclipse-not-support-nested-module.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>试用新型JAVA构建工具Gradle</title>
		<link>http://www.54chen.com/java-ee/try-the-new-build-tools-gradle.html</link>
		<comments>http://www.54chen.com/java-ee/try-the-new-build-tools-gradle.html#comments</comments>
		<pubDate>Thu, 01 Apr 2010 03:16:42 +0000</pubDate>
		<dc:creator>cc0cc</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[ant]]></category>
		<category><![CDATA[gradle]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://www.54chen.com/java-ee/try-the-new-build-tools-gradle.html</guid>
		<description><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br>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-convention集成；而且它还让你获得许多类似Maven的功能比如传递依赖管理和约定大于配置。 Groovy Groovy 是 JVM 的一个替代语言 — 替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程，使用方式基本与使用 Java 代码的方式相同。在编写新应用程序时，Groovy 代码能够与 Java 代码很好地结合，也能用于扩展现有代码。目前的 &#8230;<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br><p>54chen在研究一个开源项目的时候，发现其使用的构建工具很特殊，叫Gradle，和ant maven类似，他提供的东西更加有感觉，不过冒似版本还不高，最新的0.9也只是一个预览版本。</p>
<p><strong>名词解释</strong></p>
<p>ant<br />
当一个代码项目大了以后，每次重新编译，打包，测试等都会变得非常复杂而且重复，因此c语言中有make脚本来帮助这些工作的批量完成。在Java 中应用是平台无关性的，当然不会用平台相关的make脚本来完成这些批处理任务了，ANT本身就是这样一个流程脚本引擎，用于自动化调用程序完成项目的编译，打包，测试等。除了基于JAVA是平台无关的外，脚本的格式是基于XML的，比make脚本来说还要好维护一些。</p>
<p>maven<br />
Maven是基于项目对象模型(POM)，可以通过一小段描述信息来管理项目的构建，报告和文档的软件项目管理工具.<br />
如果你已经有十次输入同样的Ant targets来编译你的代码、jar或者war、生成javadocs，你一定会自问，是否有有一个重复性更少却能同样完成该工作的方法。Maven便提供了这样一种选择，将你的注意力从作业层转移到项目管理层。Maven项目已经能够知道如何构建和捆绑代码，运行测试，生成文档并宿主项目网页.<br />
项目的主页地址为：http://maven.apache.org/</p>
<p>Gradle<br />
Gradle是一个基于Groovy的build工具——“Ease - Freedom - Power for your build<br />
Gradle试图使用Groovy语法来提供Ant的灵活性；它支持多项目的创建，为Ivy提供了一个layer，提供了build-by-convention集成；而且它还让你获得许多类似Maven的功能比如传递依赖管理和约定大于配置。</p>
<p>Groovy<br />
Groovy 是 JVM 的一个替代语言 — 替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程，使用方式基本与使用 Java 代码的方式相同。在编写新应用程序时，Groovy 代码能够与 Java 代码很好地结合，也能用于扩展现有代码。目前的 Groovy 版本是 1.6.3，在 Java 1.4 和 Java 5 平台上都能使用，也能在 Java 6 上使用。</p>
<p><strong>为何使用Gradle</strong><br />
尽管Ant没有内置的依赖管理是个事实，但是将Ivy整合到你build.xml中还是很简单的。Maven有构建脚本，只需要几行代码来配置就可以有许多功能：依赖管理、内置的编译和打包应用的任务、与Jetty的集成、干净的项目web网址，与cobertura的集成、pmd或者findbugs。<br />
Maven和Ant就只是我们的选择么？是否还有比它们更好的选择？在过去的几年中，我们看到很多项目，他们使用的工具不再使用XML来定义构建逻辑，而是真正的编程语言像Groovy、Ruby、Python，它们经常允许依赖管理。这里有几个：GRADLE 、Gant、Kundo、 Raven、 Buildr。</p>
<p><strong>如何使用Gradle</strong><br />
用Groovy语法（相当类似java）写好构建的逻辑。类似下面这个（elasticsearch项目的）：</p>
<blockquote><p>import java.text.SimpleDateFormat</p>
<div><code>defaultTasks "clean", "release"</code></div>
<div><code>usePlugin BasePlugin</code></div>
<div><code>archivesBaseName = 'elasticsearch'</code></div>
<p><code>buildTime = new Date()<br />
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");<br />
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));<br />
buildTimeStr = sdf.format(buildTime)</code></p>
<p>versionNumber = '0.5.1-SNAPSHOT'</p>
<p>explodedDistDir = new File(distsDir, 'exploded')<br />
explodedDistLibDir = new File(explodedDistDir, 'lib')<br />
explodedDistBinDir = new File(explodedDistDir, 'bin')<br />
explodedDistConfigDir = new File(explodedDistDir, 'config')</p>
<p>allprojects {<br />
group = 'org.elasticsearch'<br />
version = versionNumber</p>
<p>plugins.withType(JavaPlugin).whenPluginAdded {<br />
sourceCompatibility = 1.6<br />
targetCompatibility = 1.6<br />
}</p>
<p>repositories {<br />
mavenCentral()<br />
mavenRepo urls: 'http://repository.jboss.com/maven2/'<br />
}<br />
}</p>
<p>configurations {<br />
dists<br />
distLib {<br />
visible = false<br />
}<br />
}</p>
<p>dependencies {<br />
distLib project(':elasticsearch')<br />
}</p>
<p>task explodedDist(dependsOn: [configurations.distLib], description: 'Builds a minimal distribution image') &lt;&lt; {<br />
[explodedDistDir, explodedDistLibDir, explodedDistBinDir, explodedDistConfigDir]*.mkdirs()<br />
// remove old elasticsearch files<br />
ant.delete { fileset(dir: explodedDistLibDir, includes: "$archivesBaseName-*.jar") }</p>
<p>copy {<br />
from configurations.distLib<br />
into explodedDistLibDir<br />
}</p>
<p>copy { from('bin'); into explodedDistBinDir }<br />
copy { from('config'); into explodedDistConfigDir }</p>
<p>copy {<br />
from('.')<br />
into explodedDistDir<br />
include 'LICENSE.txt'<br />
include 'NOTICE.txt'<br />
include 'README.textile'<br />
}</p>
<p>ant.chmod(dir: "$explodedDistDir/bin", perm: "ugo+rx", includes: "**/*")<br />
}</p>
<p>task zip(type: Zip) {<br />
dependsOn explodedDist<br />
// classifier = 'all'<br />
}</p>
<p>zip.doFirst {task -&gt;<br />
zipRootFolder = "$archivesBaseName-${-&gt; version}"<br />
task.configure {<br />
zipFileSet(dir: explodedDistDir, prefix: zipRootFolder) {<br />
exclude 'bin/*'<br />
}<br />
zipFileSet(dir: explodedDistDir, prefix: zipRootFolder, fileMode: '775') {<br />
include 'bin/*'<br />
exclude 'bin/*.*'<br />
}<br />
zipFileSet(dir: explodedDistDir, prefix: zipRootFolder) {<br />
include 'bin/*.*'<br />
}<br />
}<br />
}</p>
<p>task release(dependsOn: [zip]) {<br />
}</p>
<p> <br />
task wrapper(type: Wrapper) {<br />
gradleVersion = '0.8'<br />
jarPath = 'gradle'<br />
}</p></blockquote>
<p>到Gradle下载zip包，解压到任何位置，设置环境变量中的GRADLE_HOME过程此位置，path中增加gradle的bin目录，<a href="http://www.gradle.org">http://www.gradle.org</a> (杯具，需翻)</p>
<p>到项目目录下直接运行 gradle，编译成功有如下提示:<br />
<img src="http://img01.taobaocdn.com/bao/uploaded/i1/T1JtxwXnBeXXc3NVk._111121.jpg" alt="" /></p>
<p>如果直接运行 gradle --gui，还能以gui的模式来选择，非常人性化：<br />
<img src="http://img04.taobaocdn.com/bao/uploaded/i4/T1dI8wXXhqXXX_GaU._111317.jpg" alt="" /></p>
<p>本文作者：<br />
54chen(陈臻)，人人网分布式存储研究人员，业余时间混迹于各技术组织且乐此不疲。目前关注实施PHP培训。对flex等前端技术有一点研究。<br />
个人技术站点:<a href="http://www.54chen.com/"><span style="color: #0b3b8c;">http://www.54chen.com/</span></a> 。可以通过电子邮件 czhttp@gmail.com 联系到他。</p>
<p><strong>本文提到的网址</strong></p>
<p>Gradle: <a href="http://www.gradle.org">http://www.gradle.org</a></p>
<p>国内的评论：<a href="http://news.csdn.net/n/20090313/124106.html">http://news.csdn.net/n/20090313/124106.html</a></p>
<p>国外的一些讨论：<a href="http://stackoverflow.com/questions/1163173/why-use-gradle-instead-of-ant-or-maven">http://stackoverflow.com/questions/1163173/why-use-gradle-instead-of-ant-or-maven</a></p>
<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></content:encoded>
			<wfw:commentRss>http://www.54chen.com/java-ee/try-the-new-build-tools-gradle.html/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>ubuntu 9.10安装配置eclipse、subclipse、m2eclipse(svn插件和maven插件)</title>
		<link>http://www.54chen.com/life/ubuntu-910-installation-to-configure-eclipse-subclipse-m2eclipse-svn-plug-ins-and-maven-plug-ins.html</link>
		<comments>http://www.54chen.com/life/ubuntu-910-installation-to-configure-eclipse-subclipse-m2eclipse-svn-plug-ins-and-maven-plug-ins.html#comments</comments>
		<pubDate>Wed, 18 Nov 2009 11:38:43 +0000</pubDate>
		<dc:creator>cc0cc</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[生活备份]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://www.54chen.com/life/ubuntu-910-installation-to-configure-eclipse-subclipse-m2eclipse-svn-plug-ins-and-maven-plug-ins.html</guid>
		<description><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br>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-&#62;preferences-&#62;java-&#62;installed jres增加对应目录的jre 然后开始 Help-&#62;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/tools/cdt/releases/new &#8230;<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br><p>ntfs硬盘安装ubuntu 9.10方案见：<br />
<a rel="bookmark" href="http://www.54chen.com/830-x200-ntfs-hard-disk-to-install-the-official-version-of-notes-from-ubuntu910/">x200 ntfs硬盘安装ubuntu9.10正式版手记</a><br />
eclispe 3.51安装：</p>
<blockquote><p>sudo apt-get install eclipse</p></blockquote>
<p>整完会在应用程序中多出来一项“编程”。</p>
<p>此时的eclipse是以自带的jre来运行的，后面的maven插件会要求eclipse在jdk里运行，而不是jre里，所以再安装一下jdk:</p>
<blockquote><p>sudo apt-get install sun-java6-jdk</p></blockquote>
<p>这样，jdk会安装到/usr/lib/jvm/java-6-sun</p>
<p>然后修改eclipse.ini</p>
<blockquote><p>sudo vim /usr/lib/eclipse/eclipse.ini</p></blockquote>
<p>在-vmargs上一行加入：</p>
<blockquote><p>-vm<br />
/usr/lib/jvm/java-6-sun-1.6.0.15/bin</p>
<p>(有回车)</p></blockquote>
<p>同时选择一下window-&gt;preferences-&gt;java-&gt;installed jres增加对应目录的jre</p>
<p>然后开始 Help-&gt;install new software</p>
<p>subclipse http://subclipse.tigris.org/update_1.2.x</p>
<p>安装好subclipse。subclipse提供了svn的支持。</p>
<p>然后同样安装m2eclipse插件：</p>
<p>m2eclipse比较麻烦，需要依次安装的有：</p>
<blockquote><p>emf http://download.eclipse.org/modeling/emf/updates/releases/</p>
<p>cdt http://download.eclipse.org/tools/cdt/releases/new</p>
<p>wtp http://download.eclipse.org/webtools/updates</p>
<p>ajdt http://download.eclipse.org/tools/ajdt/34/update</p>
<p>zest or GEF http://download.eclipse.org/tools/gef/updates/releases/</p>
<p>mylyn http://download.eclipse.org/tools/mylyn/update/e3.4</p></blockquote>
<p>最后才是m2eclipse:</p>
<blockquote><p>http://m2eclipse.sonatype.org/update/</p></blockquote>
<p>注意，在安装过程中，有些update的url里有不止一个版本的选项，注意适当选取。</p>
<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></content:encoded>
			<wfw:commentRss>http://www.54chen.com/life/ubuntu-910-installation-to-configure-eclipse-subclipse-m2eclipse-svn-plug-ins-and-maven-plug-ins.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[五四陈]java项目管理神兵利器maven和nexus使用手记</title>
		<link>http://www.54chen.com/java-ee/54-chen-java-magic-weapon-maven-project-management-and-the-nexus.html</link>
		<comments>http://www.54chen.com/java-ee/54-chen-java-magic-weapon-maven-project-management-and-the-nexus.html#comments</comments>
		<pubDate>Tue, 15 Sep 2009 04:39:42 +0000</pubDate>
		<dc:creator>cc0cc</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[架构研究]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[nexus]]></category>

		<guid isPermaLink="false">http://www.54chen.com/java-ee/54-chen-java-magic-weapon-maven-project-management-and-the-nexus.html</guid>
		<description><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br>"尽管 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/nexus start 安装的视频 全屏才能看清楚. 跑龙套的近照 默认密码是 admin/admin123 剧本 主角其实是个客户端工具，所有的功能都集中于一个命令：mvn &#8230;<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br><p>"尽管 Ant 对于构建 Java 程序而言是事实上的标准工具，但这个工具在许多方面都不胜任项目管理任务。相反，Ant 提供的东西，Maven（出自 Apache Jakarta 项目的高级项目管理工具）都能提供，而且更多。" --转自IBM开发者网络</p>
<p><strong>适用场景</strong></p>
<p>如果你的项目互相有jar包的依赖，WEB-INF/lib下有大量杂乱的jar包，svn里lib目录下时常要更新东西，并且你为此伤透了脑筋，团队战斗力无法提升，那么，你就需要这两样利器了。</p>
<p><strong>主角出场 windows环境居多</strong></p>
<p><a href="http://maven.apache.org/">http://maven.apache.org/</a> 项目的主页，有洋文</p>
<p><a href="http://maven.apache.org/download.html">http://maven.apache.org/download.html</a> 下载的地方</p>
<p>安装的说明-好yy的居然有中文！</p>
<p><a href="http://www.sonatype.com/books/maven-book/reference_zh/installation.html">http://www.sonatype.com/books/maven-book/reference_zh/installation.html</a></p>
<p>大概意思就是下一个包然后设置环境变量。主要目的就是让你的本地环境能够执行mvn。</p>
<p><strong>跑龙套的出场 linux环境犹佳</strong></p>
<p><a href="http://nexus.sonatype.org/">http://nexus.sonatype.org/</a> 项目的主页，有洋文</p>
<p><a href="http://nexus.sonatype.org/downloads/">http://nexus.sonatype.org/downloads/</a> 下载的地方</p>
<p>安装的说明</p>
<p><a href="http://www.sonatype.com/books/nexus-book/reference/install.html">http://www.sonatype.com/books/nexus-book/reference/install.html</a></p>
<p>就是下一个包然后以webserver方式运行下。主要目录是让你的jar包能有个放处。</p>
<p>类似 ./bin/jsw/macosx-universal-32/nexus start</p>
<p>安装的视频<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="225" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=1875558&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="400" height="225" src="http://vimeo.com/moogaloop.swf?clip_id=1875558&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>全屏才能看清楚.</p>
<p>跑龙套的近照 默认密码是 admin/admin123</p>
<p><a href="http://www.sonatype.com/books/nexus-book/reference/figs/web/repository-manager_nexus-login.png"><img class="alignnone" src="http://www.sonatype.com/books/nexus-book/reference/figs/web/repository-manager_nexus-login.png" alt="" width="803" height="457" /></a></p>
<p><strong>剧本</strong></p>
<p>主角其实是个客户端工具，所有的功能都集中于一个命令：mvn</p>
<p>例如：运行cmd 进入项目文件夹 mvn package 将项目打包  mvn install 将项目包安装到本地仓库 mvn deploy 向包布到跑龙套那个东东上面。</p>
<p>mvn命令还有很多强大的功能，具体见 <a href="http://www.sonatype.com/books/maven-book/reference_zh/public-book.html">http://www.sonatype.com/books/maven-book/reference_zh/public-book.html</a></p>
<p>跑龙套那个其实才算得上第二主角，它是一个强大的服务器端，它管理着你所有原来在svn里的lib下的所有jar包。并且很重要的一点，它能通过web界面搜索。</p>
<p>这样，只要大家都使用和发布snapshot版本的jar包，不需要再另行通知更新jar包，开发的人搞好直接mvn deploy，使用的人在mvn -U clean package 自然就拖下最新的包，默契不在话下。</p>
<p>这一切，都来源于pom组织的强大定义。【全剧终】</p>
<p><strong>鸣谢</strong></p>
<p>党和人民</p>
<p>老毛子精细的技术活</p>
<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></content:encoded>
			<wfw:commentRss>http://www.54chen.com/java-ee/54-chen-java-magic-weapon-maven-project-management-and-the-nexus.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

