使用 javac 对同一 jar 成功编译后,java 在 jar 中找不到类

标签 java maven jar caliper

我正在看这个question在 stackoverflow 上,我想我会尝试自己运行基准测试。我下载了caliper并使用maven编译成功。然后我编译了HashCodeBenchmark从链接的问题成功使用 maven 创建的 jar 。但是,当我尝试运行 HashCodeBenchmark 时,java 提示它在 jar 中找不到入口点类。

我完全困惑了,不知道问题出在哪里。

编译:

$ javac benchmark/HashCodeBenchmark.java \
    -classpath caliper-1.0-beta-SNAPSHOT-all.jar \
    && echo success
success

运行:

$ java benchmark.HashCodeBenchmark -classpath caliper-1.0-beta-SNAPSHOT-all.jar
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/caliper/runner/CaliperMain
    at benchmark.HashCodeBenchmark.main(HashCodeBenchmark.java:64)
Caused by: java.lang.ClassNotFoundException: com.google.caliper.runner.CaliperMain
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 1 more

最佳答案

您在类名之后提供-classpath参数 - 因此它只是被传递到您的main方法。您需要在类名之前提供它,并将当前目录也包含在类路径中:

$ java -classpath caliper-1.0-beta-SNAPSHOT-all.jar:. benchmark.HashCodeBenchmark

关于使用 javac 对同一 jar 成功编译后,java 在 jar 中找不到类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24430768/

相关文章:

gradle - JavaFX 11 : Create a jar file with Gradle

java - Netbeans:创建自定义构建目标以将源打包到 JAR 中......?

java - 如何缩短嵌套的 if 表达式?

java - 仅在更改时加载属性文件

java - 如何将构造函数值传递给方法

java - 如何在svn中查找文件夹内的文件数

java - Eclipse 部署程序集未出现在属性中

java - 使用 Kotlin 开发 Eclipse 插件

java - 如何在windows平台上检查JVM运行的jar执行情况

android - ionic 重建自定义插件