0

我试图弄清楚是否可以运行位于映射网络驱动器上的 java 类。一个例子是:

C:\temp\groovy>java p:\Test
Exception in thread "main" java.lang.NoClassDefFoundError: p:\Test
Caused by: java.lang.ClassNotFoundException: p:\Test
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: p:\Test.  Program will exit.

在尝试这个之前,我想看看我是否可以运行一个位于 UNC 共享 (java \\somehost\share\Test) 上的 java 类文件。这也不起作用 - 关于未找到类 def 的相同错误。

我做错了什么还是真的不支持?

谢谢

4

2 回答 2

3

当您将路径作为类名的一部分提供时,Java 期望它位于与其所在的文件夹层次结构相对应的包中。

例子:

> java z:/Test
java.lang.NoClassDefFoundError: z:/Test
Caused by: java.lang.ClassNotFoundException: z:.Test

在这里,它正在寻找“z:.Test”作为完全限定的类名。

假设您的 Test 类未声明为在任何包中,您需要在类路径中指定目录:

java -cp Z:\path Test
于 2011-06-24T18:53:10.623 回答
1

java 启动器接受一个类作为第一个非选项参数,用于定位要调用的主方法。

文档中:

默认情况下,第一个非选项参数是要调用的类的名称。应使用完全限定的类名。如果指定了 -jar 选项,则第一个非选项参数是包含应用程序的类和资源文件的 JAR 归档的名称,启动类由 Main-Class 清单头指示。

Java 运行时在三组位置搜索启动类和其他使用的类:引导类路径、已安装的扩展和用户类路径。

因此,您不能提供p:\Test作为论据。而是将当前工作目录更改为p:\,然后执行java Test

您可以使用批处理脚本来更改目录,而无需手动执行此操作。或者,您可以将类打包成 JAR 文件(带有所需的清单),并提供-jar选项以指定 JAR 文件的绝对路径到java可执行文件;如果您不想管理太多的类文件,这是首选。

编辑:您还可以使用-cp@Dave Costa 指定的标志。这将使您无需更改当前目录。

于 2011-06-24T18:53:09.080 回答