【问题标题】:Java distribuion as jar file containg config, libs and depsJava 分发为 jar 文件,包含 config、libs 和 deps
【发布时间】:2010-02-26 07:57:52
【问题描述】:

我正在开发一个需要很多东西才能工作的框架。我的 Eclipse 项目中有几个需要的文件夹

[root]
- config
- src
- lib
- serialized

还有一些重要的文件,例如 src 目录中的 log4j.propertiesMETA-INF 目录。

我想知道是否有一种方法可以分发一个包含所有基本文件的 JAR,这样我的 gui 只需导入一个 jar。我想我必须排除 config 文件夹才能使框架可配置。

我还想知道,是否有一种方法可以将 log4j.properties 移动到 config 目录,以便我有一个包含所有需要配置的配置文件夹?

感谢您对此事的帮助和建议!

马可

【问题讨论】:

  • 使用 Ant 或 Maven 来构建您的项目和编译路径并创建所需的所有依赖项的 jar。 Ant 或 Maven 将为您完美地 JAR。
  • 合并依赖 jar 文件可能很复杂,例如,如果它们依赖于 META-INF 中的数据。

标签: java configuration jar distribution


【解决方案1】:

是的,但不是真的。您可以获取所有依赖项,解压缩它们,然后简单地将它们合并到一个更大的 jar 中。如果您制作一个带有依赖项的 jar,这就是 maven jar 插件所做的事情。唯一的问题是这可能会导致文件冲突(假设您的两个依赖项包含 log4j.properties)。例如,使用某些 spring 库执行上述操作时,这是问题之一。

我认为实际上有人编写了一个类加载器,它允许您将整个 jar 捆绑到您的 jar 中并按原样使用它。我不确定这有多成熟,现在想不起这个名字。

我认为最好分开分发所有依赖项。设置类路径有点痛苦,但 Java 程序员现在肯定已经习惯了。在简单的情况下,您可以将依赖项添加到 Class-Path header in your manifest file。不过,更大的库必须依赖为它们设置的类路径。

至于您问题的第二部分,可能将 conf/ 目录放在 META-INF 下就足以获取其内容。我不确定。我敢肯定,如果你把它的内容放在罐子的顶层,它总是会被捡起来的。无论如何,这是一个分布问题。您可以轻松地在源代码树中拥有一个 conf/ 目录,并让您的构建脚本(无论您使用什么)将其中的文件复制到最方便的位置。

至于您的用户配置。尝试建立一些约定,以便他们必须尽可能少地配置。对于必须配置的东西,最好有一个基本的默认配置,然后允许用户通过他/她自己的配置文件覆盖和添加选项。

【讨论】:

    【解决方案2】:

    就资源而言,有可能,但如果这样做,您将无法从文件系统(通过文件路径)加载资源(非类文件)。

    您当前可能正在从文件系统加载这些资源。进入 jar 后,您需要通过 class.getResourceAsStream 或类似方法将它们作为类路径资源加载。

    对于您可能拥有的依赖 jar,通常的做法是将它们作为额外的 jar 放置在类路径中。我知道这会使事情变得复杂,但开发人员已经习惯了这样做。 Java 环境的本质是这是不可避免的。例如,spring 框架所做的是提供一个捆绑的 zip 文件,其中包含核心 jar 和 jar 依赖项。

    您的库将用于 EE 环境还是 SE 环境?如果它是 EE 上下文,那么您真的不必担心配置和类路径问题,因为容器会处理这些问题。在 SE 环境中,这要复杂得多,因为这项工作必须手动完成。

    【讨论】:

      猜你喜欢
      • 2022-01-13
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-08
      • 1970-01-01
      • 2015-11-20
      • 1970-01-01
      相关资源
      最近更新 更多