Maven应该都听说过吧!一个构建工具!与Ant相比,它更粗粒化!不需要编写build.xml文件,来操作项目的编译,运行,打包!只要你创建了一个Maven项目,编译,只需要mvn compile!Maven会自动的帮你完成编译!
关于Maven2的知识请看这里!
http://books.sonatype.com/maven-book/reference_zh/introduction.html
这是翻译,还没翻译完,到16章,不过应该够用了目前!
这里使用eclipse来开发Maven项目!eclipse需要一个插件,m2eclipse,目前应该是最强的Maven插件,非常的方便!待会就能体会到!
m2eclipse的安装,看这里!
http://books.sonatype.com/maven-book/reference_zh/eclipse.html
还有关于Maven建立本地jar仓库的内容,翻译里面都有!
安装完插件,就可以创建Maven项目了!Maven项目是基于原型的!创建完了,就是一个架子!
下面就可以创建Struts2+Spring+Hibernate项目了。非常非常的简单,比Myeclipse的创建过程可能都简单!(有段时间没用Myeclipse了。。)
1.new ->project->other...
附件
1.png (34.47 KB)
上传时间:2008-11-22 21:39
2.第二步直接next即可
3.
附件
2.png (33.67 KB)
上传时间:2008-11-22 21:39
这里是选择Maven项目的原型!搜索一下,struts,就能找到了!点中需要的原型,next.
4
附件
3.png (31.29 KB)
上传时间:2008-11-22 21:39
这里是Maven项目的相关内容。可以参考上面的翻译。
Group Id ,Artifact Id,Version唯一的确定了你的项目!
这里,Group Id可以随便你写,Artifact Id为项目的名称,Version嘛。。。。不多说。
下面的Package是包嘛,随你便咯!搞定,Finish即可!
然后,等吧!Maven会下载需要的jar文件!这可能会让第一次使用Maven的人感觉到很不爽!至少我是很不爽!国内网速比较慢!所以下载需要不少时间!但是第一次下载完后,以后再建项目时它不会再下载的!
创建完成后,就项目就会像这个样子!
附件
4.png (15.98 KB)
上传时间:2008-11-22 21:39
是不是感觉很别扭!java文件在,src/main/java下面,资源文件在src/main/resources下面,还有对应的test目录。这个应该是个习惯问题!慢慢就好!
目前这个项目是Struts2+Spring的项目!里面就有基本代码!
发布内容在src/main/webapp下面,找到index.jsp,右击,run on server即可运行了!
现在所有的java类都在src/main/java目录下,下面并没有struts.xml文件,它被放到了src/main/resources下面了,部署时会自动拷贝过去的!不用担心!
现在添加Hibernate,打开pom.xml文件,在项目根目录下!你会发现有很多的视图方式,具体看上面的翻译即可!
修 改pom.xml文件,直接到代码区,放心,不需要你敲任何代码!右击鼠标,找到Maven,add dependency,输入hibernate,找到org.hibernate,点中需要的jar,点OK即可!我下过了,所以显好红 色!eclipse会自动的下载需要的依赖包!
附件
5.png (42.37 KB)
上传时间:2008-11-22 21:39
这里面,Maven仓库可能有点问题,jta包,1.0.1B版本没有,所以,自己选择jta1.1下载!
附件
6.png (33.62 KB)
上传时间:2008-11-22 21:39
依然,是eclipse自动的下载jar,不需要你找到jar去copy到WEB-INF/lib下了!当然,只下载一次!
最后,当然就是配置Hibernate了,配置方法就不多说了吧!
使用Maven有什么好处呢?
首先是,jar统一管理了!如果建立了一个本地的jar仓库,那么所有人都是从仓库里面下载jar,拷贝项目时只需要copy几K的源码即可!
其次,依然是仓库,使得每个人的jar版本都是一致的,不会出现因为版本不同,引起的莫名其妙的错误。
再来,项目的自动化,只需要mvn package命令,在eclipse里面,看run里面,只需要选择就行了!它会自动的从编译,测试开始,一直到打包,自动的运行,保证你的包没有问题。
上面的作用对我没什么诱惑力!我使用Maven是因为,可以在IDE之间自由的切换!
不知道大家有没有这样的经历!eclipse创建的项目,要到netbeans或者idea下面跑,要修改一堆东西!
而 现在,只要IDE装了Maven插件,就可以随便用IDE了。对于eclipse和idea。不装Maven插件都可以,只需要在项目根目录下运行mvn eclipse:eclipse,mvn idea:odea。完成后,当作普通的eclipse,idea工程打开就可以了,非常的方便!
当然了,不喜欢Maven,只需要按以往的方式开发就可以了,只不过就是目录结构不一样了!
附件
4.png (15.98 KB)
上传时间:2008-11-22 21:39
<script> <!-- viewOnLoad(); if(window.jstiming){window.jstiming.a={};window.jstiming.c=1;var j=function(a,b,e){var c=a.t[b],g=a.t.start;if(c&&(g||e)){c=a.t[b][0];g=e!=undefined?e:g[0];return c-g}};window.jstiming.report=function(a,b,e){var c="";if(window.jstiming.pt){c+="&srt="+window.jstiming.pt;delete window.jstiming.pt}try{if(window.external&&window.external.tran)c+="&tran="+window.external.tran;else if(window.gtbExternal&&window.gtbExternal.tran)c+="&tran="+window.gtbExternal.tran();else if(window.chrome&&window.chrome.csi)c+= "&tran="+window.chrome.csi().tran}catch(g){}if(window.chrome&&window["chrome.loadTimes"]&&window["chrome.loadTimes"]().wasFetchedViaSpdy)c+="&p=s";if(a.b)c+="&"+a.b;var f=a.t,n=f.start,k=[],h=[];for(var d in f)if(d!="start")if(d.indexOf("_")!=0){var i=f[d][1];if(i)f[i]&&h.push(d+"."+j(a,d,f[i][0]));else n&&k.push(d+"."+j(a,d))}delete f.start;if(b)for(var l in b)c+="&"+l+"="+b[l];a=[e?e:"http://csi.gstatic.com/csi","?v=3","&s="+(window.jstiming.sn||"writely")+"&action=",a.name,h.length?"&it="+h.join(","): "","",c,"&rt=",k.join(",")].join("");b=new Image;var m=window.jstiming.c++;window.jstiming.a[m]=b;b.onload=b.onerror=function(){delete window.jstiming.a[m]};b.src=a;b=null;return a}}; window.jstiming.load.name = 'published'; var urchinPage = "/View"; function getXHR() { if (typeof XMLHttpRequest != "undefined") { return new XMLHttpRequest(); } try { return new ActiveXObject("Msxml2.XMLHTTP.6.0") } catch(e) {} try { return new ActiveXObject("Msxml2.XMLHTTP.3.0") } catch(e) {} try { return new ActiveXObject("Msxml2.XMLHTTP") } catch(e) {} try { return new ActiveXObject("Microsoft.XMLHTTP") } catch(e) {} return null; } function reportAbuse() { var req = getXHR(); if (req) { var docid = 'dczddxcb_1fd9w83fs'; var posttoken = 'k0lx8SgBAAA.4LLqoRIyhV_X_BjXpBW-yIUypHI8LPTfQk2_cOjw8o4.pjujDK20pAgVWAGjxjqYTg'; req.onreadystatechange = function() { try { if (req.readyState == 4 && req.status == 200) { var button = document.getElementById("report-abuse-button"); button.value = '谢谢您!'; button.disabled = true; } } catch (ex) { } } try { req.open('POST', 'MiscCommands', true); req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); req.send('command=report_abuse&abuseDoc=' + encodeURIComponent(docid) + '&POST_TOKEN=' + encodeURIComponent(posttoken)); } catch (ex) { } } } --> </script>