有人喜欢把一个下载的spring3.1和struts1.3下载包里的的lib目录下全部的jar无论三七二十一所有copy到工程的WEB-INF\lib目录下,有提示须要覆盖他也就选个“ALL”。java
我曾看到过一个工程,没几个JSP,CLASS,工程达287mb之大,其中286mb为jar文件,彼彼皆是log4j-1.3.8.jar,log4j-1.4.2.jar这样的重复的jar文件的存在。web
有了junit3.8居然还发觉工程里有junit4.x的包。。。晕啊。算法
MAVEN模式:spring
而使用maven构建工程时就不太会有这样的事情发生了,你们初学者能够把maven当作是一个“自动取包机”。怎么解释呢,举个例子来讲:tomcat
你要装载a.jar,但a.jar依赖b.jar,而b.jar又依赖c.jar和d.jar,若是只是2,3级的依赖关系构建者能够记得住,但若是这个依赖关系达6级,7级以上时那么按照传统的构建模式当你发觉一个目录里有abcdefghijk这些个jar文件时,你通常为了不出错老是一古脑的把全部的jar文件copy进工程,对吧?服务器
但实际这些个jar文件里只有a.jar,b.jar, c.jar才是你须要的。app
而maven干这个是它的特长,当你告诉maven你要下载a.jar文件时,它会发觉a.jar依赖于其它的jar文件,它就会把你指定的jar文件与相关的依赖文件所有拿下来,不会多拿(90%状况下)。框架
就比如你要拿org.springframework.web.struts-3.0.0.RELEASE.jar这个文件,但其实它还须要用到asm,collection, bean-util等,那么你只要告诉maven我要拿org.springframework.web.struts-3.0.0.RELEASE.jar这个文件,其它的依赖的相关的jar包会自动“下载”到你的工程中去.因此当我拿 maven从新去构建那个286mb的工程时,工程全部的功能一点不影响,靠着maven对jar包的自动依赖整个工程从286mb缩成了21mb,哈哈哈哈。。。。。。搞毛啊原来的那帮人在!eclipse
理解mavenjsp
请把如下几个概念记住就好了:
1) maven是经过布署在internet上的maven仓库(开源免费)去拿你须要的jar包,所以建议你因该是在一个宽带连网的环境下工做;
2) maven不是万能,有时会多拿包,固然这种状况不多但它会自动帮你把有依赖关系的包全拿到本地来的;
3) 因为maven是经过internet去拿 你须要的jar包的,所以你的工程发布能够不用再把几十mb的jar文件连同你的工程一块儿发布了,而只须要把一份“jar包使用清单”伴随着你的工程一块儿发布就能够了。当别人拿着你的maven工程时,它只要也装有maven也能连入internet环境,它就能够在布署时自动把工程须要用到的jar包取下来而后布署入j2ee服务器的。
4) 若是你所在的环境好比说一些公司不让员工上网或者让上网但不让下载的,那么这时你就须要创建本身的本地maven库,即maven私服. 把全部的jar包经过正式的手段搞到后在你所在的环境的局域网内创建一台maven服务器,把这些经过下载收集到的jar布署到你的“私服”上去,再把工程的maven链接仓库的url指向你本地的这台私服就好了。
修改settings文件
<repositories> <repository> <id>Ibiblio</id> <name>Ibiblio</name> <url>http://www.ibiblio.org/maven/</url> </repository> <repository> <id>PlanetMirror</id> <name>Planet Mirror</name> <url>http://public.planetmirror.com/pub/maven/</url> </repository> </repositories>
由于maven默认的internet仓库里的文件不全,因此笔者为你们提供两个目前你们用得最多的maven的internet仓库,由其是这个lbiblio的,基本全部的开源的框架的jar文件都有提供.
继续看下去,看到proxies这段,把它放开来,改为以下内容(若是你所在的环境是经过proxy上网的),要否则请保证这段proxies为被注释.
<proxies> <proxy> <id>optional</id> <active>true</active> <protocol>http</protocol> <username>username</username> <password>password</password> <host>proxy.mycompany.com</host> <port>8088</port> <nonProxyHosts>local.net|some.host.com</nonProxyHosts> </proxy> </proxies>
若是你经过的proxy须要用户名密码的话不要忘了把用户名密码也设上,若是没有用户名密码,请保持<username>为username,<password>为password。
解决包冲突,前面说了,Maven在绝大多数状况下会保证你的依赖关系没有问题,都会帮你下到本地的,可是此次咱们就碰到了一个问题。
用MavenPOM Editor打开咱们的pom.xml文件,切换到:DependencyHierarchy视图
咱们能够看到为了知足spring-struts这个插件的应用(Spring+ Struts时用的),Maven多给咱们拿 一个struts包,所以致使咱们的工程中有两个struts核心包,一个是1.2.9,一个是1.3.10,因为struts1.3与struts1.2命名空间的不一样,所以才产生了刚才那个狗P错误。
右键单击struts:1.2.9[compile],选ExcludeMaven Artifact后肯定并保存pom.xml文件,这步操做至关于咱们在原有的pom.xml文件中增长了这样的一段描述:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-struts</artifactId> <version>3.1.0.RELEASE</version> <exclusions> <exclusion> <artifactId>struts</artifactId> <groupId>struts</groupId> </exclusion> </exclusions> </dependency>
如何让Maven构建的工程在eclipse里跑起来
可是,这个工程没法在eclipse所内嵌的tomcat里运行起来,这不便于咱们的调试。通常咱们开发人员都喜欢直接在eclipse里点一下server的运行,而后在eclipse里启动起咱们的web工程,这样出了错也便于咱们调试,而不用每次改一个jsp或者一个java就从新构建,对吧。
在eclipse里新增一个jdk的runtime
咱们在这边设置的jdk把它的JREhome给定位到了JAVA_HOME\jre目录下了,而不像上面的JDK1.6咱们的JREhome是定位到JAVA_HOME这一层目录的,为何?由于在使用jasypt时,eclipse wtp有一个bug就是在eclipse内运行tomcat时,有时会认不出PBEWITHMD5ANDDES这个加密算法,它会抛一个secret key notavailable的Exception,而你若是把你工程的JDK编译环境定位到了JAVA_HOME\jre目录下,它就能认得出,这是一个BUG,在eclipse的官方论坛中已经有提。
在eclipse里设置tomcat
设完后你的工程会在server这个tab下多出一个Tomcat的项。
将alpha_mvn转变成可在eclipse里运行的工程
右键你的工程,选project fact,你会看到一个convert的超连接,点这个超连接。
勾选Dynamic Web Module与Java两项
打开工程所在的eclipse workspace目录下的.settings目录如:C:\eclipsespace\alpha_mvn\.settings,看到一个叫“org.eclipse.wst.common.project.facet.core.xml”的文件如:
用纯文本编辑工具打开它,把:
installedfacet="jst.web" version从3.0或者其它版本,改为 2.5以下:
<installed facet="jst.web" version="2.5"/>
回到eclipse里刷新工程,这时你的工程应该会多出一个目录,WebContent,以下结构:
等等,等等。。。先别急着给我拷东西。
右键单击工程,选properties,在Java Build Path里选Order and Export这个Tab。
而后把Maven Dependencies给勾选上,按肯定。
再右键单击工程选
看着这个mapping关系,本身用Add按钮照图来增长吧
记住:在AddMaven Dependencies时要选JavaBuild Path Entries。
其它的都用Folder来add,彻底按照这个mapping 关系来作。
作完后,右键单击server,选”Add andRemove…”
在弹出对话框中把alpha_mvn经过Add>按钮增长到右边的Configured框中,Finish后
你会发觉原来的servers下的Tomcat已经挂载了咱们的工程,点右上角绿色的启动按钮,切换到Console窗口看输出。
输出无误