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. 初学Struts2-自定义拦截器及其配置

    自定义拦截器,首先新建一个继承自AbstractInterceptor类的类,然后重写intercept方法,代码如下 public class HelloInterceptor extends Ab ...

  2. derby支持的数据类型

    Data types This section describes the data types used in Derby. Built-In type overview Numeric types ...

  3. HttpRuntime应用程序的运行时

    System.Web.HttpRuntime类是整个Asp.net服务器处理的入口. 这个类提供了一系列的静态属性,反映web应用程序域的设置信息,而且每个web应用程序域中存在一个System.We ...

  4. 关于thinkphp 开发的网站部署问题

    公司一个网站用thinkphp 开发的,由wamp环境移植到lamp环境 出现错误.提示无法生成缓存文件. 原因是thinkphp 的一些目录需要重新生成,所以将一个新的thinkphp 核心包应用后 ...

  5. seajs模块加载与执行原理小记

    本文仅讨论具名模块的情况,即通过spm打包出来的模块. 想起ID与路径统一原则,详见https://github.com/seajs/seajs/issues/930 今天又研究了下seajs源码,源 ...

  6. poj1142.Smith Number(数学推导)

    Smith Number Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 825  Solved: 366 Description While skimm ...

  7. Unity3d Static 静态批处理和动态批处理

    表示物体时静态的,多用于静止不动的物体,此外static有多种,有的用于烘焙,有的用于遮挡剔除 物理效果是rigidbody组件,和这个没关系,用transform.Translate 无法移动,因为 ...

  8. OJ 1188 全排列---康托展开

    题目描述 求n的从小到大第m个全排列(n≤20). 输入 n和m 输出 输出第m个全排列,两个数之间有一空格. 样例输入 3 2 样例输出 1 3 2 #include<cstdio> # ...

  9. php远程抓取网站图片并保存

    以前看到网上别人说写程序抓取网页图片的,感觉挺神奇,心想什么时候我自己也写一个抓取图片的方法! 刚好这两天没什么事,就参考了网上一个php抓取图片代码,重点借鉴了 匹配img标签和其src属性正则的写 ...

  10. 原创:分享asp.net伪静态成目录形式iis如何设置

    服务器租用详解asp.net伪静态成目录形式iis如何设置: 一.首先介绍一下asp.net伪静态成html后缀iis如何设置的 iis6 伪静态 iis配置方法 图解 1.右键点击 要设置网站的网站 ...