用于maven组装插件的Gradle模拟

时间:2014-08-20 07:07:33

标签: java maven gradle maven-assembly-plugin

我在我的项目中使用了assembly maven插件,在单个zip文件中从src/main/scripts/文件夹中提供jar,procrun可执行文件和一些脚本。我怎么能用gradle做呢? 我看过gradle交付和应用程序插件,但我无法正确配置它们。

2 个答案:

答案 0 :(得分:3)

可以轻松替换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的Javadoc及其实现的接口中找到配置选项的描述。

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

过滤文件

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

以下示例使用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'
  }
}

这将使用分发档案中的“replacement-string”替换从 src / main / scripts 目录复制的所有文件中的字符串@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 task

zip存档的配置方式与tar存档相同。此示例只是将分类器字符串添加到文件名的末尾:

distZip {
  classifier = 'dist'
}

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

构建分发档案

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

答案 1 :(得分:1)

查看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