【问题标题】:Intellij Idea - Java program doesn't work properly after building jarIntellij Idea - Java 程序在构建 jar 后无法正常工作
【发布时间】:2015-08-22 01:56:08
【问题描述】:

我对 java 有一个奇怪的问题 - 我在 Intellij Idea 中编程,我正在使用这个小代码对站点进行基本授权

        String authString = name + ":" + password;
        byte[] binaryData = authString.getBytes();
        String authStringEnc = new String(Base64.encodeBase64(binaryData));
        URL url = new URL(webPage);
        URLConnection urlConnection = url.openConnection();
        urlConnection.setRequestProperty("Authorization", "Basic " + authStringEnc);
        InputStream is_auth = urlConnection.getInputStream();
        InputStreamReader isr = new InputStreamReader(is_auth);

这段代码运行了几个星期,但我继续编写程序。然后昨天我看到 - 当我在 Intellij 中单击运行时程序可以工作,但是当我启动一个 .jar 文件时,此行无法完成:

        String authStringEnc = new String(Base64.encodeBase64(binaryData));

我不知道为什么,但是在执行此行时程序会停止。但是当我在 Intellij 中单击运行或调试时,一切正常。

顺便说一句。我正在将此库用于 encodeBase64:

        import org.apache.commons.codec.binary.Base64;

如果您不知道它为什么不起作用,也许您可​​以与我分享对网站进行基本授权的想法。提前致谢。

【问题讨论】:

  • 在我看来,手动处理身份验证和授权通常不是一个好主意。使用 Spring Security 等框架会容易得多,并为您提供久经考验的解决方案。

标签: java intellij-idea jar


【解决方案1】:

您需要将Apache Commons Codec jar 添加到您的classpath when you run the jar file。您应该确保您在 IntelliJ 中添加的任何其他 jar 文件/库也在类路径中。

【讨论】:

  • 可能是你的意思,但我怎么能把 jar 添加到我的类路径中呢?在 Intellij 中,我使用了 Project Structure-> Modules->Dependeces-> added external library contains this file,但是在我通过 jar 文件启动程序而不是在 intellij 中运行后它仍然不起作用有什么办法可以使用外部库,在我的程序中没有共享这个库?我的意思是我只想要 1 个带有程序的 jar 文件
  • 我的第二个链接告诉你如何做到这一点 - 你需要从命令行运行 jar,你不能简单地双击它
【解决方案2】:

您应该使用日志记录来研究您的堆栈跟踪。可能您有一些 ClassNotFound 异常或类似的明显异常。

【讨论】:

    【解决方案3】:

    答案是: 我只需要刷新 jar 工件。我删除了旧工件并再次创建它,之后一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      • 1970-01-01
      • 2021-04-09
      • 2018-01-19
      • 2020-06-24
      • 2020-05-08
      • 2013-01-19
      相关资源
      最近更新 更多