【问题标题】:java -jar is not able to read classpath from manifest file resulting in NoClassDefFoundError errorjava -jar 无法从清单文件中读取类路径,导致 NoClassDefFoundError 错误
【发布时间】:2013-05-28 08:18:26
【问题描述】:

我的 MANIFEST.MF 文件看起来像 this

我的 main() 打印类路径 -

  ClassLoader cl = ClassLoader.getSystemClassLoader();

        URL[] urls = ((URLClassLoader)cl).getURLs();

        for(URL url: urls){
            System.out.println(url.getFile());
        }

我正在运行 jar 文件 -

java -jar "C:\Project-1.0-SNAPSHOT.jar"

当我运行 jar 文件时,我看不到清单文件中设置的任何类路径。我只看到C:\Project-1.0-SNAPSHOT.jar 的绝对路径。为什么呢?显然代码由于java.lang.NoClassDefFoundError错误而无法运行

注意我使用maven-jar-plugin创建这个jar文件

【问题讨论】:

  • 同样的问题,你找到解决办法了吗?

标签: java classpath manifest manifest.mf maven-jar-plugin


【解决方案1】:

希望您在清单文件的最后一行末尾有换行符。如果没有,则在 Manifest.mf 的最后一行之后添加换行符

【讨论】:

  • @user375868 你确定 jars 路径中的 dependency-jars 工作正常吗?尽量放绝对路径。
  • 问题是当我通过 java -jar 运行时,清单中提到的“类路径”没有被读取。
  • @user375868 我认为问题在于路径不正确或不通用,无法从任何地方引用。当你使用 java -jar 时,它不会理解与 maven 相关的dependency-jars/xxx.jar 路径。所以需要更新manifest来提供路径,java可以正确引用。因此,我在之前的评论中说过,尝试在清单类路径变量中给出 jar 的绝对路径。
  • 我正在关注这个例子 - mkyong.com/maven/how-to-create-a-jar-file-with-maven - 它应该可以工作,对吧?
  • @user375868 所以当你分解你的 jar 时,你的类路径中提到的 jar 是否在目录 dependency-jars 下?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-30
  • 2015-11-20
  • 2018-01-18
  • 1970-01-01
  • 2010-10-18
  • 1970-01-01
相关资源
最近更新 更多