繁体   English   中英

适用于Maven组件插件的Gradle模拟

[英]Gradle analogue for maven assembly plugin

我在项目中使用Assembly Maven插件,以单个zip文件的形式从src/main/scripts/文件夹中提供jar,procrun可执行文件和一些脚本。 我该如何用gradle来做? 我已经看到了gradle交付和应用程序插件,但是我无法以正确的方式配置它们。

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
      }
    }
  }
}

contents部分仅是示例。 根据您的项目,您可能想在这里做不同的事情。 可以在AbstractCopyTask的Javadocs及其实现的接口中找到配置选项的说明。

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

过滤文件

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

下面的示例使用ReplaceTokens过滤器。 它取代了格式如下的蚂蚁风格@placeholder@@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'
  }
}

这会将从src / main / scripts目录复制的所有文件中的字符串@placeholder@替换为分发存档中的“ replacement-string”。

用于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任务

可以使用与tar存档相同的方式配置zip存档。 此示例仅在文件名的末尾添加分类符字符串:

distZip {
  classifier = 'dist'
}

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

建立发行档案

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

查看Copy和Zip任务,以我的经验,他们可以用更少的仪式完成比组装插件更多的工作

https://docs.gradle.org/3.5/javadoc/org/gradle/api/tasks/Copy.html https://docs.gradle.org/3.5/javadoc/org/gradle/api/tasks/bundling/Zip html的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM