Gradle的Maven Assembly插件对应物是什么?

9

我在项目中使用汇编Maven插件,以便将Jars、procrun可执行文件和一些脚本从src/main/scripts/文件夹打包到单个zip文件中。如何在Gradle中实现这一点? 我看过Gradle交付和应用程序插件,但我无法正确配置它们。


您想要做什么?能否提供一些样例输入和期望输出? - Opal
这并不能提供太多信息。 - Opal
1
@Opal 我有一些文件在 src/main/scripts/ 目录下。这里有 *.exe, *.sh, *.bat 文件。Maven 处理它们,将变量转换为 ${project.build.finalName}.${project.packaging},然后创建包含 bin/,lib/,conf/ 文件夹的归档文件。bin/ 包含具有 0744 权限的脚本和 exe 文件,lib/ 包含我的项目及其依赖项的 jar 文件,conf/ 包含来自 src/main/resources/ 的文件。 - glebiuskv
2个回答

10

使用Maven汇编可以轻松替换Gradle的distribution plugin。配置由两部分组成。

配置分发

配置的第一部分是声明分发内容:

apply plugin: 'distribution'

distributions {
  main {
   baseName = project.name
    contents {
      into('lib/') {  // Copy the following jars to the lib/ directory in the distribution archive
        from jar
        from configurations.runtimeClasspath
        dirMode = 0755
        fileMode = 0644
      }
      from('src/main/dist') {  // Contents of this directory are copied by default
        dirMode = 0755
        fileMode = 0644
      }
    }
  }
}

这个contents部分只是一个示例。根据您的项目,您可能希望在此处执行不同的操作。配置选项的描述可以在AbstractCopyTask和其实现的接口的Javadocs中找到。

位于src/main/dist中的文件会自动添加到发布中,即使在发布中没有相应的from语句。第二个路径元素必须与发布的名称匹配(例如我的示例中为main)。我在示例中列出了该目录,因为我需要在复制的文件上设置fileModedirMode属性。

过滤文件

使用AbstractCopyTask中定义的filter()方法之一也可以进行文件过滤。

下面的示例使用ReplaceTokens过滤器。它替换格式为@placeholder@的ant风格占位符。

import org.apache.tools.ant.filters.ReplaceTokens

contents {  // contents section in distribution
  from('src/main/scripts') {
    filter(ReplaceTokens, tokens: [placeholder: 'replacement-string' ])
    filteringCharset = 'UTF-8'
  }
}

这将在分发归档文件中,用"replacement-string"替换从目录复制的所有文件中的字符串@placeholder@

ContentFilterable的Javadocs描述了一些替代的文件过滤方式。

配置文件存档

配置的第二部分允许管理生成的归档文件的特定于文件格式的功能。这些设置是可选的,仅在您不满意标准存档的格式时才需要。

默认情况下,Gradle不会压缩它生成的tar归档文件。以下示例配置distTar任务,使用gzip压缩tar文件。由于文件通常作为.tar.gz文件而不仅仅是tar文件进行分发,因此将其添加到构建中是一个好主意:

distTar {
  compression = Compression.GZIP
  extension = 'tar.gz'
  classifier = 'dist'  // Appends a suffix to the file name
}

请参阅Tar任务以获取所有配置选项的描述。

ZIP归档文件可以像tar归档文件一样进行配置。此示例仅在文件名末尾添加了分类器字符串:

distZip {
  classifier = 'dist'
}

查看Tar任务以了解其他配置选项的描述。

构建发布档案

发布档案是作为assemble任务的一部分创建的。运行gradle buildgradle assemble将生成它们。


1
@glebiuskv 我注意到你在分发中有筛选文件的要求。我已经在我的回答中添加了一个部分来解决这个问题。如果你能把这个要求从评论移到问题中,那会更好一些。 - Christoph Böhme

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接