java - maven 程序集插件的 Gradle 模拟

标签 java maven gradle maven-assembly-plugin

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

最佳答案

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 中找到。及其实现的接口(interface)。

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

过滤文件

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

下面的示例使用了 ReplaceTokens 过滤器。它取代了格式如下的 ant 风格占位符:@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 task有关所有配置选项的说明。

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

distZip {
  classifier = 'dist'
}

参见 Tar task其他配置选项的描述。

构建分发文件

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

关于java - maven 程序集插件的 Gradle 模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25398703/

相关文章:

java - 在哪里可以找到有关 spring-security 注释的更多信息

java - 如何解决这个设计问题

java - mvn install 依赖项忽略 destFileName :copy-dependencies

Android Studio如何在代码中获取versionNameSuffix

gradle - 如何处理两个gradle插件的任务冲突?

java - 为什么使用 PDF 文本提取器从 PDF 中提取的文本是分散的和非结构化的?

java - 如何使用 Junit 测试交换数组中 2 个元素的方法

maven - 解决hipchat gradle依赖

java - 使用 class.getResource() 在 .jar 中加载文件?

java - 如何找出 IntelliJ 中定义库的位置?