java - Hvordan slippe af med Checkstyle-besked 'File slutter ikke med en newline.'

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg arbejder med et Maven (jar) -projekt i Netbeans (Windows), som skaber Checkstyle-rapporter med Maven Checkstyle-plugin.


Uanset hvad jeg gør, får jeg altid beskeden: File does not end with a newline til Java-klassefiler.


Hvad kan jeg gøre/konfigurere i enten Netbeans eller Checkstyle for at slippe af med meddelelsen?


Versioner af brugt software:



  • WinXP SP3

  • Netbeans 6.7 RC1 (sker også med 6,5)

  • Maven 2.0.9

  • Maven Checkstyle Plugin 2.2

  • Java 1.6 (Update 14)


Bedste reference




Sæt en newline i slutningen af ​​filen

eller

konfigurere CheckStyle for ikke at passe.


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





Du skal også fortælle Maven Checkstyle-plugin'en for at bruge din checkstyle config-fil.


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

Andre referencer 1


I mit tilfælde var der et problem med den ukorrekte konfiguration af den pågældende checker. Som standard bruger systemet standardkonventionen for linjestykker. Jeg arbejdede på vinduer, og projektet brugte unix-stil linjestykker. Jeg tror ikke at ignorere advarslen er den bedste strategi, så det jeg har gjort er:


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

Andre referencer 2


Jeg løber ind i dette problem, når filer gemmes som UNIX-format i stedet for DOS. (eller omvendt, hvis du gør dit arbejde i Unix)


For at rette det, bruger jeg et program, der ikke konverteres fra UNIX-format til DOS, og gemmer filen i det format.


I formørkelse:
Fil -> Konverter linjebegrænsere til -> Windows

Andre referencer 3




Der er en enklere måde at gøre dette på. Du kan angive en undertrykkelsesfil uden at overstyre sun checkstyle config filen:


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


Hvor dine undertrykkelser.xml er:


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

Andre referencer 4


Eclipse ..Window >> Preferences >> Checkstyle >> Select the configuration file >>



  1. Klik på knappen "Properties" >> Fjern markeringen af ​​Protect Checkstyle Configuration file.

  2. Klik på knappen "Configure" >> Søg efter "New Line At End Of File" >> Fjern markeringen i afkrydsningsfeltet, som du ser ud for New Line At End Of File.


Andre referencer 5


//Her er den brute force løsning:


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 + "
");
                    }
                    fwr.flush();
                    fwr.close();
                }
            }
        }
    }catch(Exception ioe){
        ioe.printStackTrace();
    }
}

}