gpt4 book ai didi

java - 使用自己创建的jar文件时出现ClassNotFoundException

转载 作者:行者123 更新时间:2023-12-01 11:19:27 25 4
gpt4 key购买 nike

我使用 Eclipse 创建了一些解析器类,我想将其作为 jar 存档提供给另一个项目以进行验证。所以解析器项目看起来像这样:

ParserProject
- src
-- com.package.x
--- ClassA
--- ClassB
- lib
-- external1.jar
-- external2.jar

ClassAClassB使用外部 jar 文件,例如 Jackson 或一些 Apache commons。为了向另一个项目提供功能,我将整个项目导出为 jar 存档和可执行 jar 存档(右键单击项目 > 导出... > Java > JAR 文件 > 选择所有文件并“导出生成的类文件和资源” > 完成)。

jar 文件已创建,没有任何错误。当我使用parserproject.jar时在我的验证项目中,我可以使用自动完成访问所有方法,但是当我运行验证项目时,我得到 java.lang.ClassNotFoundException: com.fasterxml.jackson.core.JsonParseException

现在三个奇怪的事情:

  1. 所有 jackson jar 都包含在解析器项目中。此外,我可以运行 main()解析器项目中的方法,一切正常,没有 ClassNotFoundException发生。

  2. 当我添加parserproject.jar时添加到类路径中的验证项目并在 Package Explorer 中打开 jar 存档,parserproject.jar 似乎包含它需要的所有 jar。

  3. 对于可执行 jar 存档,所有必需的外部 jar 都包含在 MANIFEST.MF 中。 (Package Explorer > 验证项目 > 引用的库 > + 除了 parserproject.jar > META-INF > MANIFEST.MF)。它看起来像这样:

Manifest-Version: 1.0 Rsrc-Class-Path: ./ json-20140107.jar jackson-annotations-2.5.4.jar ja ckson-core-2.5.4.jar jackson-databind-2.5.4.jar commons-io-2.4.jar co mmons-validator-1.3.1.jar slf4j-api-1.7.5.jar slf4j-log4j12-1.7.5.jar json-schema-validator-2.2.6.jar jackson-module-jsonSchema-2.4.4.jar juniversalchardet-1.0.3.jar snakeyaml-1.15.jar commons-beanutils-1.7. 0.jar commons-digester-1.6.jar commons-logging-1.0.4.jar joda-time-2. 8.1.jar jopt-simple-4.6.jar jsr305-3.0.0.jar json-schema-core-1.2.5.j ar libphonenumber-6.2.jar jackson-coreutils-1.8.jar commons-lang-2.6. jar guava-16.0.1.jar msg-simple-1.1.jar btf-1.2.jar mailapi-1.4.3.jar uri-template-0.9.jar Class-Path: . Rsrc-Main-Class: com.package.SchemeValidator Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader

  • 当且仅当我在验证项目中使用生成的 jar 文件时,才会出现异常。万一我摆脱了 parserproject.jar并定义对 ecplise 解析器项目的依赖项(右键单击验证项目 > 属性 > Java 构建路径 > 项目)我没有得到 ClassNotFoundException .
  • 所以现在我的问题是,我应该如何导出 jar 以便找到每个类。谢谢!

    最佳答案

    Eclipse 在生成 .jar 时仅处理编译时依赖项

    由于您生成的 .jar 几乎可以移动到任何地方,因此在执行期间必须再次存在依赖项。

    您有两个选择:

    1. 使用 -jar 执行你的 jar选项,同时保留所有同一文件夹中的依赖项。由于您的 list 使用“./”作为 classpath ,这意味着所有依赖项必须位于您执行 jar 的同一目录中。 注意类路径是相对于您正在执行的目录,而不是文件所在的目录。
    2. 在不使用 -jar 的情况下执行您的 jar选项,并指定-cp选项指向依赖项,并指定主类。

    java -cp "<path to your jar>;<path to dependency 1>;<path to dependency 3>[;...]" <your main class>

    关于java - 使用自己创建的jar文件时出现ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31432601/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com