Domanda

Sto lavorando con un Maven (vaso) Progetto in Netbeans (Windows), che crea Checkstyle rapporti con il plugin Maven Checkstyle.

Non importa quello che faccio, ho sempre arrivare il messaggio:. File does not end with a newline per i file di classe Java

Cosa posso fare / configure sia in Netbeans o Checkstyle per sbarazzarsi del messaggio?

Le versioni di software utilizzato:

  • WinXP SP3
  • Netbeans 6.7 RC1 (accade con 6.5 troppo)
  • Maven 2.0.9
  • Maven Checkstyle Plugin 2.2
  • Java 1.6 (Aggiornamento 14)
È stato utile?

Soluzione

Mettere una nuova riga alla fine del file
o
configure CheckStyle non curarsene.

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

Bisogna anche dire il plugin Maven Checkstyle di utilizzare il file di configurazione checkstyle.

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

Altri suggerimenti

Nel mio caso, che è stato un problema con la configurazione non corretta di quella pedina. Per default utilizza convenzione default del sistema di terminatori di linea. Stavo lavorando su Windows e il progetto è stato utilizzando fine riga di tipo UNIX. Non credo che ignorare l'avviso è la migliore strategia, quindi quello che ho fatto è:

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

mi imbatto in questo problema quando i file vengono salvati in formato UNIX al posto di DOS. (O viceversa se fate il vostro lavoro in Unix)

Per risolvere il problema, io uso un programma di fare la conversione dal formato UNIX a DOS e salvare il file in tale formato.

In Eclipse: File -> Convertire Linea delimitatori A -> di Windows

C'è un modo più semplice per fare questo. È possibile specificare un file soppressioni senza sostituire il file di configurazione checkstyle sole:

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

Dove il vostro suppressions.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>

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

  1. Fare clic sul pulsante >> "Properties" deselezionare la Protect Checkstyle Configuration file.
  2. Fare clic sul pulsante >> "Configure" ricerca di "New Line At End Of File" >> deselezionare la casella di controllo che si vede accanto al New Line At End Of File.

// Ecco la soluzione forza bruta:

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

}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top