谈谈Java的classpath
Java之ClassPath
大家刚开始写Java代码的时候,如果使用Eclipse作为IDE,同时需要引用其他的类库,一般会有如下操作
- 在工程中新建lib目录
- 将jar包复制到lib目录下
- 右键单击选中jar,点击Bulid Path,之后点击Add to Bulid Path
- 最终我们可以在Referenced Libraries中看到我们添加的jar包

ClassPath
其实上述的操作都和ClassPath有关,那究竟什么是ClassPath,ClassPath的作用是什么?
1. 什么是ClassPath
CLASSPATH 包含了一个或多个目录,它们作为一种特殊的“根”使用,从这里展开对.class文件的搜索。从那个根开始,解释器会寻找包名,并将每个点号(句点)替换成一个斜杠,从而生成从CLASSPATH 根开始的一个路径名(所以package foo.bar.baz会变成foo\bar\baz或者foo/bar/baz;具体是正斜杠还是反斜杠由操作系统决定)。随后将它们连接到一起,成为CLASSPATH 内的各个条目(入口)。以后搜索.class文件时,就可从这些地方开始查找与准备创建的类名对应的名字。
ClassPath,中文叫做类路径,就是存放编译好的.class的路径。当你需要引用或者使用的类,不再当前目录下的时候,就需要将这些类添加到ClassPath中。
当我们第一次写Java的HelloWorld的时候,我们新建HelloWorld.java文件,并输入以下内容
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
在命令行中输入以下命令,就可以在控制台看见输出Hello World
javac HelloWorld.java
java HelloWorld
但是你如果想在在程序中引用Jar包,该怎么做?
下面的例子中在,我们想在HelloWorld中引用Gson的jar包
import com.google.gson.Gson;
public class HelloWorld {
public static void main(String[] args) {
Gson gson = new Gson();
System.out.println("Hello World");
}
}
首先将肯定需要将jar包复制到当前路径下,之后我们直接运行javac javac HelloWorld.java,但是运行报错,说明之前的做法已经行不通了

我们改成输入,就可以重新打印输出Hello World
javac -cp .\gson-2.8.0.jar HelloWorld.java
java -cp .\gson-2.8.0.jar; HelloWorld
或者
javac -classpath .\gson-2.8.0.jar; HelloWorld.java
java -classpath .\gson-2.8.0.jar; HelloWorld
从上讲,可见ClassPath可以用来指定我们的导入的Jar包的信息。
2. Eclipse工具中ClassPath
当然,在IDE工具不用这么麻烦,只需要点几个按钮就可以了。
在Eclipse中,比如我们将gson包导入的ClassPath中,编译器会在工程目录下的.classpath文件中添加我们导入的jar包信息,之后在编译运行的时候,自动添加这些信息。对比上面的收到编译运行,IDE工具为我们做了非常多事情,来提高我们的效率。


3. Web工程下的ClassPath
在Eclipse中,没有使用Maven的情况下,新建Dynamic Web Project,使用Spring框架,一般我们会在Web.xml做出如下配置
<!-- 配置启动 Spring IOC 容器的 Listener -->
<!-- needed for ContextLoaderListener -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- Bootstraps the root web application context before servlet initialization -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
我们就会看到classpath:applicationContext.xml和classpath:springmvc.xml里面出现了classpath,有人就会有疑问,放在src目录的配置文件用classpath:怎么可以读取到

我们将Dynamic Web Project导出成war包,并将后缀修改成rar并解压。我们可以发现放在src目录下的配置文件和生成的.class文件均存放在WEB-INF\classes目录下。所以我们就可以在在classpath中读取到配置文件

谈谈Java的classpath的更多相关文章
- 谈谈Java程序员进阶的那些知识和方向
谈谈Java程序员进阶的那些知识和方向 记得前段时间看过一篇文章谈到一种程序员叫野生程序员,战斗力极强,可以搞定一切问题,但是通常看问题抓不到本质,或者说是google/baidu/stackover ...
- 老鸟谈谈JAVA EE的学习
老鸟谈谈JAVA EE的学习 因为出差和项目的原因,有将近一个月的时间没有更新博客了,今天终于得闲,和兄弟们分享一下JAVA EE的学习心得.书中带过,直入主题,下面我们首先看看什么是JAVA EE. ...
- java 获取classpath下文件多种方式
java 获取classpath下文件多种方式 一:properties下配置 在resources下定义server.properties register.jks.path=classpath\: ...
- java获取classpath文件路径空格转变成了转义字符%20的问题
java获取classpath文件路径空格转变成了转义字符%20的问题 这个问题很纠结,服务器的文件路径带有空格,空格被转化是%20了,悲剧就出现了 下面展示一段代码String path = get ...
- 谈谈Java的集合组件
让我们一起谈谈Java的集合组件 我们在使用Java的时候,都会遇到并使用到Java的集合.在这里通过自己的理解和网上的资源对Java的集合方面的使用做一个简单的讲解和总结. Java主要分为3个集合 ...
- java classpath import package 机制 @Java的ClassPath, Package和Jar
java classpath import package 机制 從一個簡單的例子談談package與import機制 基本原則:為什麼需要將Java文件和類文件切實安置到其所歸屬之Package ...
- java中classPath和Xpath问题
java中classPath和Xpath问题 今天遇到一个问题想获取classpath对应的目录,开始还以为java源代码可以像spring配置文件.xml中一样通过classpath:来获取对应的路 ...
- 谈谈java的BlockingQueue
http://www.cnblogs.com/archy_yu/archive/2013/04/19/3018479.html 博客园 首页 新随笔 联系 管理 随笔- 92 文章- 0 评论- ...
- 谈谈JAVA中的安全发布
谈谈JAVA中的安全发布 昨天看到一篇文章阐述技术类资料的"等级",看完之后很有共鸣.再加上最近在工作中越发觉得线程安全性的重要性和难以捉摸,又掏出了<Java并发编程实战& ...
随机推荐
- es6常用语法学习笔记
1.let和const的常规使用 let声明的变量不存在预解析 let声明的变量不允许重复使用(在同一个作用域内) ES6引入了块级作用域{},块内部定义的变量,在外部是不可以访问到的 使用let在f ...
- 提交变更(git commit)
当所有的变更都进入暂存区,就可以使用git commit进行提交了 $ git commit 执行这句话后,会弹出文本编辑区(自己配置的或默认的),文本编辑器可能会显示如下内容 # Please en ...
- mint-ui Picker设置指定初始值
最近做的项目公司需求是信息输入页设置地址跳转下一页后,再返回信息输入页查看信息时,地址要默认显示前面选择的地址,以此记录下,需要小伙伴可以看看 data{return{}}中设置 :slots 在 ...
- 更改checkbox的默认样式
最近做一个vue项目要用到checkbox要修改默认样式,选中是纯白色,不选择只有白色边框,起初以为很容易,没想到还折腾了一翻,记录一下. 几经折腾,理清input 和label的关系 最终改进版本, ...
- 2018-2019 网络对抗技术 20165231 Exp4 恶意代码分析
实验目标 1.是监控你自己系统的运行状态,看有没有可疑的程序在运行. 2.是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals,systrac ...
- 20175333曹雅坤 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
- [Kubernetes]深入理解StatefulSet
前面我写的一系列博客,如果你能够耐心看到这一篇,那你应该对一个概念就不是太陌生了:Deployment. 为什么提这个概念呢,这就要说到Deployment的一个不足了.Deployment不足以覆盖 ...
- 利用YOLOV3训练自己的数据
写在前面:YOLOV3只有修改了源码才需要重新make,而且make之前要先make clean. 一.准备数据 在/darknet/VOCdevkit1下建立文件夹VOC2007. voc2007文 ...
- encode与decode
import torch from torch import nn import numpy as np import matplotlib.pyplot as plt import torch.ut ...
- 三种工具绘制errorbar图
误差棒是数据可变性的图形表示,并用于图表以指示所报告的测量中的误差或不确定性.他们给出了测量精确度的一般概念,或者相反,距报告值有多远,真实(无误差)值可能是多少.误差线通常代表不确定度的一个标准偏差 ...