Java类路径通配符在没有引号的情况下不起作用

Java类路径通配符在没有引号的情况下不起作用,java,classpath,Java,Classpath,我有一个包含大量jar文件和类路径的文件夹: -classpath ./classes:./jogamp-all-platforms/jar/* 但它没有找到包裹。为了确保我有问题的资源,我手动查找包含它的jar,并将类路径更改为: -classpath ./classes:./jogamp-all-platforms/jar/jogl-all.jar 现在,它并不是在抱怨找不到包。第一个表单不起作用。不能使用通配符加载jar文件。第二种形式应该有效,除非您缺少依赖类。问题是*被扩展到目录中

我有一个包含大量jar文件和类路径的文件夹:

-classpath ./classes:./jogamp-all-platforms/jar/*
但它没有找到包裹。为了确保我有问题的资源,我手动查找包含它的jar,并将类路径更改为:

-classpath ./classes:./jogamp-all-platforms/jar/jogl-all.jar

现在,它并不是在抱怨找不到包。

第一个表单不起作用。不能使用通配符加载jar文件。第二种形式应该有效,除非您缺少依赖类。

问题是
*
被扩展到目录中的所有条目,并且类路径语法允许在您的平台上使用
分隔目录和jar文件<代码>*已展开,将包括目录中的所有JAR,并以如下内容结束:

-classpath./classes:./jogamp所有平台/jar/jogl-all.jar另一个.jar等.jar

如果在您的
/jogamp all platforms/
目录中有
jogl all.jar
另一个.jar
etc.jar
jars

您可以通过shell使用以下方法来转义
*
扩展:

-classpath./classes:/jogamp所有平台/jar/*”


这样,编译器将解释
*
扩展。

我认为您需要使用
作为路径分隔符,位于
/classes
之后,如下所示:

 -classpath ./classes;./jogamp-all-platforms/jar/*
另请注意:

子目录不是递归搜索的。例如,jogamp all platforms/jar/*只在jogamp all platforms/jar中查找jar/Class文件,而不在jogamp all platforms/jar/abcd、jogamp all platforms/jar/efc等中查找jar/Class文件。

通过执行
-classpath./classes:./jogamp-all-platforms/jar/*
,它看起来只是
jogamp-all-platforms/jar
文件夹中的所有jar


有关更多详细信息,请参阅此处的文档-。

在Debian下,我必须在通配符周围加上引号才能起作用:
“*”

然后compile命令变为:

javac -cp ~/my\ stuff/Java/"*" test.java

我正在使用JDK,JRE 8。

运行
java-version
时会得到什么?我得到了1.6版本的东西,正在检查。。。1.6.0ô我的意思是,当然我得到了一个足够晚的版本,有通配符,他们不是很久以前添加的吗?只是为了验证你是否使用了错误的jdk。我安装了3个JDK,经常遇到这样的问题problems@DudeDawg:只是想让你知道我更新了答案。请检查,如果这是有帮助的。我也尝试使用这两个;和,作为分隔符,但仍然不走运。@DudeDawg:请参阅此处的文档-。分号仅在Windows中用于分隔路径元素。几乎所有其他平台都使用冒号。它什么时候扩展,由谁扩展?你的意思不是说shell在发送给编译器之前会进行扩展,是吗?我很困惑。@DudeDawg
*
在发送到编译器之前由shell展开。您可以在命令之前插入一个
echo
,查看所有内容是如何展开的。@DudeDawg查看我关于如何通过外壳退出展开的更新答案。这是他们添加的一项新功能,可以使用通配符加载JAR。除非它实际上不起作用。@DudeDawg它起作用了,但是在你的例子中,
*
是由shell扩展的,你需要逃避它,请参阅我的更新答案。