【问题标题】:Running java code on VMWare with references to external jar files在 VMWare 上运行 java 代码并引用外部 jar 文件
【发布时间】:2011-05-09 15:33:55
【问题描述】:

我正在尝试在 VMWare Workstation 上运行简单的 java 代码。我有以下简单的测试主文件:

import cern.jet.random.engine.RandomSeedGenerator;;

public class TestDataService {

    //private static Logger logger = Logger.getLogger(TestDataService.class);
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        System.out.println("Hello World DAI!");

        // Input some data.
        RandomSeedGenerator re = new RandomSeedGenerator();
        return;
}
}

RandomSeedGenerator 是 colt.jar 库中的一个类,我的 lib 文件夹下有 jar 文件。

我正在使用 ant 构建项目,并且我有以下清单文件,我在其中设置了类路径:

Manifest-Version: 1.0
Main-Class: edu.umass.TestDataService
Name: edu/umass/TestDataService/Version.class
Class-Path: lib/colt.jar

当我从运行 Red Hat Linux 的 VMWare shell 运行代码时,我得到了这个异常:

[root@localhost] java -jar app.jar

Hello World DAI!
Exception in thread "main" java.lang.NoClassDefFoundError: cern/jet/random/engine/RandomSeedGenerator
at edu.umass.TestDataService.main (Unknown Source)
Caused by: java.long.ClassNotFoundException: cern.jet.random.engine.RandomSeedGenerator

最后一点,在带有 Eclipse 的 Windows 上一切似乎都可以正常工作,但在虚拟机上似乎没有任何工作。有什么想法吗?

【问题讨论】:

  • 如果你尝试 java -classpath .:lib/colt.jar -jar app.jar 会怎样?
  • 不,它不起作用——只是再试一次。当我在互联网上搜索时,它说如果你运行一个 jar 文件,你应该在清单文件中指定类路径,它会忽略环境变量 $CLASSPATH 以及命令行中明确指定的 -classpath——尽管我这样做了不知道这个信息有多可靠。
  • 我认为清单中的类路径条目仅添加在您尝试运行的 jar 文件中打包的 jar 中。如果 jat 是外部的,我认为您必须将条目从清单文件中删除并将其添加为 -classpath 参数
  • 有趣!在从清单文件中删除类路径之后,我实际上只是尝试按照您的建议明确设置类路径。不工作!非常感谢你的想法!
  • jar -tvf lib/colt.Jar 给你什么?你能看到那里缺少的班级吗?

标签: java jar classpath vmware vmware-workstation


【解决方案1】:

您是否在虚拟机上安装了应用程序所需的 jar 文件?

您是否正确配置了 CLASS_PATH?

【讨论】:

  • 是的,所有文件都在虚拟机的文件系统中。我尝试了不同的变体来配置 CLASSPATH。 1)如上所述使用清单文件 2)通过在我的 .bashrc 文件中设置环境变量 3)通过在命令行上显式指定它,如下所示 java -classpath lib/colt.jar -jar app.jar 它们都不起作用我。
【解决方案2】:

我怀疑 jvm 或 vm 是否存在问题。问题将在于您如何运行课程。具体来说,您如何设置类路径。试试这个:

导航到放置 colt.jar 的位置。通过输入 pwd 获取当前工作目录。使用它来使用 colt.jar 的绝对路径构造运行命令。

所以最终你应该(从包含你的 jar 的目录)运行类似这样的东西:

java -cp /the/full/path/to/lib/colt.jar -jar app.jar

一旦你完成了这项工作,你就可以尝试找出正确的相对路径是什么。然后你就可以做

java -cp a/relativel/path/to/lib/colt.jar -jar app.jar

【讨论】:

  • 我也尝试了完整路径。它似乎不适用于 jar 文件的完整路径。同样的错误!
  • @Huseyin Oktay。好吧,让我们排除一些简单的事情。解压colt.jar,看看cern/jet/random/engine.RandomSeedGenerator是否在里面。
  • jar tvf lib/colt.jar | grep RandomSeedG 1140 Thu Sep 09 20:36:24 EDT 2004 cern/jet/random/engine/RandomSeedGenerator.class 是的,该类在 jar 文件中。
  • @Husseyin Oktay。那么尝试将 colt.jar 移动到与 app.jar 相同的目录,看看它是否有效(记得修改类路径。)我确定你的类路径有一些根本性的错误。
猜你喜欢
  • 2013-06-08
  • 2018-02-23
  • 2017-07-09
  • 2018-05-02
  • 1970-01-01
  • 2015-05-17
  • 2011-09-18
  • 2011-02-24
  • 2011-08-18
相关资源
最近更新 更多