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

时间:2012-10-30 18:19:31

标签: java classpath

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

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

但它没有找到包裹。为了确保我有资源,我手动找到包含它的jar并将类路径更改为:

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

现在不抱怨找不到包裹。

4 个答案:

答案 0 :(得分:2)

在Debian下,我必须在通配符周围加上引号才能使其正常工作:"*"

然后编译命令变为:

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

我正在使用JDK,JRE 8.

答案 1 :(得分:1)

问题是*已扩展到目录中的所有条目,而classpath语法允许在您的平台上使用:分隔的目录和jar文件。 *已展开,并将包含目录中的所有广告系列,您将结束以下内容:

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

如果您的./jogamp-all-platforms/目录中有jogl-all.jar another.jar etc.jar个罐子。

您可以使用以下内容来逃避shell的*扩展:

-classpath './classes:./jogamp-all-platforms/jar/*'

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

答案 2 :(得分:1)

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

 -classpath ./classes;./jogamp-all-platforms/jar/*

另请注意:

Subdirectories are not searched recursively. For example, jogamp-all-platforms/jar/* looks for JAR/Class files only in jogamp-all-platforms/jar, not in jogamp-all-platforms/jar/abcd, jogamp-all-platforms/jar/efc, etc.

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

有关详细信息,请参阅此处的文档 - Wildcards in classpath

答案 3 :(得分:0)

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