本文为博主原创,转载请注明出处:

1.介绍

  classpath是java运行时环境搜索类和其他资源文件(比如jar\zip等资源)的路径。类路径告诉JDK工具和应用程序在哪里可以找到第三方和用户定义的类;

  可以通过JDK工具(比如javac命令、java命令)后面的-classpath 参数设置classpath。

  查看服务中的classpath 配置方式:

  第一种.通过 jinfo 进行查看,在配置的最下面会有 java.class.path 的变量配置,如下:

  第二种 通过查看java进程

2.使用场景

   1.使用-classpath:当你要编译或执行的类引用了其它的类,但被引用类的.class文件不在当前目录下时,就需要通过-classpath来引入类;

  2.指定路径:当你要编译的类所在的目录和你执行javac命令的目录不是同一个目录时,就需要指定源文件的路径(CLASSPATH是用来指定.class路径的,不是用来指定.java文件的路径的)

  3.指定加载资源先后顺序;classpath 中在前面的资源会优先加载;在后面的资源会再后面加载;

    如果包名相同且全路径名也相同的类,出现 jar包冲突(NoSuchMehodException、NoSuchFieldException、ClassNotFoundException或者NoSuchMehodError、NoClassDefFoundError)出现这些错误的时候,就可以通过设置classpath,指定资源的加载顺序;从而解决jar包冲突的问题

3.java -jar 启动服务 进行 classpath 设置

  3.1 通过 -classpath 在环境中直接设置

  当您调用JVM或其他JDK工具或使用环境变量时,可以使用JDK工具’ -classpath选项来更改classpath。使用该选项优于设置环境变量,因为您可以为每个应用程序单独设置,而不会影响其他应用程序,而无需其他应用程序修改其值。

  示例如下:通过 -classpath 指定多个加载类;此处使用 分号分割

 java -classpath C:\java\MyClasse1;C:\java\MyClass2 com.yiibai.MainApp

  通过-classpath 指定多个jar包的顺序;此处使用 英文冒号进行分割

java -jar -classpath C:\dependency\framework.jar:C:\location\otherFramework.jar  test.jar
java -jar -cp C:\dependency\framework.jar:C:\location\otherFramework.jar test.jar

  java -cp ... 是 java -classpath ... 的简写

  3.2 通过 java 代码使用  java.class.path 进行设置

    // java类路径
String javaClassPath = System.getProperty("java.class.path");
System.out.println(javaClassPath);
System.setProperty("java.class.path", javaClassPath + ";D:\\");
javaClassPath = System.getProperty("java.class.path");
System.out.println(javaClassPath);

  注意:在设置之前先获取系统的配置,然后在这个基础上拼接自己需要定义的配置

  3.3 通过 -Djava.class.path 进行设置

-Djava.class.path=a.jar -Djava.class.path=b.jar

4.tomcat启动war包设置classpath 与 java -jar 启动设置classpath

  3 中的设置 classpath 的方式是针对 java -jar 的方式设置的;如果是 通过 tomcat 进行war包启动服务,其classpath 是通过 tomcat 启动脚本中进行设置的。

  想要理解Tomcat如何处理classpath的,看看以下Tomcat6的启动过程:

    1、java虚拟机的bootstrap loader加载java的核心类库。java虚拟机使用JAVA_HOME环境变量来定位核心库的位置。

    2、Startup.sh,使用start参数调用Catalina.sh,重写系统的classpath并加载bootstrap.jar和tomcat-juli.jar。这些资源仅对Tomcat可见。

    3、为每一个部署的Context创建Class loader,加载位于每个web应用程序WEB-INF/classes和WEB-INF/lib目录下的所有类和jar文件。每个web应用程序仅仅可见自己目录下的资源。

    4、Common class loader加载位于$CATALINA_HOME/lib目录下的所有类和jar文件,这些资源对所有应用程序和Tomcat可见。

  在 tomcat 启动的时候,tomcat不会用JDK的classpath,这个是在tomcat启动的catalina.sh里面设置的 :

  可以手动修改 catalina.sh 中 CLASSPATH 设置的地方,或者 在 CLASSPATH 最后的地方 拼接上自己定义的classpath即可

Tomcat 与 JVM 中classpath的理解和设置总结的更多相关文章

  1. 【Tomcat】JVM,Tomcat,Servlet,Tomcat中的应用。彻底弄懂这些概念之间的联系

    tomcat和tomcat中的应用(即webapps下的war包)是运行在同一个jvm中的,但分工不同. tomcat的角色是“调度员”,而你的应用的角色是“工作者”,tomcat处理一个请求的大致过 ...

  2. MyEclipse中Tomcat对应JVM的参数配置

    MyEclipse中Tomcat对应JVM的参数配置: -Xmx512M -Xms256M -XX:MaxPermSize=256m

  3. Tomcat和JVM的性能调优总结

    Tomcat性能调优: 找到Tomcat根目录下的conf目录,修改server.xml文件的内容.对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创 ...

  4. JVM中ClassLoader的学习

    JVM中class loaderの学习 一..class文件和jvm的关系 类的加载 所有的编译生成的.class文件都会被直接加载到JVM里面来吗(并不 首先我们明确一个概念,.class文件加载到 ...

  5. 《Tomcat和JVM的性能调优你真的学会了吗?》总结篇

    Tomcat性能调优: 找到Tomcat根目录下的conf目录,修改server.xml文件的内容.对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创 ...

  6. JVM中的类加载

    JVM中的类加载 关于JVM中类的加载这部分知识在网上有太多的文章描述这部分的知识.但是多数文章都过于冗长,难以理解.这篇文章主要是一些我对JVM中类的加载的理解. 一.一句话概括 java在类加载的 ...

  7. 一份 Tomcat 和 JVM 的性能调优经验总结!拿走不谢

    Tomcat性能调优 找到Tomcat根目录下的conf目录,修改server.xml文件的内容.对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创建 ...

  8. 性能优化 | Tomcat和JVM的性能调优总结

    Tomcat性能调优: 找到Tomcat根目录下的conf目录,修改server.xml文件的内容.对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创 ...

  9. Tomcat 和 JVM 性能调优总结

    Tomcat性能调优: 找到Tomcat根目录下的conf目录,修改server.xml文件的内容.对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创 ...

  10. 【转】JVM运行原理及JVM中的Stack和Heap的实现过程

    来自: http://blog.csdn.net//u011067360/article/details/46047521 Java语言写的源程序通过Java编译器,编译成与平台无关的‘字节码程序’( ...

随机推荐

  1. c语言指针数组和数组指针

    1 #include<stdio.h> 2 #include<iostream> 3 using namespace std; 4 int main(){ 5 int a[2] ...

  2. python tkinter使用(五)

    python tkinter使用(五) 本篇文章讲述tkinter 中treeview的使用 Treeview是一个多列列表框,可以显示层次数据. #!/usr/bin/python3 # -*- c ...

  3. ElasticSearch之cat pending tasks API

    命令样例如下: curl -X GET "https://localhost:9200/_cat/pending_tasks?v=true&pretty" --cacert ...

  4. springboot--ActiveMQ--消息队列

    ActiveMQ远程消息队列 一.我们创建springboot项目工程 二.创建完毕我们简单介绍 activeMQ 1.概述 消息中间件可以理解成就是一个服务软件,保存信息的容器,比如生活中的快递云柜 ...

  5. Python——第五章:csv模块

    未来我们会使用爬虫获取到一些json文件,例如去英雄联盟官方爬取英雄的数据库 查看代码 {"hero":[{"heroId":"1",&qu ...

  6. P5137 题解

    前言 首先感谢所有帮助我卡常的大佬们. 题意 求 \((\sum_{i = 0}^{n} a^i b^{n - i})\mod p\) 的值(\(n \leq 10^{18}\),\(p\) 不一定为 ...

  7. jumpserver连接ecs实例报错:UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh_exchange_identification: Connection closed by remote host", "unreachable": true

    报错分析思路: 1.是ssh密钥设置有没有对接 2.防火墙拦截问题 3.用户设置问题 4.sshd配置问题 问题解决: 无法与221.229.216.39端口35846进行协商:找不到匹配的主机密钥类 ...

  8. 占位图片(Placeholder Image)

    一.引言 在网页设计和开发中,占位图片(Placeholder Image)是一种常见的技术手段,用于在用户上传图片之前或者图片加载失败时,展示一个临时替代的图片,以提高用户体验.本文将详细介绍占位图 ...

  9. rasa train nlu详解:1.1-train_nlu()函数

      本文使用<使用ResponseSelector实现校园招聘FAQ机器人>中的例子,主要详解介绍train_nlu()函数中变量的具体值. 一.rasa/model_training.p ...

  10. 探索开源工作流引擎Azkaban在MRS中的实践

    摘要:本文主要介绍如何在华为云上从0-1搭建azkaban并指导用户如何提交作业至MRS. 本文分享自华为云社区<开源工作流引擎Azkaban在MRS中的实践>,作者:啊喔YeYe. 环境 ...