1

尝试基于 ChronicleMap API 执行 myApp:

java -jar myApp-00.00.01-SNAPSHOT-jar-with-dependencies.jar

并得到例外。

Exception in thread "main" java.lang.AssertionError: java.lang.ClassNotFoundException: com.sun.tools.javac.api.JavacTool
    at net.openhft.chronicle.values.CompilerUtils.reset(CompilerUtils.java:62)
    at net.openhft.chronicle.values.CompilerUtils.<clinit>(CompilerUtils.java:51)
    at net.openhft.chronicle.values.ValueModel.createClass(ValueModel.java:348)
    at net.openhft.chronicle.values.ValueModel.createHeapClass(ValueModel.java:327)
    at net.openhft.chronicle.values.ValueModel.heapClass(ValueModel.java:317)
    at net.openhft.chronicle.values.Values.heapClassFor(Values.java:68)
    at net.openhft.chronicle.values.Values.newHeapInstance(Values.java:37)
    at com.twi.lib.ev.ipc.VTORId.<clinit>(VTORId.java:189)
    at com.twi.lib.ev.ipc.Ipc.initialize(Ipc.java:294)
    at com.twi.lib.ev.base.Preferences.areRequiredPreferencesSet(Preferences.java:356)
    at com.twi.lib.ev.base.ApiEv.autoinitialize(ApiEv.java:48)
    at com.twi.demo.ev_examples.Main.main(Main.java:116)
Caused by: java.lang.ClassNotFoundException: com.sun.tools.javac.api.JavacTool
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at net.openhft.chronicle.values.CompilerUtils.reset(CompilerUtils.java:58)
    ... 11 more

这是我的配置:

安装操作系统:Windows 10

已安装 Java:JDK 1.8.0_131

Java 路径:C:\Program Files\Java\jre1.8.0_131\bin\javaw.exe

ChronicleMaps 测试:3.10 - 3.13 - 所有这些版本的相同问题

MyApp 在 Netbeans 8.2 下运行良好,但如果尝试在命令窗口和命令中运行,总是会出现此异常:

java -jar myApp-00.00.01-SNAPSHOT-jar-with-dependencies.jar

怎么了?

缺少 jar 库 JavacTool ?兼容性?编年史地图中的错误?

感谢您为使用命令运行 myApp 提供的任何输入:

java -jar myApp.jar
4

1 回答 1

1

得到它的工作。以下是其他人在 Windows 和 java 配置方面遇到困难的情况。

如果您想以标准的 java 方式运行您的 jar 应用程序(使用 ChronicleMap API) - 例如:

java -jar myApp.jar

您必须确保您执行的“java”是 JDK java 而不是 JRE java。

这意味着您和您的应用程序。用户需要在您的系统上安装 JDK 并进行配置,以便使用 JDK java,而不是 JRE java。

我从一开始就很清楚,我以为我的系统正在运行 JDK java,但事实并非如此。这是我解决它的方法。

在 Windows 中(安装 JDK 之后),您可能在系统环境变量中指定了多个位置/文件夹作为 java.exe 的 PATH。

就我而言,我有 3 个对 java 的引用。您可以从命令行检查:

where java

我的结果是:

C:\Program Files\Java\jre1.8.0_131\bin
C:\Program Files\Java\jdk1.8.0_131\bin
C:\ProgramData\Oracle\Java\javapath

根据其他人的建议,我添加了:JAVA_PATH 变量并将其指向:C:\Program Files\Java\jdk1.8.0_131

但这并没有解决问题,我仍在运行 JRE,而不是 JDK java。

我还检查了 Java 控制面板(开始菜单项中的“配置 Java”)。首先请注意,您必须以管理员身份运行它,否则不会有任何更改 - 这就是 Oracle 所说的。但对我来说,重启后设置都恢复为默认值,我的所有更改都消失了。

如果它对您有用,请执行以下步骤:

  • Windows 开始菜单
  • 右键单击“配置 Java”
  • 更多 > 以管理员身份运行
  • 输入您的管理员。密码(如果您没有看到密码窗口,请在任务栏上查找图标)
  • 将出现 Java 控制面板
  • 选择选项卡:Java
  • 点击:查看
  • 选择选项卡:系统
  • 单击:查找并导航到您的 java JDK 文件夹 - 例如:C:\Program Files\Java\jdk1.8.0_131\bin
  • 点击下一步
  • 你会看到:C:\Program Files\Java\jdk1.8.0_131\bin\javaw.exe
  • 点击:完成
  • 启用添加的条目复选框并禁用所有其他
  • 好的好的

现在,这应该指定我对 JDK java 优于 JRE java 的偏好。但它没有。

所以,最后我删除了我的 PATH - Windows 系统环境变量中对 java 的所有引用,除了 JDK 的一个:C:\Program Files\Java\jdk1.8.0_131\bin

做到了。

于 2017-05-05T14:31:09.653 回答