Как избавиться от сообщения Checkstyle «Файл не заканчивается новой строкой».

Я работаю с проектом Maven (jar) в Netbeans (Windows), который создает отчеты Checkstyle с помощью плагина Maven Checkstyle.

Что бы я ни делал, я всегда получаю сообщение: File does not end with a newline для файлов классов Java.

Что я могу сделать/настроить в Netbeans или Checkstyle, чтобы избавиться от сообщения?

Версии используемого ПО:

  • WinXP SP3
  • Netbeans 6.7 RC1 (случается и с 6.5)
  • Мавен 2.0.9
  • Плагин Maven Checkstyle 2.2
  • Java 1.6 (обновление 14)

person Michael Pralow    schedule 15.06.2009    source источник


Ответы (6)


Поместите новую строку в конец файла
или
настройте 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>
person Jon Strayer    schedule 18.06.2009
comment
Поместите новую строку в конец файла. это кажется невозможным с netbeans на окнах - person Michael Pralow; 19.06.2009
comment
Это возможно. Если вы можете переместить курсор за последнюю строку, то у вас все получилось. Если предупреждение по-прежнему не исчезает, проверьте ответ Алексея Воинова и убедитесь, что Checkstyle снова запускается после изменения конфигурации. - person barfuin; 24.01.2014

В моем случае это была проблема с неправильной настройкой этого чекера. По умолчанию он использует стандартное системное соглашение об окончании строки. Я работал над окнами, и в проекте использовались окончания строк в стиле unix. Я не думаю, что игнорирование предупреждения — лучшая стратегия, поэтому я сделал следующее:

<module name="Checker">
    <module name="NewlineAtEndOfFile">
        <property name="lineSeparator" value="lf" />
    </module>
</module>
person Alexey Voinov    schedule 15.03.2013
comment
Спасибо, для меня это решение. Это работает, даже если другие люди в команде разрегистрируют свои файлы в Windows с разделителями строк CR-LF. - person Walter Tross; 08.04.2015

Я сталкиваюсь с этой проблемой, когда файлы сохраняются в формате UNIX вместо DOS. (или наоборот, если вы работаете в Unix)

Чтобы исправить это, я использую программу для преобразования из формата UNIX в формат DOS и сохраняю файл в этом формате.

В eclipse: Файл -> Преобразовать разделители строк в -> Windows

person Ben    schedule 22.04.2013
comment
Работал на меня. Спасибо - person Sush; 23.03.2021

Есть более простой способ сделать это. Вы можете указать файл подавления, не переопределяя конфигурационный файл стиля проверки солнца:

<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>

Где находится ваш файлIPSups.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>
person Stuart Jones    schedule 05.01.2010
comment
Это здорово, если вам запрещено изменять файл конфигурации, но разрешено изменять файл подавления (такое бывает!). Если вы можете изменить файл конфигурации, лучше просто удалить ненужные проверки из файла конфигурации. Меньше беспорядка и лучшая производительность. - person barfuin; 24.01.2014

Затмение ..Window >> Preferences >> Checkstyle >> Select the configuration file >>

  1. Нажмите кнопку "Properties" >> Снимите флажок Protect Checkstyle Configuration file.
  2. Нажмите кнопку "Configure" >> найдите "New Line At End Of File" >> Снимите флажок, который вы видите рядом с New Line At End Of File.
person Raghu    schedule 13.03.2013

// Вот решение грубой силы:

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();
    }
}

}
person Heiko Mueller    schedule 12.11.2015
comment
Хотя этот фрагмент кода может решить вопрос, включение объяснения действительно помогает улучшить качество вашего поста. Помните, что вы отвечаете на вопрос для будущих читателей, и эти люди могут не знать причин вашего предложения кода. - person Ferrybig; 10.03.2016