当前位置: 首页 > 面试题库 >

在Java类路径中使用通配符

贡俊
2023-03-14
问题内容

我正在运行应该执行main方法的Shell脚本:

java -classpath /path/to/app/conf/lib/nameJar* com.example.ClassTest

在这一点上,我得到这个异常:

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext
Caused by: java.lang.ClassNotFoundException: org.springframework.context.ApplicationContext
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:303)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)

这是因为弹簧罐位于另一个文件夹中。所以我更改了脚本:

java -classpath /path/to/app/conf/lib/nameJar*:/path/to/app/lib/spring* com.example.ClassTest

但是,使用此脚本无法找到com.example.ClassTest。关于这个问题有什么想法吗?

提前致谢


问题答案:

Java类路径通配符扩展不常见。

从文档:

了解类路径通配符

类路径条目可以包含基本名称通配符,这被认为等效于指定目录中所有扩展名为.jar或.JAR的文件的列表。例如,类路径条目foo /

指定名为foo的目录中的所有JAR文件。仅由*组成的类路径条目将扩展为当前目录中所有jar文件的列表。

因此,您需要指定的是:

java -classpath /path/to/app/conf/lib/*:/path/to/app/lib/*

如果仅需要特定的罐子,则需要单独添加它们。类路径字符串 接受通用通配符像nameJar**.jarspring* 等等。



 类似资料:
  • 我有一个side Gradle构建,在另一个旧Ant构建上运行一些测试。旧的ant构建中有大量库,我希望运行测试的Gradle构建在运行测试工具(在本例中为cucumber)时,在其类路径中包含这些库。然而,保持庞大的依赖项列表的同步似乎容易出错,而且将Ant构建转换为统一的Gradle构建目前还不太可能(正如我所希望的那样)。 所以,我想我可以简单地在JavaExec包装器的类路径中引用Ant构

  • 问题内容: 我想知道是否以及如何在路径定义中使用通配符。我想更深入地查找一个文件夹并尝试使用*,但这不起作用。 我想访问随机文件夹中的文件。Folderstructure是这样的: 我试过的 先感谢您! 问题答案: 我认为不可能以这种方式使用通配符。我建议您对任务使用如下方式:

  • 问题内容: 我已经使用了太多的第三方库(jar文件),所以我的CLASSPATH完全混乱了,因为我必须包括我使用的每个jar文件的路径。 我一直在想是否可以使用通配符()运算符(例如 .jar)将所有jar文件包含在文件夹中。但这似乎不起作用。还有其他方法可以缩短PC上当前看起来像文章;)的CLASSPATH吗? 问题答案: 类路径条目可以包含基本名称通配符,该通配符被认为等效于指定目录中所有扩展

  • 如何使用类路径加载csv文件?在此之前,我尝试使用FileReader加载文件,这在本地运行时工作正常,但是当部署到外部服务器时会引发像FileNotFound这样的异常。下面的代码在本地工作,但是当部署在tomcat文件夹www/[jar]上的jar抛出这个异常不幸的是,我无法提供原始代码。这是要点:

  • 问题内容: 我有一个C二进制文件,它通过JNI调用Java。我将CLASSPATH设置为somedir / *以获取somedir中的所有jar。 当我运行二进制文件时,找不到所需的类定义。当我跑步 在同一命令行中,该类已成功找到。如果我将somedir /中的所有jar都显式添加到类路径中,那么一切都很好,但这会导致 很 长的类路径,我想避免这种情况。 通过JNI执行的JVM是否支持类路径的通配

  • 问题内容: 因此,我可以很好地做到这一点: 如果存在。我也可以高兴地做到这一点: 如果类文件存在于jar的适当部分中。简单的东西。但是我无法为自己的生活做这样的事情: 存在的地方和存在的地方(当然不包含MyClass)。 我会感到愚蠢吗? 问题答案: 可能:) 基本上,这只是在类路径和jar文件中包括(当前目录)。