【问题标题】:Recursively including jars into the classpath递归地将 jars 包含到类路径中
【发布时间】:2011-12-05 11:28:31
【问题描述】:

我有一个项目,在多个目录中包含多个第三方 JAR 文件。目前,该项目使用一些 ant 技巧将所有 jar 文件递归地包含到类路径中。我想为另一个站点构建一个部署,其中包括将我自己的代码 JAR 到一个文件中,并以某种方式包括我需要的其他 JAR。 Oracle claims 命令行上的通配符不会递归地包含 jars。我希望部署在 Windows 或 Linux 中工作。

看来我有以下选择:

  1. 在我的 JAR 中包含 ant 并运行现有脚本。
  2. 不知何故将 jar 重新组织到一个目录中,这样我就可以在我的类路径中使用通配符。希望它不会破坏第三方库。
  3. 手动创建一个又大又丑的类路径。

有人知道更简单的方法吗?我现在倾向于选择#1。

【问题讨论】:

  • 您可以将 jars 放在一个目录中,并包含一个构建类路径的脚本。
  • 如果一个 jar 依赖于它所在的位置,则该 jar 已损坏——我当然从未见过这样的事情。
  • @Dave Newton 这是 jar 清单的一个功能,请参阅 download.oracle.com/javase/tutorial/deployment/jar/downman.html
  • @Matt 他还是需要枚举主jar中的jar列表。
  • @Jagat 编辑澄清,我在回应“罐子坏了”评论

标签: java ant


【解决方案1】:

我会选择#2。构建发行版时,将所有 jar 复制到“lib”目录,然后使用通配符将它们全部包含在内。我从来不知道在做这样的事情时会破坏第三方库。 使用 ant 应该没有太多技巧:使用带有 flatten="true" 的复制并包含指示要递归的目录/jar 的文件集。

【讨论】:

    【解决方案2】:

    选项 4:目标是让您的应用只需使用

    即可启动
    java -jar your.jar
    

    主类和类路径设置在your.jarMANIFEST.MF中。在构建时使用 ant 创建类路径。这可以是 lib 中一棵又大又丑的嵌套树,也可以是一棵又大又丑的扁平树。

    有关示例,请参阅 hereherehere

    【讨论】:

      【解决方案3】:

      您可以使用JarJar 并将所有内容放在一个 JAR 文件中。您需要验证第三方许可和分发条款,以确保您可以重新打包他们的库。

      【讨论】:

        猜你喜欢
        • 2015-10-06
        • 2013-03-15
        • 1970-01-01
        • 1970-01-01
        • 2011-01-06
        • 2011-11-17
        • 1970-01-01
        • 1970-01-01
        • 2013-10-02
        相关资源
        最近更新 更多