用于 maven 程序集插件的 Gradle 模拟

gle*_*skv 5 java gradle maven maven-assembly-plugin

我在我的项目中使用程序集 maven 插件,以src/main/scripts/单个 zip 文件中的文件夹提供 jars、procrun 可执行文件和一些脚本。我怎样才能用 gradle 做到这一点?我已经看到了 gradle 交付和应用程序插件,但我无法以正确的方式配置它们。

Chr*_*hme 7

Maven 程序集可以轻松替换 Gradle 的分发插件。配置由两部分组成。

配置分发

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

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
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

contents节只是一个例子。根据您的项目,您可能想要在这里做不同的事情。可以在AbstractCopyTask及其实现的接口的 Javadoc 中找到配置选项的描述。

src/main/dist中的文件会自动添加到发行版中。即使from出版物中没有通讯员声明。第二个路径元素必须与发行版的名称匹配(在我的示例中为main)。我在示例中列出了目录,因为我需要在复制的文件上设置fileModedirMode属性。

过滤文件

筛选文件,也可以使用所述的一个滤波器()中定义的方法AbstractCopyTask

下面的示例使用ReplaceTokens过滤器。它取代了格式如下的蚂蚁式占位符:@placeholder@.

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'
  }
}
Run Code Online (Sandbox Code Playgroud)

这将使用分发存档中的“替换字符串”替换@placeholder@src/main/scripts目录复制的所有文件中的字符串。

ContentFilterable的 Javadoc描述了一些过滤文件的替代方法。

配置文件归档

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

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

distTar {
  compression = Compression.GZIP
  extension = 'tar.gz'
  classifier = 'dist'  // Appends a suffix to the file name
}
Run Code Online (Sandbox Code Playgroud)

有关所有配置选项的说明,请参阅Tar 任务

可以以与 tar 存档相同的方式配置 zip 存档。这个例子只是在文件名的末尾添加一个分类器字符串:

distZip {
  classifier = 'dist'
}
Run Code Online (Sandbox Code Playgroud)

有关其他配置选项的说明,请参阅Tar 任务

构建分发档案

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