22

当我尝试运行 maven-release-plugin 时,它会更改 pom.xml 文件中的版本。在 maven 发布之前,每行结尾都有 unix 样式<lf>,但是在我的 windows 机器上运行它之后,插件将文件中的每一行更改为<cr><lf>.

我的问题是:

a) 有没有办法告诉 maven 保持原样或使用特定的行尾

或者

b)有没有一种通用的方法来告诉窗口行尾应该是什么?即使是在操作系统深处破解某些东西的工具也会被认为是有帮助的。

我查看了这个https://issues.jfrog.org/jira/browse/BI-111,上面写着“已解决”,但我使用的是最新版本,它对我不起作用。

4

4 回答 4

7

有四种可能的解决方案。

  1. 使用 Maven Assemly 插件

我认为最好的办法是调查Maven 程序集插件。它应该允许您更新行分隔符。有关详细信息,请参阅“fileSet”部分

  1. 使用 PowerShell 调用mvn

作为临时解决方法,您可以使用 PowerShell(开始->所有程序->附件->Windows PowerShell)。像你一样调用 maven,在双引号 -D 语句周围有一些额外的东西。mvn assembly:assembly -P prod "-Dmaven.test.skip=true". 现在添加到这个 -Dline.separator=`n。这应该会导致 PowerShell 添加转义值。

  1. "line.separator"在 pom 更新之前编写你自己的插件来覆盖。

按照Maven 指南创建一个简单的插件。它需要做的就是覆盖价值。将插件配置为在 pom 修改之前的阶段执行。

System.getProperties().setProperty("line.separator", "\n");
  1. 在 Linux 虚拟机中构建。

有一个选项不能纠正 Windows 兼容性问题,但应该可以解决您的核心问题。看看创建小型 VirtualBox Linux 服务器。一个简单的 NAT 连接应该足以访问 Internet。在这台机器上安装 Maven、Java 等。建立在它之上。因为它是 Linux,所以行分隔符应该只有 '\n'。VM 需要 256 - 512 MB 的 RAM 和 20 GB 的存储空间(Linux + 许多可能的 Maven 依赖项)。如果你最终喜欢它,你甚至可以扩展它以容纳像 Jenkins 这样的持续集成产品。

于 2015-02-16T19:34:56.293 回答
3

我在 Windows (CRLF) 上工作并在我的文件中使用 LF 结尾。我使用 Git。

我选择设置core.autocrlfinput. 根据https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration input设置是针对这种情况的:

如果您在使用 LF 行结尾的 Linux 或 Mac 系统上,那么您不希望 Git 在您检出文件时自动转换它们;但是,如果意外引入了带有 CRLF 结尾的文件,那么您可能希望 Git 修复它。您可以通过将 core.autocrlf 设置为 input 来告诉 Git 在提交时将 CRLF 转换为 LF,但不能反过来

但是,当我在 Windows 上时,它对我很有效。如果您的情况类似,可以尝试一下:

  • If CRLF file gets committed to the repository, CRLF line endings will be visible on checkout. Therefore one can react (e.g. remind colleagues to pay attention to the line endings).
  • Using Maven Release Plugin will not cause pom.xml to be committed with CRLF (it will be LF).

Downside:

  • Solution is machine-dependent. One can forget verifying Git settings before releasing from a different machine, causing CRLF pom.xml to be committed.
于 2018-09-26T19:14:40.527 回答
2

在 Linux 中工作,但希望在例如输出中使用 Windows 行尾set-versions,这个快速修复适用于我:

mvn -Dline.separator=$'\r\n' \
    -DautoVersionSubmodules=true \
    -DdevelopmentVersion=1.2.3-SNAPSHOT \
    release:update-versions
于 2017-11-21T23:42:35.630 回答
1

我的解决方法是使用 SVN 属性:svn:eol-style=native. 因此 SVNpom.xml在更新或提交时“转换”。

于 2015-03-03T17:06:21.153 回答