在java 1.5的时候,我还得写bash脚本去loop获得所有的jar,然后写到classpath下面,现在换到1.6,发现有个classpath wildcard,原来classpath也有通配符
看
这里
引用
Class path entries can contain the basename wildcard character *, which is considered equivalent to specifying a list of all the files in the directory with the extension .jar or .JAR. For example, the class path entry foo/* specifies all JAR files in the directory named foo. A classpath entry consisting simply of * expands to a list of all the jar files in the current directory.
A class path entry that contains * will not match class files. To match both classes and JAR files in a single directory foo, use either foo;foo/* or foo/*;foo. The order chosen determines whether the classes and resources in foo are loaded before JAR files in foo, or vice versa.
Subdirectories are not searched recursively. For example, foo/* looks for JAR files only in foo, not in foo/bar, foo/baz, etc.
The order in which the JAR files in a directory are enumerated in the expanded class path is not specified and may vary from platform to platform and even from moment to moment on the same machine. A well-constructed application should not depend upon any particular order. If a specific order is required then the JAR files can be enumerated explicitly in the class path.
Expansion of wildcards is done early, prior to the invocation of a program's main method, rather than late, during the class-loading process itself. Each element of the input class path containing a wildcard is replaced by the (possibly empty) sequence of elements generated by enumerating the JAR files in the named directory. For example, if the directory foo contains a.jar, b.jar, and c.jar, then the class path foo/* is expanded into foo/a.jar;foo/b.jar;foo/c.jar, and that string would be the value of the system property java.class.path.
The CLASSPATH environment variable is not treated any differently from the -classpath (or -cp) command-line option. That is, wildcards are honored in all these cases. However, class path wildcards are not honored in the Class-Path jar-manifest header.
那么稍微翻译一下,假设lib是你的依赖
1. 如果a.jar, b.jar, c.jar都在lib下面,你可以 -cp lib/* Main 来把lib下面所有的jar放到cp下
2. 如果a.class, b.jar, c.jar都在lib下面,你可以 -cp lib:lib/* Main 来把lib下面所有的class文件和jar包放到cp下面
3. 如果lib/foo/a.jar,那么lib/*是不会获得a.jar的,因为通配符不会递归
4. 要注意的是,在classloader作用前,/*这种通配符就已经被扩展了;此外,不要让程序对jar包的加载顺序有要求。
have fun....
分享到:
相关推荐
Java的classpath是每个Java开发者都必须了解的关键概念,它决定了JVM(Java虚拟机)在执行Java程序时如何查找和加载所需的类文件。本文将深入探讨classpath的基本原理、配置方式以及如何确保`javac`正确编译运行Java...
Spring 配置中的classpath:与classpath*:的区别 Spring 配置中的classpath:与classpath*:的区别是 Spring 框架中一个常见的问题。...需要的朋友可以继续浏览相关文章,获取更多关于 Spring 配置的知识。
2. **设置`classpath`**:你可以通过`-cp`或`-classpath`命令行选项来设置`classpath`,或者在`JAVA_HOME/bin`目录下的`java.exe`启动脚本中修改`CLASSPATH`环境变量。 3. **路径分隔符**:在Windows上,路径之间...
在Java编程环境中,`Classpath`(类路径)是一个至关重要的概念,它是Java虚拟机(JVM)查找和加载.class文件的路径。当我们在开发和运行Java程序时,正确配置Classpath是确保程序能正常运行的关键步骤。这篇文档将...
### Java Classpath 理解 #### 一、在命令行查看 Classpath 在 Java 开发环境中,了解如何查看当前环境下的 classpath 非常重要。这有助于开发者明确类库和其他依赖项的位置,从而更好地管理项目的运行环境。 1. ...
.classpath
在Java编程环境中,路径(Path)和类路径(Classpath)是两个至关重要的概念,它们对程序的编译和运行起着决定性的作用。本文将深入解析这两个概念,并结合源码和工具,帮助你理解它们的工作原理。 首先,让我们来...
path与classpath的区别 path与classpath是Java开发中两个常见的概念,但它们之间的区别却经常被混淆。下面,我们将详细介绍path和classpath的作用、区别以及它们在Java开发中的应用。 path的作用 path是系统用来...
classpath备份
"DLL之家.htm"可能是一个关于dll文件的指南或文档,提供dll的相关知识和使用方法;而"X86"和"X64"两个目录可能分别包含了适用于32位和64位系统的dll文件。 使用IKVM.GNU.Classpath时,开发者需要注意一些关键点。...
### Java中的Path与Classpath设置详解 在Java开发过程中,正确配置环境变量是十分重要的一步。其中,`path`和`classpath`是最为关键的两个环境变量,它们直接影响到Java程序能否正常编译和运行。 #### 一、Path 的...
### Java的Classpath详解及其重要性 在Java编程的学习与实践中,环境配置是入门的关键步骤之一,其中最为棘手的问题之一便是如何正确设置`classpath`。`classpath`不仅影响着程序能否正常编译和运行,还关系到...
### classpath与path详解 #### 一、概念介绍 在深入了解`classpath`和`path`之前,我们需要先明确这两个环境变量的基本概念。 ##### path `path`环境变量主要用于指定操作系统可以搜索到可执行文件(例如`.exe`...
Java 环境配置与设置 JAVA_HOME, CLASSPATH, PATH 的目的 Java 环境配置是 Java 开发的基础,我们需要正确地配置 JAVA_HOME, CLASSPATH, PATH 等环境变量,以便正确地编译和运行 Java 程序。在本节中,我们将详细地...
GNU Classpath 是一个开源项目,主要目标是提供一个符合Java标准平台规范的类库实现,以便支持Java应用程序的运行。这个项目与Java虚拟机(JVM)紧密协作,为Java程序提供必要的运行环境。在本案例中,提到的"Jamvm...
### Java Classpath 全解 对于初学者而言,理解 Java 中的 `classpath` 概念可能会感到有些困难。很多时候,程序在某个环境下可以正常运行,但换到另一个...希望本文能够帮助大家彻底解决关于 `classpath` 的疑惑。
### Java Classpath 配置详解 #### 一、前言 对于初学Java的朋友而言,配置Java环境常常是一项艰巨的任务,尤其是如何正确设置`classpath`。这篇文章将通过一系列实际操作来详细阐述`classpath`的配置过程,帮助...
Java中的ClassPath和Package是Java开发中至关重要的概念,它们直接影响到Java程序的编译和运行。在这篇文章中,我们将详细探讨这两个主题。 首先,让我们理解什么是ClassPath。ClassPath是Java虚拟机(JVM)查找类...