谈谈Java的classpath

Java之ClassPath



大家刚开始写Java代码的时候,如果使用Eclipse作为IDE,同时需要引用其他的类库,一般会有如下操作

  1. 在工程中新建lib目录
  2. 将jar包复制到lib目录下
  3. 右键单击选中jar,点击Bulid Path,之后点击Add to Bulid Path
  4. 最终我们可以在Referenced Libraries中看到我们添加的jar包

ClassPath

其实上述的操作都和ClassPath有关,那究竟什么是ClassPathClassPath的作用是什么?

1. 什么是ClassPath

CLASSPATH 包含了一个或多个目录,它们作为一种特殊的“根”使用,从这里展开对.class文件的搜索。从那个根开始,解释器会寻找包名,并将每个点号(句点)替换成一个斜杠,从而生成从CLASSPATH 根开始的一个路径名(所以package foo.bar.baz会变成foo\bar\baz或者foo/bar/baz;具体是正斜杠还是反斜杠由操作系统决定)。随后将它们连接到一起,成为CLASSPATH 内的各个条目(入口)。以后搜索.class文件时,就可从这些地方开始查找与准备创建的类名对应的名字。

ClassPath,中文叫做类路径,就是存放编译好的.class的路径。当你需要引用或者使用的类,不再当前目录下的时候,就需要将这些类添加到ClassPath中。



当我们第一次写JavaHelloWorld的时候,我们新建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.xmlclasspath:springmvc.xml里面出现了classpath,有人就会有疑问,放在src目录的配置文件用classpath:怎么可以读取到

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

原文地址:https://www.cnblogs.com/LDZZDL/p/9081594.html

时间: 2024-11-15 01:56:11

谈谈Java的classpath的相关文章

获取java项目 classpath目录

this.getClass().getResource("/").getPath(); 从根目录获取载入文件: this.getClass().getResourceAsStream("/myshop.properties") 获取java项目 classpath目录,布布扣,bubuko.com

谈谈Java的集合组件

让我们一起谈谈Java的集合组件 我们在使用Java的时候,都会遇到并使用到Java的集合.在这里通过自己的理解和网上的资源对Java的集合方面的使用做一个简单的讲解和总结. Java主要分为3个集合组件:Set(集).List(列表).Map(映射). Collection接口:Collection是最基本的集合接口,声明了适用于Java集合的通用方法.Set和List都继承了Collection,Map. Collection接口的方法: boolean add(Object o):向集合中

谈谈java的BlockingQueue

http://www.cnblogs.com/archy_yu/archive/2013/04/19/3018479.html 博客园 首页 新随笔 联系 管理 随笔- 92  文章- 0  评论- 825 谈谈java的BlockingQueue 最近在维护一个java工程,在群里面也就聊起来java的优劣!无奈一些Java的终极粉丝,总是号称性能已经不必C++差,并且很多标准类库都是大师级的人写的,如何如何稳定等等.索性就认真研究一番,他们给我的一项说明就是,在线程之间投递消息,用java已

谈谈java中静态变量与静态方法继承的问题

谈谈java中静态变量与静态方法继承的问题 学习的中如果遇到不明白或者不清楚的的时候,就是自己做些测试,自己去试试,这次我就做一个关于静态变量的继承和静态方法继承问题的测试. 首先我先建一个父类: 这样我在建一个子类: 这些都准备好以后,我对子类创建对象,然后用  类名.静态变量/静态方法  和  对象名.静态方法/静态变量  对他们输出的结果进行测试. 这样输出种类有: 这样我输出的结果是: 这样来总结一下: 1. 通过类名来调用子类中的静态变量和静态方法,当父类与子类相同时是,子类会隐藏父类

谈谈java中成员变量与成员方法继承的问题

谈谈java中成员变量与成员方法继承的问题 关于成员变量和成员方法的的继承问题,我也可以做一个小测试,来看看结果. 首先我们先创建一个父类: 其次再创建一个子类,子类中要比父类中少一个成员方法: 这样我们对子类创建对象,如果不创建对象,我们是无法访问子类的成员变量和成员方法的,因为“无法从静态上下文中引用非静态方法”.我们要输出有: 从以上的数据中,我们就可以得出的输出结果是 这样我们就可以得出结论. 总结: 1.   在结果中可以看出,子类的成员变量和成员方法,与其父类的相同的时候,子类就会覆

谈谈java创建对象

作为一门面向对象的语言,我们学习java,对于对象的学习非常重要.大多的教程上都用抽象的概念驱使着我们理解对象,把现实抽象为对象.然而忽略对创建对象的研究.如果说学习抽象思维,运用抽象思维虚拟现实是走向java顶端的关键,那创建对象可以说是通向成功的垫脚石吧.今天我们就来谈谈创建对象. 说到创建对象,new 方法是java最常用也是最简单的方式.而恰恰是它的简单,让我们用的那么的随意. 举个例子: public class Demo { private String i; private Str

java的classpath和path理解

1)classpath即是类路径的意思,后缀为.java的源程序编译成功之后会生成后缀为.class的类文件.classpath与import关键字是相关的,程序编译的时候,遇到import关键字,编译器就会到classpath参数对应的路径中去寻找对应的.class类文件,将其倒入.classpath的一个示例如下: classpath=“.;/usr/local/jdk/lib;/home/hadoop/DoubleArrayWritable.jar” 其中,DoubleArrayWrita

谈谈java垃圾回收机制

最近看了一些关于垃圾回收机制的文章,总结一下. 要回到java的垃圾回收机制,从以下三个方面去回答: 1.哪些内存会被收回? 2.什么时候收回? 3.如何收回? 首先,谈谈哪些对象会被收回. 通过根搜索算法(GC Roots Tracing)判断对象是否还活着.该算法通过一系列的名为"GC Roots"的对象做为起始点,通过这些节点向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链接(用图论来说就是从GC Roots到这个对象不可达),则说明该对象是不可用

java的classpath到底是什么鬼

CLASSPATH,现在的jdk(1.5以后)不需要这个环境变量了.最初的jdk自己找不到jdk\lib目录下的tools.jar,所以需要配置这个环境变量. 作用:Java虚拟机(JVM)借助类装载器装入应用程序使用的类,具体装入哪些类根据当时的需要决定.CLASSPATH环境变量告诉类装载器到哪里去寻找第三方提供的类和用户定义的类.另外,你也可以使用JVM命令行参数-classpath分别为应用程序指定类路径,在-classpath中指定的类路径覆盖CLASSPATH环境变量中指定的值. T