【问题标题】:How do I pass an additional jar do my java command when running application?如何在运行应用程序时传递一个额外的 jar 来执行我的 java 命令?
【发布时间】:2019-01-27 22:11:05
【问题描述】:

我有一个 java gradle projectA,它引用了另一个 java gradle projectB,它构建为一个 lib。

我的 gradle 构建配置似乎很好,因为我可以从其他项目导入和使用类,并且它可以编译。但是当我尝试从命令行运行应用程序时,我得到一个错误...

线程“主”java.lang.NoClassDefFoundError 中的异常: DawCLI.main(DawCLI.java:17) 上的 dawcore/SamplerInstrument 原因: java.lang.ClassNotFoundException:dawcore.SamplerInstrument 在 java.net.URLClassLoader.findClass(URLClassLoader.java:382) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:424) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 1 更多

似乎在抱怨它无法在运行时加载 jar 中的类....这是有道理的。但我不知道如何让它成功加载这些类。

我当前没有引用jar的运行命令如下....

/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/bin/java -ea -cp "build/classes/main/" DawCLI

运行它会给出最初提到的错误。

然后我阅读了有关 java -cp 参数的文档。它说要提供额外的类路径目录,用分号分隔它们。

我随后将我的运行命令更新为如下......

/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/bin/java -ea -cp "build/classes/main/;../DawCore/build/libs/DawCore.jar" DawCLI

这给了我以下错误....

错误:无法找到或加载主类 DawCLI

我的主要功能如下..

import dawcore.*;

public class DawCLI {
    public static void main (String [] args) throws IOException {
        SamplerInstrument samplerkick = new SamplerInstrument();
    }
}

根据文档,我似乎正确地执行了此操作,但仍然出现错误。对此的任何见解将不胜感激!

谢谢

【问题讨论】:

  • DawCLI 是在包中还是默认(无)包中?
  • 默认无包。

标签: java gradle runtime-error classpath


【解决方案1】:

解决方案是用冒号代替分隔分号。尽管 javadocs on -cp 命令的第一行表明您应该使用分号。

这可能是因为我在 linux 上运行并且那些文档指示 Windows。

https://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html

【讨论】:

  • 那是因为 unix 文档在一个单独的页面上:docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
  • 如果您想将我的答案和您的评论合并为一个答案,我会将您的答案标记为答案。
  • 您可以将自己的答案标记为正确,这真的没什么大不了的。
猜你喜欢
  • 2012-04-15
  • 2012-11-19
  • 2021-04-08
  • 2011-08-30
  • 2021-11-10
  • 1970-01-01
  • 2022-11-15
  • 2011-02-19
相关资源
最近更新 更多