在Gradle中创建tar文件时,将行结束符转换为Unix格式的最简单方法是什么?

11

在工作中,我们在开发过程中使用了Windows和Linux工作站的混合体。对于部署,我们始终部署到Unix机器上。我想确保行尾始终以Unix格式存在。在Gradle中实现这一点的最简单方法是什么?我认为可以使用FilterReader,但我没有找到现成的。这是最好的选择吗?


什么的行尾?你的资源文件的内容? - Peter Niederwieser
在我创建的tar文件中,特定情况下的配置文件。我找到了一些对我有用的东西,并在下面发布了它。 - Glen
3个回答

15

将此条目的编辑更改为使用复制任务。最初版本使用了Tar任务,但我注意到在Linux上运行时它会剥离CRLF,但在Windows上会无法正常工作。由于它们都是Copyspecs,我本来期望Tar任务能够像Copy任务一样工作,但不幸的是情况并非如此(Gradle 1.0-milestone-3)。

看起来我已经自己解决了。所需的FilterReader是FixCrLfFilter。以下代码片段显示了如何使用它:

import org.apache.tools.ant.filters.*;

task archiveit(type: Copy) {
  from "conf"
  into "targetdir"
  filter(FixCrLfFilter.class,
         eol:FixCrLfFilter.CrLf.newInstance("lf"))
}

1
Gradle 7.5.1和JDK 8的最简单解决方案是设置line.separator。 您可以将以下行添加到您的build.gradle文件中。
System.setProperty("line.seperator","\n");
task dos2unix(type: Copy) {
  from $sourceFile
  into $targetFile
  filter { line -> line}
}

"Neeme Praks"的解决方案不能工作,因为gradle过滤器使用了LineFilter类。而LineFilter.readTransformedLine方法在每一行添加了行分隔符。"

-1

Glen的答案对我没用,所以我想出了更简单的解决方案:

task archiveit(type: Copy) {
  from "conf"
  into "targetdir"
  filter { line -> line.replaceAll('\r\n', '\n') }
}

应该适用于支持过滤器的所有任务,包括Tar任务。


2
对我来说不起作用。我认为“line”不再有结尾了。使用Gradle 6.1.1进行测试。 - KeKru

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接