如何解决maven-formatter-plugin的问题?

3

我在Windows系统上构建项目时遇到了一些问题。我的项目使用formatter-maven-plugin插件,并使用“validate”目标。在将项目推送到GitHub之前,我会对其进行格式化并推送。之后,我在Windows计算机上克隆它并尝试运行“mvn clean install”,但是我得到了以下错误:

 Failed to execute goal net.revelc.code.formatter:formatter-maven-plugin:2.9.0:validate (default) on project application: File 'C:\Users\AUser\Desktop\demo\application\src\main\java\com\myapp\Application.java' has not been previously formatted. Please format file and commit before running validation!

在 Linux 中,这个问题是不存在的。为什么呢?在提交到 Git 之前,我对其进行了格式化处理。为什么在 Linux 上不存在这个问题?我无法改变格式化的目标。
<plugin>
                <groupId>net.revelc.code.formatter</groupId>
                <artifactId>formatter-maven-plugin</artifactId>
                <version>2.9.0</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>validate</goal>
                        </goals>
                        <configuration>
                            <configFile>${project.basedir}/../eclipse/eclipse-formatter.xml</configFile>
                            <encoding>UTF-8</encoding>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

Andrei,你确定${project.basedir}/../eclipse/eclipse-formatter.xml在你本地机器和Github上是相同的吗?我的猜测是文件不同或者Github上根本不存在该引用的 configFile 文件,因为其位于项目之外。 - entpnerd
3个回答

3
根据官方使用文档
使用format目标来运行插件。
mvn formatter:format

做完这个步骤后,您应该能够像平常一样运行。


1
我遇到了这个问题,Jenkins git提取代码时,一些文件以CRLF结尾,因为行分隔符是LINUX的LF,所以验证失败。有两种方法可以解决这个问题:
你可以使用.gitattributes设置text eol = lf,保持git提取代码文件以LF结尾。
另外一种方法是使用formatter-maven-plugin标签lineEnding,设置<lineEnding>KEEP</lineEnding>,让行分隔符依赖于文件本身,而不是系统。
我更喜欢第二种方法,因为格式应该保持系统独立。

谢谢,@Gray,这很有帮助。这是最佳答案,我请求问题所有者批准它。 - MANITORATION

0

我认为在格式化时你漏了一个文件。根据主题上的此问题,看起来记录了更好的错误消息,指出了有问题的文件。如果将Maven Formatter升级到最新稳定版本,则应该会看到以下形式的新错误消息:

文件'fileName'之前未进行过格式化。请在运行验证之前对文件进行格式化并提交!


但文件格式良好。我错过了指向文件的路径,但这是一个简单的Spring Boot运行程序。我的问题是,在将代码推送到Git系统之前,我会对其进行格式化(在推送之前,代码已构建。“mvn clean install”有效),在我再次在计算机上克隆我的存储库后,代码不起作用。 - Sam Samovich
我并不否认这一点。我的意思是,你可能无意中错过了某个文件,或者一个文件正在被格式化,而你却认为格式化程序没有在运行它。我认为,如果你升级Maven Formatter版本,就会清楚地知道哪个文件实际上是问题所在,因为当前的消息并没有明确指出哪个文件有问题。 - entpnerd
“无法执行目标net.revelc.code.formatter:formatter-maven-plugin:2.9.0:validate(默认)在项目应用程序上:文件'C:\Users\AUser\Desktop\demo\application\src\main\java\com\myapp\Application.java'尚未进行格式化。请在运行验证之前对文件进行格式化并提交!”- 这是新的2.9.0版本带有消息。 - Sam Samovich
请问您能否粘贴一下包含此插件配置信息的构建文件中相关的“插件”部分? - entpnerd
如果是系统相关的故障,可能是行尾符的问题。 - Darren Forsythe

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