【问题标题】:java / NoClassDefFoundError error at runtime onlyjava / NoClassDefFoundError 仅在运行时出错
【发布时间】:2023-04-07 09:03:01
【问题描述】:

我在包含一个 JAR 文件时遇到了问题,该文件添加了一个让我的主类发送电子邮件的类。

我做了什么……

  • 将 EmailAPI.jar 文件保存在我的文件夹中,如下面的 POM 文本中所述(它找到了它,因为在 NetBeans 中我可以探索该类)
  • 更新了我的POM文件中的依赖,如下:

    <dependency>
        <groupId>EmailAPI</groupId>
        <artifactId>EmailAPI</artifactId>
        <version>1.0</version>
        <scope>system</scope>
        <systemPath>${basedir}\src\lib\EmailAPI.jar</systemPath>
    </dependency>
    
  • 添加导入(NetBeans 在我使用 Email 类时自动添加了这个,所以它似乎知道在哪里看......)

    导入我.nrubin29.emailapi.Email;

  • 调用类,直接使用提供的结构

    //send an email
    new Email()
            .withSMTPServer("smtp.gmail.com")
            .withUsername("xxxxx@gmail.com")
            .withPassword("xxxxxxx")
            .withTo("xxxxx@gmail.com; xxxxx@gmail.com")
            .withSubject("[RP] Server has started")
            .withBody("This is the body!")
            .send();
    

我可以很好地构建,一切正常...但是当我尝试运行它(作为 Minecraft 的插件)时,我得到一个 NoClassDefFoundError,如下所示: http://pastebin.com/V33gCLVG

我不明白我在这里缺少什么。谁能指出我正确的方向?

【问题讨论】:

    标签: java maven netbeans error-handling runtime-error


    【解决方案1】:

    EmailAPI 需要两个 JAR 才能运行。我认为它们是激活和邮件之类的。我可以看看这个项目,但我想你可能会错过它们。

    【讨论】:

    • 我已将邮件和激活作为依赖项添加到我的项目中,但 EmailAPI 没有找到它们。在 EmailAPI 中打开类路径文件,我发现了这个... pastebin.com/taAhmxK1 ... 那么这对运行时意味着什么?我需要在我的插件文件夹中创建 /src/lib 并将 mail/activation.jar 放在那里吗?
    • 我已经尝试将它放在与我的 minecraft jar、我的插件 jar 相关的任何地方......同样的错误。 EmailAPI 找不到它的依赖项。
    【解决方案2】:

    这意味着您在运行时环境中缺少 jar。您可能需要更改 maven 依赖项的范围才能编译。

    【讨论】:

    • 我在上面的回复中添加了 cmets,你能想到什么可能有帮助的吗?
    【解决方案3】:

    您使用&lt;scope&gt;system&lt;/scope&gt;。它在 Minecraft 环境中可用吗?见Maven, Introduction to the Dependency Mechanism, Dependency Scope“这个范围类似于provided [...]”并且在提供下:“表示你期望[...]一个在运行时提供依赖的容器。”

    【讨论】:

    • 不可用;我也可以从这里的其他问题中看到范围/系统是我的问题。看来“编译”范围是我需要的。我只是对应该将实际依赖项 JAR 放在哪里感到困惑......:-/
    • 在本地 Maven 存储库中。默认为${user.home}/.m2/repository 或根据&lt;localRepository&gt; 开头的settings.xml创建EmailAPI.jar了吗?与mvn install?有了这个,它就会被 Maven 自动放在那里。
    • 好的,尝试通过网络上的一些提示安装它,这是输出...再试一次pastebin.com/0aqLBDgC
    • 编译成功!现在需要把所有人都踢出我的服务器,这样我才能重新启动并测试运行时...交叉手指...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 2020-08-16
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多