1.在Eclipse中创建Eclipse项目后如何添加jar包?

点击pom.xml文件.我们可以看到下面有7个标签。

各个标签的含义如下:

Overview:显示maven项目的一些基本信息
Dependencies:添加jar包的页面
Plugins:添加maven插件的页面.比如tomcat-maven-plugin等
Dependency Hierarchy:用于显示jar包的依赖关系.没事的时候可以看看jar包的依赖关系
Effective POM:显示maven的编译路径,plugin之类的.也可以无视
pom.xml:导入jar包的信息,可以在其中进行修改

现在添加jar包:
点击Dependencies标签页
点击Dependencies中的add按钮

搜索mongodb,显示如下图

其中Scope的选择,默认compile即可。

对于scope=compile的情况(默认scope),也就是说这个项目在编译,测试,运行阶段都需要这个artifact对应的jar包在classpath中。
而对于scope=provided的情况,则可以认为这个provided是目标容器已经provide这个artifact。换句话说,它只影响到编译,测试阶段。在编译测试阶段,我们需要这个artifact对应的jar包在classpath中,而在运行阶段,假定目标的容器(比如我们这里的liferay容器)已经提供了这个jar包,所以无需我们这个artifact对应的jar包了。

添加完成后,在Dependencies页签可以进行管理,包括调整版本号等。

type表示依赖包的类型. 
Scope表示这个依赖包的作用周期. 
这些我们暂时不理会. 
保存后.如果是第一次安装maven,可能会有一段长时间的jar包下载过程. 
只要第一次把jar包下载到本地后就不需要下载了. 
maven默认的jar包下载地址在C盘 -->用户-->%User%-->.m2中 

maven会把和添加的jar包有依赖关系的全部下载下来.这样就避免了jar包缺失的问题了。

比如添加Spring-mvc相关的jar包,
maven下载完jar包后,点开项目中的Maven Dependencies,项目会下载很多jar包。

多的这些包其实是和spring-context包有依赖关系的包。

2.未使用Maven,出现服务器Jar包冲突的解决

在开发测试时正常, 一旦部署到正式服务器上, 如果出现以下几类异常,很可能是存在jar包冲突:
1, java类找不到 java.lang.ClassNotFoundException
2, 方法不存在 java.lang.NoSuchMethodError
3, 字段不存在 java.lang.NoSuchFieldError
4, 类错误 java.lang.LinkageError
 
war包中jar包和服务器上jar包冲突, 由于现在服务器功能越来越强大, 而引入的jar也在不断增加, 
出现的冲突的可能性也越来越大, 而且正式环境复杂, 而且不能轻易修改服务器相关配置, 
为解决jar包冲突的问题带来困难, 如果去解决过这些问题, 那是相当折腾人的, 下面是一些方法的总结.

产生冲突的原因: 
这类冲突根本原因就是: 同一个java类存在多个jar包或类路径中, 而这大多由于使用了不同jar包版本造成.

 
下面的办法整理自网上资源,其实正确的使用Maven可以很好的避免这种情况的发生。

解决办法:

1, 案例法 
使用服务器上已有应用的jar包(前提:服务器上面已经部署过别的应用), 曾经使用过此方法解决冲突

2, 最小化法 
正式环境有很多限制, 上传,部署,启停,测试这些过程越简单越好, 最近一次把war包中137jar删除只剩下14个jar包, 
整个测试验证周期大大缩短

3, 来源法 
如果能知道类加载于哪个jar包, 解决就比较容易, 在异常中会有出错类的完整类名, 
如果能获取此类加载于那个jar包, 就能确认冲突的jar包,
如何知道class加载于那个jar包, 昨天灵机一动想到了一个方法, 其实也很简单, 代码如下:

clazz.getResource("className.class").toString();

  

4, 服务器分析法
了解各种应用服务器的class加载机制, 就能判断是什么原因, 什么时候导致的冲突, 这样可以通过调整class加载顺序解决, 
最近一次WAS服务器上的jar包冲突就此方法解决.

 

3.tomcat类加载顺序

Tomcat下的文件目录 
/bin:存放启动和关闭tomcat的脚本文件; 
/conf:存放tomcat的各种配置文件,比如:server.xml 
/server/lib:存放tomcat服务器所需要的各种jar文件(jar文件只可被tomcat 服务器访问) 
/server/webapps:存放tomcat自带的两个web应用:admin应用和manager应用。 
/common/lib:存放tomcat服务器以及所有web应用都可以访问的jar文件夹(web和tomcat服务器都可访问此jar) 
/shared/lib:存放web都可访问的jar文件。(可以被所有的web访问,但不能被tomcat访问) 
/logs:存放tomcat的日志文件 
/webapps:当发布web应用时,默认情况下把web应用文件放于此目录下 
/work:tomcat把由jsp生成的Servlet放于此目录

另:在web应用中,WEB-Inf目录下,也可以建立lib子目录,在此子目录下可以存放各种jar文件,这些jar文件只能被当前web应用访问。其中,在web-inf目录下的lib与classes目录,Tomcat类装载器先装载classes目录下的类,再装载lib目录下的类。因为类同名时,classes优先。

其中jsp运行时,查找class的顺序为:项目文件夹(WEB-INF\lib)—>容器文件夹(tomcat\common\lib)—>jdk文件夹(jdk\jre\lib\ext) 
Tomcat是一种向上寻找的层次结构,也有向下的,或者是可配置的。

Maven使用笔记(二)Eclipse中maven项目添加依赖的更多相关文章

  1. [学习笔记] 在Eclipse中导入项目

    参考前文:[学习笔记] 在Eclips 中导出项目 选择已经导出的文件: 导入之后,项目结构如下: 至此,完成.

  2. android studio中为项目添加依赖包的方法

    右键项目,Open Module Settings 打开后选择Dependencies选项卡,点最右边的加号: 选择Libriay dependencies,从下拉列表里面选择就可以了.

  3. Maven问题总结:Eclipse中项目右键菜单中点击Maven->Update Projects时JDK被重置

    Eclipse中在项目右键菜单点击->Maven->Update Projects时,JDK总是切回 1.5 如果没有在Maven中配置过JDK版本,只是在Eclipse中项目的Prope ...

  4. 转载Eclipse中Maven WEB工程tomcat项目添加调试

    转载地址: http://blog.csdn.net/free4294/article/details/38260581 一.建立一个maven  WEB项目 1.file->new->o ...

  5. (转)Maven学习总结(七)——eclipse中使用Maven创建Web项目

    孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(七)——eclipse中使用Maven创建Web项目 一.创建Web项目 1.1 选择建立Maven Project 选择File -&g ...

  6. Eclipse 中 Maven 项目默认JDK版本为1.5 的解决方法

    在 Eclipse 中 Maven project 的默认 JDK 版本是 1.5, 如果不在 settings.xml 或者 pom.xml 中显示的指出 JDK 版本,每次 右键项目--> ...

  7. Eclipse 中 Maven 项目 pom.xml 提示错误 org.codehaus.plexus.archiver.jar.Manifest.write(java.io.PrintWriter)

    从SVN上下载到Eclipse工作空间的项目一直报如下错误,进行一下Maven ---> Update Project... 就不报错了,但是过一会又会报错 查找资料初步确定是Eclipse中自 ...

  8. eclipse中maven项目jar包不会自动下载解决办法

    Eclipse中maven从远程仓库中下载jar包有时会很慢,有些甚至进度停止不动,这个时候我们可能会终止当前下载,但是终止jar包下载后会出现一个问题,再次打开Eclipse时,你会发现提示你项目中 ...

  9. 【MAVEN】如何在Eclipse中创建MAVEN项目

    目录结构: contents structure [+] 1,Maven简介 2,Maven安装 2.1,下载Maven 2.2,配置环境变量 2.3,测试 3,Maven仓库 3.1,Maven仓库 ...

  10. eclipse中Maven项目jar问题

    eclipse中Maven项目jar包下载下来了,不然我们import是时候根本导入不进来,网上的方法都试过了,Maven仓库也清空过后重新下载过了,都解决不了. 后来发现虽然jar包是下载下来了,可 ...

随机推荐

  1. strstr()

    char * __cdecl strstr ( const char * str1, const char * str2 ) { char *cp = (char *) str1; char *s1, ...

  2. chrome 插件开发

    写在开头: 相当有意思的UI界面,编码实现,浏览速度.对于一天浏览器使用超过10个小时的人来说,能够定制自己的浏览器,是相当的具有诱惑力. Getting Started 1:目前不支持标准发布版本的 ...

  3. CentOS 7 使用经验(更新中)

    首先说一下写这篇博客的初衷. 由于公司这一期的产品准备支持的环境有CentOS 7.MySql 5.6.Java 8.Tomcat 8等等,并且因为人员严重不足,我本月的开发任务在原有的基础上又加上了 ...

  4. Ueditor配置及在项目中的使用

    引言 上篇中简单介绍了Ueditor的两种定制方式,想了解的请戳这里:Ueditor的两种定制方式.在项目中,Ueditor该怎么使用更方便呢?很容易让人想到将ueditor放入用户控件页,可以拖到需 ...

  5. ctags 的最简单使用

    vim插件ctags的安装和使用 2013-11-19 20:47 17109人阅读 评论(0) 收藏 举报  分类: 开发工具(3)  linux编程(9)  c/c++编程(11)  版权声明:本 ...

  6. ReactJS入门学习二

    ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...

  7. Billboard(线段树)

    Billboard Time Limit:8000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit St ...

  8. getVisibleSize 和 getContentSize 和 getWinSize

    getVisibleSize:获得视口(可视区域)的大小,若是DesignResolutionSize跟屏幕尺寸一样大,则getVisibleSize便是getWinSize.getVisibleOr ...

  9. Model backing a DB Context has changed; Consider Code First Migrations

    Model增加一个字段,数据库对应的也手动添加了字段但是运行时报错 The model backing the 'TopLogDbContext' context has changed since ...

  10. 教程Xcode 4下编译发布与提交App到AppStore

    地址:http://www.cocoachina.com/bbs/simple/?t55825.html 教程Xcode 4下编译发布与提交App到AppStore 先说一下这个是我在网上看到的一个帖 ...