【问题标题】:Gradle java-library-distribution custom zip name and jar location in zipGradle java-library-distribution 自定义 zip 名称和 zip 中的 jar 位置
【发布时间】:2026-01-31 07:45:01
【问题描述】:

我正在查看 java-library-distribution 插件,它几乎可以满足我的所有需求,但是我遇到了一些问题。

  • 我想控制输出 zip 文件的名称,使其变为 group-module-version-bin.zip 而不是 group-module-version.zip,我 可以控制第一位,但我似乎无法添加 bin 到生成的名称。

  • 我没有将项目 jar 拉到生成的 zip 的顶层 想把它和依赖一起放到libs目录中

  • 我想获取一些资源,但我的项目已经存在。一世 现在想尝试避免重构文件位置。如果我 将文件放在 src/main/dist 中,它们完全符合我的要求, 但是如果我在分布中指定内容 - > main 它们将被放入顶层 拉链。我尝试在内容上使用 into -> from 但这似乎 导致所有内容都移入该子目录,包括库和罐子。

我想我可以编写自己的 zip 任务,但如果我能让它工作,我会更早使用现有的插件。

感谢您的帮助。

【问题讨论】:

    标签: gradle


    【解决方案1】:

    名称末尾的“-bin”部分称为“分类器”(这是一个 Maven 术语)。您可以在 build.gradle 的 artifacts 部分中设置它:

    artifacts { yourConfigurationName distZip { classifier = 'bin' } }

    代码 'artifacts' 和 'distZip' 完全如图所示。 将“yourConfigurationName”更改为您将此包放入的任何配置的名称(由 bu​​ild.gradle 的“configurations { yourConfigurationName }”部分定义),将其上传到存储库时。

    这将产生一个 group-module-1.2.3-SNAPSHOT-bin.zip

    这已经为我工作了几个小时。我正在发布到 Artifactory,但我认为它应该适用于任何类型的上传。

    【讨论】:

      【解决方案2】:

      使用 baseName 属性,可以控制输出文件的名称:

      distributions {
          main {
              contents {
                  baseName = "Test-${project.getProperty('group')}-${project.getProperty('version')}-bin"
      

      但是,版本总是附加在末尾,结果如下: build/distributions/Test-group-4.4.0-SNAPSHOT-bin-4.4.0-SNAPSHOT.tar

      如果您可以将“bin”部分移动到名称中的其他位置,这可能会起作用。

      【讨论】:

      • 我决定说服我的同事从名称中删除 bin。 :-) 感谢您的回复
      【解决方案3】:

      我已经设法用下面的代码解决了第二和第三部分。基本上,我查看了 java-library-distributions 代码并使用分发插件对其进行了剽窃。

      distributions {
          main {
              contents {
                  into('resources/config') {
                      from { 'bin/config' }
                  }
                  into('resources/img') {
                      from { 'bin/img' }
                  }
                  into('lib') {
                      from(jar)
                  }
                  from { 'bin/xxx.bat' }
              }
          }
      }
      

      但是我关于输出文件名的问题仍然存在。

      【讨论】: