【问题标题】:Running a java class that is located on a mapped network drive运行位于映射网络驱动器上的 java 类
【发布时间】:2011-06-24 18:42:08
【问题描述】:

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

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

谢谢

【问题讨论】:

  • 请发布错误。找不到的类可能不是您首先尝试运行的类。它可能只是一个依赖项。
  • 找不到哪个类?为什么不把cd 放到网络驱动器上的文件夹中?
  • 我粘贴了错误。我希望能够运行一个驻留在 UNC 共享上的 java 类。由于我遇到了关于找不到类的错误,我想看看是否可以将网络驱动器映射到该共享位置并以这种方式运行 java 类。不幸的是,这也不起作用。但正如马特指出的那样,可以 cd 进入目录并运行它。我的初衷是有一个公共的暂存区,java 类在其中生活并通过网络共享从多台 Windows 机器上运行它们。

标签: java unc network-share


【解决方案1】:

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

例子:

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

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

假设你的 Test 类没有被声明为在任何包中,你需要在类路径中指定目录:

java -cp Z:\path Test

【讨论】:

  • 换句话说,您提供给java 命令的不是路径或文件名,而是完全限定的类名。
【解决方案2】:

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

来自documentation

默认情况下,第一个非选项 参数是类的名称 被调用。完全合格的班级 应使用名称。如果 -jar 选项被指定,第一个 非选项参数是一个名称 JAR 档案包含类和 应用程序的资源文件, 启动类由 Main-Class 清单标头。

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

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

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

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

【讨论】:

    猜你喜欢
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多