ImageVerifierCode 换一换
格式:DOCX , 页数:43 ,大小:852.47KB ,
资源ID:9705776      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9705776.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(maven具体使用遇到的问题记录及解决方法.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

maven具体使用遇到的问题记录及解决方法.docx

1、maven具体使用遇到的问题记录及解决方法这是有关maven学习使用过程中,碰到不同问题时,从各种资料上获取的问题解答,包括一些网上的,还有一部分自己总结的,以作记录1.pom.xml文件中exclusions 用来排除传递性依赖举例说明: com.sun.jersey.contribs jersey-spring $jersey.version org.springframework spring org.springframework spring-core org.springframework spring-web org.springframework spring-aop org.

2、springframework spring-beans org.springframework spring-context 2.pom.xml中,scope的作用 scope 代表依赖的范围,主要包括:(1)compile编译依赖范围,对于编译、测试、运行三者classpath都有效举例如下: javax.ws.rs jsr311-api $jsr311.version jar compile com.sun.jersey jersey-servlet $jersey.version jar compile (2)test测试依赖范围。只对测试classpath都有效 junit juni

3、t $junit.version test (3)provided 已提供依赖范围。使用此依赖范围,对编译、测试classpath都有效,但在编译主代码时无效。 典型例子是servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已经提供,就不需要maven重复引入 javax.servlet.jsp jsp-api $jsp.version provided javax.servlet servlet-api $servlet.version provided (4)runtime 运行时依赖范围。对于测试、运行都有效,但在编译主代码时无效。比如JDBC的驱动实现

4、(5)system 系统依赖范围。同provided依赖范围。 但是用system依赖范围时必须通过systemPath元素显式的指定依赖文件的路径 3.可选依赖有时,我们不想让依赖传递,那么可设置该依赖为可选依赖,将元素optional设置为true举例: commons-logging commons-logging 1.1.1 true 4.通过eclipse管理依赖打开项目,双击pom.xml,可以看到pom.xml的详细内容,点击“dependency hierarchy”,可以看到当前项目的pom.xml已经存在的各种依赖关系如果想增加一个依赖,可以点击“dependencies“

5、,点击右边的”add“按钮,从maven中央仓库中搜索你想要的依赖5.转换普通web项目至maven web项目(1)准备一个简单的java项目(2)转换为maven project,设置pom.xml在eclipse中,右键单击“test913”,选择configureconvert to Maven Project根据提示,填写pom.xml中的各项信息点击“finish”,生成项目的pom.xml文件打开pom.xml可以看到,之前填写的所有信息(3)修改pom.xml,添加依赖的jar包举例来说,添加junitMaven支持java开发中的多种依赖,可以前往maven远程中央仓库htt

6、p:/search.maven.org,搜索你想要的各种依赖包另外一种方法,就是搭建自己的本地私服nexus比如我自己创建的maven中央仓库:http:/192.168.201.14:8081/nexus/index.html这样,本地开发人员无需前往远程仓库下载更新各种依赖,而直接从本地私服获取,节约时间和带宽比如上面提到的junit,我们可以在http:/192.168.201.14:8081/nexus/index.html查询到登陆nexus,在搜索栏输入:junit(4)在pom.xml中添加资源库如第(3)点最后的描述,构建过程,可能需要调用各种依赖jar包,这就pom.xml添

7、加资源获取的仓库为test913项目的pom.xml中,添加本地资源库目录,如上图,增加一个获取资源等各种jar包的目录地址这里对pom.xml的操作只针对“test913“这一个项目,如果想设置成对本机所有项目都从nexus上获取资源,需要修改M2_HOME/conf/settings.xml,这里的settings.xml是全局范围的,使用整台机器上的所有用户都会受到该配置的影响。还有一个办法,是先将M2_HOME/conf/settings.xml复制到/.m2/settings.xml,然后对这里的settings.xml进行修改。这样的原因,可以只针对当前用户产生作用。我在这里,仍然

8、是修改M2_HOME/conf/settings.xml由于我们不能直接在settings.xml中插入元素,这里我们编写了一个profile,并添加了一个profile并使用元素自动将这个profile激活。这里的local-nexus仓库指向了刚才我们配置的Nexus中“Public Repositories”仓库组,也就是说,所有该仓库组包含的仓库都能供我们使用。此外,我们通过和元素激活了Maven对于仓库所有类型构件下载的支持,当然你也可以调节该配置,比如说禁止Maven从Nexus下载snapshot构件,只要将“true”改成“false”即可。修改完settings.xml,Ma

9、ven就会从你的Nexus服务器下载构件了,这样我们就可以全局的使用这个配置,不再需要为每个项目的POM做重复的配置了。(5)设置自动发布构件至资源库(nexus)有时候有个jar文件你无法从公共Maven仓库找到,但是你能从其它得到这个jar文件(甚至是POM),那么你完全可以将这个文件部署到Nexus中,使其成为标准流程的一部分。比如:团队在开发一个项目的各个模块,为了让自己开发的模块能够快速让其他人使用,你会想要将snapshot版本的构件部署到Maven仓库中,其他人只需要在POM添加一个对于你开发模块的依赖,就能随时拿到最新的snapshot。为了能将项目的jar包上传到我们的资源库

10、(nexus)并被其他maven项目依赖,需要在pom.xml中配置上传资源库如上图,在pom.xml中配置distributionManagement,这里的url都是nexus安装成功后自动分配好的。这里我们配置所有的snapshot版本构件部署到Nexus的Snapshots仓库中,所有的release构件部署到Nexus的Releases仓库中。(6)设置setting.xml由于部署需要登陆,因此我们在M2_HOME/conf/settings.xml中配置对应Repository id的用户名和密码。为保证项目的jar包能正确上传,还需要确定本地maven的配置文件settings

11、.xml中有对应上传资源库的用户名和密码。其配置如下:注意,在setting.xml中设置server时,填写的id要和pom.xml的配置distributionManagement时写的id名称要一致账号和密码都是nexus自动生成的(7)执行mvn clean deploy全部配置完成,对test913项目执行mvn clean deploy然后,你会看到maven将项目构件部署到Nexus中,浏览Nexus对应的仓库,就可以看到刚才部署的构件。当其他人构建其项目时,Maven就会从Nexus寻找依赖并下载出现:build success打开http:/192.168.201.14:80

12、81/nexus/content/repositories/snapshot,查看是否多了一个com/nfs/tet913,如下图同时,在nexus的public目录中,也出现了com/nfs/tet9136.nexus本地资源库中的三种构件Nexus预定义了3个本地仓库,分别为Releases,Snapshots,和3rd Party。这三个仓库都有各自明确的目的。Releases用于部署我们自己的release构件,Snapshots用于部署我们自己的snapshot构件,而3rd Party用于部署第三方构件,有些构件如Oracle的JDBC驱动,我们不能从公共仓库下载到,我们就需要将其

13、部署到自己的仓库中。Nexus预定义了“Public Repositories”仓库组,默认合并所有预定义的Release仓库。如下图:7.nexus中搜索构件可以通过搜索找寻我们需要的各种构件,在网站左边导航栏“Artifact Search”中,输入你想找的构件名称。比如输入:junit,敲回车,右边立刻会显示出junit的相关的构件信息。你还精确搜索,通过限定group、artifact、version进行搜索在网站左边导航栏“Artifact Search”下点击“advanced search”,点击下拉框,选择“Gav search”,输入group、artifact、versio

14、n8.项目组其他开发人员如何调用本地nexus中的jar项目组开发人员编写出jar包,已经上传至nexus下的releases和snapshot中,会同步到http:/192.168.201.14:8081/nexus/content/groups/public下其他开发人员如果想调用,首先得http:/192.168.201.14:8081/nexus/content/groups/public中查找,之前上传的jar找到详细目录后,将XML描述整个复制进自己模块中的pom.xml文件中将XML描述中的内容复制进自己开发模块下的pom.xml中,即可调用9.struts框架的jar包Stru

15、ts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。作为java写的一个MVC框架组件之一,主要充当MVC中的Controllor(控制器)角色,Struts配合Spring与Hibernate可快速实现Java的Web应用开发。为项目添加struts的依赖jar包:(1) 先进入nexus寻找struts通过nexus仓库搜索struts,可以发现有113条和struts相关的构件比如:org.apache.strutsorg.apache.strutsstruts2-core2.3.15.1(2) 将XML描述的依赖详情,复制进pom.xnl文件中

16、10.常用命令mvnarchetype:create创建Maven项目mvncompile编译源代码mvntest-compile编译测试源代码mvntest运行应用程序中的单元测试mvnsite生成项目相关信息的网站mvnclean清除项目目录中的生成结果mvnpackage根据项目生成的jarmvninstall在本地Respository中安装jarmvneclipse:eclipse生成eclipse项目文件mvnjetty:run启动jetty服务mvntomcat:run启动tomcat服务11.依赖关系org.hibernatehibernate3.1jarruntime这个片断

17、告诉我们,依赖的jar包groupId为org.hibernate,artifactId为hibernate,版本为3.1,scope为runtime。在实际项目中,会将M2_REPO(maven本地仓库地址)/org/hibernate/hibernate/3.1/hibernate-3.1.jar放入classpath。同时maven会通过pom.xml管理jar包间的依赖。比如上面的hibernate-3.1.jar同级目录肯定会有一个hibernate-3.1.pom,在这个pom文件中指定了这个jar对其它一些jar的依赖。而这个pom文件是远程仓库提供,无需进行修改,执行maven

18、相关命令就会自动根据相关依赖去下载jar包。这样只需定义对hibernate的依赖而无需关心相关jar,在构建项目上方便了很多。12.依赖归类13.聚合所有用Maven管理的真实的项目都应该是分模块的,每个模块都对应着一个pom.xml。它们之间通过继承和聚合(也称作多模块,multi-module)相互关联。那么,为什么要这么做呢?我们明明在开发一个项目,划分模块后,导入Eclipse变成了N个项目,这会带来复杂度,给开发带来不便。为了解释原因,假设有这样一个项目,很常见的Java Web应用。在这个应用中,我们分了几层:Dao层负责数据库交互,封装了Hibernate交互的类。Servic

19、e层处理业务逻辑,放一些Service接口和实现相关的Bean。Web层负责与客户端交互,主要有一些Structs的Action类。对应的,在一个项目中,我们会看到一些包名:org.myorg.app.daoorg.myorg.app.serviceorg.myorg.app.weborg.myorg.app.util这样整个项目的框架就清晰了,但随着项目的进行,你可能会遇到如下问题:这个应用可能需要有一个前台和一个后台管理端(web或者swing),你发现大部分dao,一些service,和大部分util是在两个应用中可。这样的问题,你一周内遇到了好几次。pom.xml中的依赖列表越来越长以

20、重用的,但是,由于目前只有一个项目(WAR),你不得不新建一个项目依赖这个WAR,这变得非常的恶心,因为在Maven中配置对WAR的依赖远不如依赖JAR那样简单明了,而且你根本不需要org.myorg.app.web。有人修改了dao,提交到svn并且不小心导致build失败了,你在编写service的代码,发现编译不过,只能等那人把dao修复了,你才能继续进行,很多人都在修改,到后来你根本就不清楚哪个依赖是谁需要的,渐渐的,很多不必要的依赖被引入。甚至出现了一个依赖有多个版本存在。build整个项目的时间越来越长,尽管你只是一直在web层工作,但你不得不build整个项目。某个模块,比如ut

21、il,你只想让一些经验丰富的人来维护,可是,现在这种情况,每个开发者都能修改,这导致关键模块的代码质量不能达到你的要求。我们会发现,其实这里实际上没有遵守一个设计模式原则:“高内聚,低耦合”。虽然我们通过包名划分了层次,并且你还会说,这些包的依赖都是单向的,没有包的环依赖。这很好,但还不够,因为就构建层次来说,所有东西都被耦合在一起了。因此我们需要使用Maven划分模块。一个简单的Maven模块结构是这样的:- app-parent |- pom.xml (pom) | |- app-util | |- pom.xml (jar) | |- app-dao | |- pom.xml (jar)

22、 | |- app-service | |- pom.xml (jar) | |- app-web |- pom.xml (war) 上述简单示意图中,有一个父项目(app-parent)聚合很多子项目(app-util, app-dao, app-service, app-web)。每个项目,不管是父子,都含有一个pom.xml文件。而且要注意的是,小括号中标出了每个项目的打包类型。父项目是pom,也只能是pom。子项目有jar,或者war。根据它包含的内容具体考虑。这些模块的依赖关系如下:app-dao - app-utilapp-service - app-daoapp-web - ap

23、p-service注意依赖的传递性(大部分情况是传递的,除非你配置了特殊的依赖scope),app-dao依赖于app-util,app-service依赖于app-dao,于是app-service也依赖于app-util。同理,app-web依赖于app-dao,app-util。用项目层次的划分替代包层次的划分能给我们带来如下好处:1. 方便重用,如果你有一个新的swing项目需要用到app-dao和app-service,添加对它们的依赖即可,你不再需要去依赖一个WAR。而有些模块,如app-util,完全可以渐渐进化成公司的一份基础工具类库,供所有项目使用。这是模块化最重要的一个目的

24、。2. 由于你现在划分了模块,每个模块的配置都在各自的pom.xml里,不用再到一个混乱的纷繁复杂的总的POM中寻找自己的配置。3. 如果你只是在app-dao上工作,你不再需要build整个项目,只要在app-dao目录运行mvn命令进行build即可,这样可以节省时间,尤其是当项目越来越复杂,build越来越耗时后。4. 某些模块,如app-util被所有人依赖,但你不想给所有人修改,现在你完全可以从这个项目结构出来,做成另外一个项目,svn只给特定的人访问,但仍提供jar给别人使用。5. 多模块的Maven项目结构支持一些Maven的更有趣的特性(如DepencencyManagement),这留作以后讨论。接下来讨论一下POM配置细节,实际上非常简单,先看app-parent的pom.xml:Xml代码1. 3. 4.0.04. org.myorg.myapp5. app-parent6. pom7.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1