【问题标题】:How external libraries work外部库如何工作
【发布时间】:2013-06-14 22:45:49
【问题描述】:

我只是想了解外部库在 java 中的工作方式。我所看到的所有地方都不清楚。

通常,我理解使用外部库涉及将类路径设置为所需的类、JAR 等。

我的问题是(如果我要将我的项目构建到 JAR 中)如果它可以在另一台计算机上使用,它如何能够访问该库?外部 JAR 是否会包含在 MY JAR 文件中?不然怎么访问外部JAR?

例如如何与 bukkit 插件一起使用,插件如何知道在哪里引用 bukkit.jar 文件?

【问题讨论】:

  • 复制所有的罐子(只要它的许可证允许)。

标签: java jar libraries


【解决方案1】:

每个 jar 都有一个清单文件。在那里你可以参考罐子外的其他罐子。这些将包含在您的类路径中。 You can see how to do that here. 例如,您可以将其放入清单文件中:

Class-Path: jar1-name jar2-name directory-name/jar3-name

正如您在此处看到的,它使用相对路径。如果它们是绝对路径,它们会说类似C:\...\jar1-name。使用相对路径意味着,只要 jar 与主 jarrelative 保持在同一位置,此代码就会正确运行。

或者,您可以提供一个脚本来运行 java 命令并在类路径中包含您需要的所有 jar。

对于另一种选择,您可以使用名为 uberjar 的东西,它将所有这些东西放在一个 jar 中,然后您可以分发它。

对于另一种选择,您可以使用 jar classloader 从嵌入式 jar 加载类。


为了教育起见,您可能想查看my answer here,它描述了许多分发 Java 应用程序的方法。

【讨论】:

  • 虽然,当在清单文件中引用 JAR 时,如果程序位于不同的计算机或目录上,类路径会不会与原始路径不同?
  • @jsne10 是的,可以。所以最好用相对路径引用外部jar。那样的话,有人将不得不努力按照您描述的方式破坏事物。他们不得不移动罐子。 java 命令也会发生同样的事情。
  • 相对路径是什么意思?你能举个例子吗?
  • 啊,现在我明白了,我感到困惑的原因是我认为所有的类路径都必须是绝对的。感谢你的回答。对我帮助很大。
【解决方案2】:

.Jar 文件只不过是额外的代码行或完整的程序。如果要包含它们,则必须将它们添加到构建路径和/或项目中。添加后,您可以引用它们并使用它们。

如果您要创建一个.Jar 文件或库,您使用的所有内容都将包含在内。添加库时,它会添加到项目中,因此,当您发布项目时,它会包含在您的程序中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2018-11-15
    相关资源
    最近更新 更多