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

时间:2014-06-26 12:38:07

标签: java maven jar caliper

我在stackoverflow上查看了这个question并认为我会尝试自己运行基准测试。我下载了caliper并使用maven成功编译了它。然后,我使用maven创建的jar成功地从链接的问题编译了HashCodeBenchmark。但是,当我尝试运行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

1 个答案:

答案 0 :(得分:3)

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

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