【问题标题】:Does a .jar file need all of the classes installed on a machine to run?.jar 文件是否需要机器上安装的所有类才能运行?
【发布时间】:2020-08-31 11:44:37
【问题描述】:

.jar 文件是否需要机器上安装的所有类才能运行?例如:如果我将一个程序作为 .jar 文件分发,我是否还需要在用户的机器上安装我的所有 .class 文件?如果是这样,有没有办法将java程序作为一个文件(例如可执行文件)分发?

【问题讨论】:

  • 基于答案中的评论:为什么我会收到此消息:错误:无法找到或加载主类服务器原因:java.lang.ClassNotFoundException:服务器 ,这个问题在 SO 上被问了很多:How to fix ClassNotFoundException? this 是否有帮助作为起点?否则,可能需要有关如何构建和运行程序的更多详细信息。

标签: java jar .class-file


【解决方案1】:

这取决于您如何构建 jar。 jar 中的类可以依赖于 jar 中的其他类,和/或系统上安装的其他 jar 中的类。在后一种情况下,如果您将 jar 分发给其他用户,它们可能无法正常工作。

您需要确保您构建和分发的 jar 包含您正在使用的所有依赖项。我听说 Maven 可以在这里提供帮助。

【讨论】:

    【解决方案2】:

    这些类被编译成 .jar 文件,因此您不必在每台机器上都安装它们。是的,有一种方法可以分发可执行的 .jar 文件。

    【讨论】:

    • 如果类被编译成 .jar 文件,那么为什么我会收到此消息:Error: Could not find or load main class Server Caused by: java.lang.ClassNotFoundException: Server 每当我在不同的文件夹中运行带有类 Server 的 .jar 文件时?
    • 如果您收到 java.lang.ClassNotFoundException 错误,则您的 .classpath 文件中很可能缺少该类。
    • 我就这个问题提出了一个新问题。这是链接:stackoverflow.com/questions/63663114/…
    【解决方案3】:

    事实上,.jar 文件是一个可执行文件。您可以使用java -jar jarFile 执行它。

    您的 jar 是否包含运行该 jar 的所有类取决于您如何构建它。
    您可以将所有依赖项打包到称为 fat jar 的 jar 中,或者您可以只声明您的依赖项,然后使用 maven 或 gradle 等构建工具将您自己的类打包到 jar 中。在后一种方式中,用户可以使用相同的构建工具下载依赖项。通常后一种方式更好。

    【讨论】:

    猜你喜欢
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多