我在项目中使用汇编Maven插件,以便将Jars、procrun可执行文件和一些脚本从src/main/scripts/
文件夹打包到单个zip文件中。如何在Gradle中实现这一点? 我看过Gradle交付和应用程序插件,但我无法正确配置它们。
我在项目中使用汇编Maven插件,以便将Jars、procrun可执行文件和一些脚本从src/main/scripts/
文件夹打包到单个zip文件中。如何在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中找到。
位于src/main/dist中的文件会自动添加到发布中,即使在发布中没有相应的from
语句。第二个路径元素必须与发布的名称匹配(例如我的示例中为main)。我在示例中列出了该目录,因为我需要在复制的文件上设置fileMode
和dirMode
属性。
使用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 build
或gradle assemble
将生成它们。
请查看复制和压缩任务,在我的经验中它们可以比汇编插件更有效率地完成任务。
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
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