【问题标题】:Gradle jar task to add contents of jar files in a directoryGradle jar 任务在目录中添加 jar 文件的内容
【发布时间】:2016-07-19 23:15:33
【问题描述】:

我有一个 jar 文件目录,该目录可能是空的,或者有各种名称的 jar 文件。我想解压缩它们并将它们包含在我的胖罐中。我已经看到了 from zipTree('path') 的使用,但这似乎只适用于特定的 jar/zip 文件名。

这是我当前的 gradle 任务。

task buildSweetJar(dependsOn: classes, type: Jar) {
    baseName 'MySweetJar'
    from ([sourceSets.main.output, configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } ])
    from zipTree ('tmp_plug/*.jar') -- this doesn't work
    manifest {
        attributes (
                'Main-Class': 'my.app.SysInit',
                'Class-Path': configurations.compile.collect { it.getName() }.join(' ')
        )
    }
    exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA'
}
  1. 我想包含/解压缩整个目录的 jar 文件 知道他们的名字。这可能吗?
  2. 我想要的内容 jar 文件也位于此 jar 的类路径中。这怎么可能?

更新:

我能够学习 FileTree 以便能够遍历目录中的每个 jar。但是,我不确定如何将其添加到类路径中。

FileTree pluginFileTree = fileTree(dir: 'tmp_plug/')
from ([sourceSets.main.output, configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } ])
pluginFileTree.each {
    File pluginJarFile ->
        from zipTree (pluginJarFile)
}

【问题讨论】:

  • 一个“胖罐子”不仅仅是一个包含运行代码所需的所有罐子的罐子——我想你知道这一点吗?
  • 其实,不,我不知道。我猜我的术语不对。
  • 胖 jar 是可执行 jar 的另一个名称,您可以从命令行单独运行它。例如"java -jar your_jar_file.jar" 这是你想要做的,还是你想达到别的目的?
  • 是的,这就是我想要做的。创建 jar 的任务已经存在,我们将其用作可执行文件。但是,为了新的目的,我需要向其中添加其他项目。谢谢。

标签: java gradle jar build.gradle


【解决方案1】:

我会推荐使用 springboot 之类的框架来创建一个可运行的 jar。它将消除手动启动大量样板 gradle 代码的需要。有一个 spring-boot gradle 插件可以为你做几乎所有事情: https://docs.spring.io/spring-boot/docs/current/reference/html/build-tool-plugins-gradle-plugin.html

我不确定您是如何管理依赖项的,但是将它们存储在文件系统中并不是一个好习惯。您应该从存储库(例如 Maven Central)解决它们。我不确定你是否这样做,但问题表明你不是。

【讨论】:

  • 发帖者应该只使用 fatJar 插件。建议为可能范围很小的东西使用弹簧靴是过分的。
猜你喜欢
  • 1970-01-01
  • 2015-10-06
  • 1970-01-01
  • 1970-01-01
  • 2020-07-26
  • 2022-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多