如何摆脱 Checkstyle 消息“文件不以换行符结尾。”

Posted

技术标签:

【中文标题】如何摆脱 Checkstyle 消息“文件不以换行符结尾。”【英文标题】:How to get rid of Checkstyle message 'File does not end with a newline.' 【发布时间】:2010-11-03 01:53:35 【问题描述】:

我正在使用 Netbeans (Windows) 中的 Maven (jar) 项目,该项目使用 Maven Checkstyle 插件创建 Checkstyle 报告。

无论我做什么,我总是收到消息:File does not end with a newline 用于 Java 类文件。

我可以在 Netbeans 或 Checkstyle 中做什么/配置以消除该消息?

使用的软件版本:

WinXP SP3 Netbeans 6.7 RC1(也适用于 6.5) Maven 2.0.9 Maven Checkstyle 插件 2.2 Java 1.6(更新 14)

【问题讨论】:

【参考方案1】:

就我而言,这是该检查器配置不当造成的问题。默认情况下,它使用系统默认的行尾约定。我在 Windows 上工作,该项目使用的是 unix 风格的行尾。我不认为忽略警告是最好的策略,所以我所做的是:

<module name="Checker">
    <module name="NewlineAtEndOfFile">
        <property name="lineSeparator" value="lf" />
    </module>
</module>

【讨论】:

谢谢,对我来说这是解决方案。即使团队中的其他人使用 CR-LF 行分隔符签出他们在 Windows 上的文件,它也能正常工作【参考方案2】:

在文件末尾换行 或 配置 CheckStyle 不关心。

<module name="Checker">
    <!-- stuff deleted -->
    <module name="NewlineAtEndOfFile">
        <property name="severity" value="ignore" />
    </module>

您还必须告诉 Maven Checkstyle 插件使用您的 checkstyle 配置文件。

<plugin>
    <artifactId>maven-checkstyle-plugin</artifactId>
    <configuration>
        <configLocation>$basedir/yourCheckstyle.xml</configLocation>
    </configuration>
</plugin>

【讨论】:

"在文件末尾换行。"在 Windows 上使用 netbeans 似乎是不可能的 有可能。如果您可以将光标移过最后一行,那么您就可以了。如果仍然无法清除警告,请检查 Alexey Voinov's answer 并确保 Checkstyle 在配置更改后再次运行。【参考方案3】:

当文件保存为 UNIX 格式而不是 DOS 时,我遇到了这个问题。 (或其他方式,如果你在 Unix 中工作)

为了解决这个问题,我使用一个程序将 UNIX 格式转换为 DOS 并以该格式保存文件。

在日食中: 文件 -> 将行分隔符转换为 -> Windows

【讨论】:

为我工作。谢谢【参考方案4】:

有一种更简单的方法可以做到这一点。您可以在不覆盖 sun checkstyle 配置文件的情况下指定抑制文件:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-checkstyle-plugin</artifactId>
    <configuration>
        <suppressionsLocation>suppressions.xml</suppressionsLocation>
        <configLocation>config/sun_checks.xml</configLocation>
    </configuration>
</plugin>

您的 suppresss.xml 在哪里:

<?xml version="1.0"?>
<!DOCTYPE suppressions PUBLIC
    "-//Puppy Crawl//DTD Suppressions 1.1//EN"
    "http://www.puppycrawl.com/dtds/suppressions_1_1.dtd">

<suppressions>
    <suppress checks="NewlineAtEndOfFile" files=".java" />
</suppressions>

【讨论】:

如果您被禁止更改配置文件,但允许更改抑制文件(它发生了!),这很好。如果您可能更改配置文件,最好从配置文件中删除不需要的检查。更少的混乱和更好的性能。【参考方案5】:

Eclipse..Window &gt;&gt; Preferences &gt;&gt; Checkstyle &gt;&gt; Select the configuration file &gt;&gt;

    点击"Properties"按钮>>取消选中Protect Checkstyle Configuration file。 点击"Configure"按钮>>搜索"New Line At End Of File">>取消选中New Line At End Of File旁边的复选框。

【讨论】:

【参考方案6】:

//这里是蛮力解决方案:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;

/**
 *
 * @author hMueller
 */

public class UnixToWindowsEncoding 

//rewrites all .java files in Windows encoding
//a[0] = parent directory
//loops through all subdirectories and fixes whatever .java file it finds
public static void main(String[] a)
    String startdir = a[0];
    fixDir(startdir);



private static void fixDir(String dirname)
    try
        File f = new File(dirname);
        File[] list = f.listFiles();
        for(int i = 0; i < list.length; i++)
            if(list[i].isDirectory())
                fixDir(list[i].getAbsolutePath());
            else
                if(list[i].getName().endsWith(".java"))
                    ArrayList<String> l = new ArrayList<String>();
                    FileReader fr = new FileReader(list[i]);
                    BufferedReader br = new BufferedReader(fr);
                    String line = "";
                    while( (line = br.readLine()) != null)
                        l.add(line);
                    
                    br.close();
                    fr.close();
                    list[i].delete();
                    FileWriter fwr = new FileWriter(list[i]);
                    for(String s : l)
                        fwr.write(s + "\r\n");
                    
                    fwr.flush();
                    fwr.close();
                
            
        
    catch(Exception ioe)
        ioe.printStackTrace();
    



【讨论】:

虽然这段代码 sn-p 可以解决问题,including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。

以上是关于如何摆脱 Checkstyle 消息“文件不以换行符结尾。”的主要内容,如果未能解决你的问题,请参考以下文章

Xcode:如何摆脱这个 AdMob 日志消息?

你如何摆脱 ConfigurationPropertiesRebinderAutoConfiguration INFO 日志消息

如何摆脱“远程主机标识已更改”消息

logcat 充满消息“nativeGetEnabledTags 的意外值:0” - 如何摆脱这个? [复制]

如何摆脱 VS2008 中的“目标程序集不包含服务类型”错误消息?

如何配置eclipse的checkstyle和findbugs两个插件