运行位于映射的网络驱动器上的java类

时间:2011-06-24 18:42:09

标签: java unc network-share

我试图弄清楚是否可以运行位于映射网络驱动器上的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的相同错误。

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

由于

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

来自documentation

  

默认情况下,第一个非选项   argument是要的类的名称   被调用。完全合格的课程   应该使用名称。如果-jar   选项是指定的,第一个   非选项参数是a的名称   包含类和的JAR存档   应用程序的资源文件,   与启动类指示   Main-Class清单标题。

     

Java运行时搜索启动   class,以及其他使用的类   三组位置:引导程序   类路径,已安装的扩展,   和用户类路径。

因此,您无法提供p:\Test作为参数。而是将当前工作目录更改为p:\,然后执行java Test

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

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