【问题标题】:How to package dependencies into output jar?如何将依赖项打包到输出 jar 中?
【发布时间】:2015-11-24 07:14:12
【问题描述】:

我试图让我的应用程序在一个独立的 jar 中工作。问题是,为我的程序生成了一个 jar,并为这些库生成了一堆其他 jar。有什么办法可以让这些罐子进入其中吗?如果有帮助,我正在使用 Gradle。

IntelliJ IDEA 工件配置:

输出目录:

我期望(和希望)发生的事情:

【问题讨论】:

  • 为我想要的结果添加了一张图片。
  • stackoverflow.com/questions/4871656/… 将此称为 uberjar 或 fatjar。使用 maven 这被称为阴影 jar。
  • 不要将所有的 jar 合并到一个胖 jar 中,只需将它们全部放在同一个文件夹中并增强清单以指定类路径,因此当您使用 java -jar 运行时它们都会被加载。
  • @Andreas 我想将我的软件作为备用文件发布。这样就简化了下载过程。它确实适用于将所有罐子展开,但这不是我想要做的。
  • 这个好像不能正常做:stackoverflow.com/questions/12357136/…

标签: java intellij-idea gradle jar


【解决方案1】:

您需要一个 fat-jar(其中包含所有依赖项的 jar 文件)。对 Gradle 来说问题不大,你只需要多做一个 jar 类型的任务,它会收集所有的依赖并一起压缩

有很多例子,你怎么做,here is one of them。仔细看看任务 fatJar:

task fatJar(type: Jar) {        
  baseName = project.name + '-all'
  from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
  with jar
}

【讨论】:

  • 我以前从未使用过 Gradle 进行构建,它只是默认情况下执行 IntelliJ IDEA 所做的任何事情。
  • 我不确定这是不是 Idea 的默认行为,因为它不是 Gradle 的标准行为。唯一的想法是调用 gradle 脚本。此外,它会将所有依赖项放在一个 jar 中,但它们会被解压缩
  • 您可以配置在 IDEA 中构建东西的方式,我没有看到关于我在 build.gradle 中配置的特定构建东西的任何信息
  • 好的,现在我明白了,你不使用你的 gradle 脚本来打包 artfacts,很好。但无论如何,不​​确定是否可以按照你的意愿去做,因为你需要一个特定的类加载器,看看这里stackoverflow.com/questions/183292/…
  • 那么,如果您只需要一个 jar,为什么不尝试将解压缩的类添加到 jar 的根目录中呢?我很确定,不仅可以使用 maven 或 gradle,还可以使用 Idea。
猜你喜欢
  • 2014-10-13
  • 2014-06-26
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-31
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
相关资源
最近更新 更多