google_checks.xml modifizieren - Grundsätzliche Vorgehensweise

Hein_nieH

Bekanntes Mitglied
Hallo,

ich habe eine Frage zum Ändern von google_checks.xml.
In einem Maven-Projekt nutze ich das plugin "maven-checkstyle-plugin".
Innerhalb dieses Plugins nutze ich die Configuration "google_checks.xml"

Bei meinem Programmierstiel habe ich mir angewöhnt die öffnende Klammer eines Blockes
in einer neuen Zeile zu schreiben.

Hierzu meine Frage:
wie kann ich die Datei google_checks.xml exportieren?
Welche Modifikation muss ich durchführen, um die Regel (öffnende Klammer in einer neuen Zeile) zu setzen?
Wie Binde ich im Plugin "maven-checkstyle-plugin" die geänderte Konfigurationsdatei ein?

Ich habe mit Checkstyle noch sehr wenig Erfahrung.

Über eine hilfreiche Antwort würde ich mich sehr freuen
Hein_nieH
 

Oneixee5

Top Contributor
Öffnende geschweifte Klammern gehören an das Ende einer Codezeile. Eine Änderung diesbezüglich ist also überflüssig.
 

KonradN

Super-Moderator
Mitarbeiter
Also das erste: google_checks.xml:

Dann das Problem mit der öffnenden Klammer - das wäre in dem google_checks.xml der Teil:
XML:
    <module name="LeftCurly">
      <property name="tokens"
               value="ANNOTATION_DEF, CLASS_DEF, CTOR_DEF, ENUM_CONSTANT_DEF, ENUM_DEF,
                    INTERFACE_DEF, LAMBDA, LITERAL_CASE, LITERAL_CATCH, LITERAL_DEFAULT,
                    LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF,
                    LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE, METHOD_DEF,
                    OBJBLOCK, STATIC_INIT, RECORD_DEF, COMPACT_CTOR_DEF"/>
    </module>

Schau dazu ggf. mal https://checkstyle.sourceforge.io/a.../checkstyle/checks/blocks/LeftCurlyCheck.html an.
Die Optionen sind da halt: https://checkstyle.sourceforge.io/a...checkstyle/checks/blocks/LeftCurlyOption.html

Was da also vermutlich noch rein muss wäre ein: <property name="option" value="nl"/>
==> Damit wäre die geschweifte Klammer in der nächsten Zeile.

Öffnende geschweifte Klammern gehören an das Ende einer Codezeile. Eine Änderung diesbezüglich ist also überflüssig.
Das sehe ich nicht ganz so streng. Hintergrund ist, dass es keine wirkliche offizielle Vorgabe gibt. Es gibt nur Empfehlungen. Fakt ist, dass sich in der Java Welt da eigentlich jeder dran hält und man sollte sich da auch wirklich dran halten. Aber wenn ein Team mit mehreren Sprachen arbeiten muss, dann kann es durchaus sinnvoll sein, dass ein Team sich auf einen Styleguide einigt. Und wenn da dann die geschweifte Klammer in der nächsten Zeile steht, dann ist es halt so. Daher unterstützen das auch die Entwicklungsumgebungen und Check-Tools.
 

mihe7

Top Contributor
Bzgl. der Einbindung empfiehlt es sich sich, die Dokumentation anzusehen:
https://maven.apache.org/plugins/maven-checkstyle-plugin/checkstyle-mojo.html#configLocation hat gesagt.:
Specifies the location of the XML configuration to use.
[...]
If successfully resolved, the contents of the configuration is copied into the ${project.build.directory}/checkstyle-configuration.xml file before being passed to Checkstyle as a configuration.
Heißt: Du solltest die Datei nach einem Build im target-Directory finden. Ansonsten würde ich sie mir einfach unter https://github.com/checkstyle/checkstyle/blob/master/src/main/resources/google_checks.xml besorgen.

Was die Regel betrifft, war @KonradN mal wieder schneller :)
 

Hein_nieH

Bekanntes Mitglied
Hallo KonradN und mihe7,

danke für die Antwort.
Das bringt mich schon mal weiter.
Ich werde über meine Erfolge oder Misserfolge berichten.

Gruss Hein_nieH
 

Hein_nieH

Bekanntes Mitglied
Hallo,

jetzt muss ich nochmal detailliert nachfragen.
In der ursprünflichen Datei steht:

XML:
    <module name="LeftCurly">
      <property name="tokens"
               value="ANNOTATION_DEF, CLASS_DEF, CTOR_DEF, ENUM_CONSTANT_DEF, ENUM_DEF,
                    INTERFACE_DEF, LAMBDA, LITERAL_CASE, LITERAL_CATCH, LITERAL_DEFAULT,
                    LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF,
                    LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE, METHOD_DEF,
                    OBJBLOCK, STATIC_INIT, RECORD_DEF, COMPACT_CTOR_DEF"/>
    </module>

Wenn ich das richtig verstehe, muss dieser Codeblock durch das ersetzt werden:
XML:
<module name="LeftCurly">
   <property name="option" value="nl"/>
   <property name="tokens" value="CLASS_DEF,INTERFACE_DEF"/>
 </module>

Sind dann noch weitere Änderungen notwendig?
Ist leider das erste Mal, dass ich mich mit diesem Problem beschäftige.

Gruss Hein_nieH
 

KonradN

Super-Moderator
Mitarbeiter
Hier ist die Frage, wann Du welches Verhalten haben willst. In der Property "tokens" wird aufgelistet, wann die Regel angewendet werden soll.

Wenn Du die Ersetzung machst, dann hast Du nur noch eine Prüfung der geschweiften Klammer bei Klassen und Interface Definitionen. Aber sonst nirgends.

Wenn Du generell immer die öffnende geschweifte Klammer auf der neuen Zeile haben willst, dann änderst Du nur die option und lässt alle Tokens drin.

Wenn es einen Fall geben sollte, bei dem Du doch die geschweifte Klammer am Ende haben willst, dann kannst Du beides angeben, also etwas wie:
XML:
    <module name="LeftCurly">
      <property name="option" value="nl" />
      <property name="tokens"
               value="ANNOTATION_DEF, CLASS_DEF, CTOR_DEF, ENUM_CONSTANT_DEF, ENUM_DEF,
                    INTERFACE_DEF, LAMBDA, LITERAL_CASE, LITERAL_CATCH, LITERAL_DEFAULT,
                    LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF,
                    LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE, METHOD_DEF,
                    OBJBLOCK, STATIC_INIT, RECORD_DEF"/>
    </module>
    <module name="LeftCurly">
      <property name="tokens"
               value="COMPACT_CTOR_DEF"/>
    </module>

==> Sprich: Immer ist die öffnende Klammer in der nächsten Zeile außer bei kompakten Konstruktoren - da ist es am Ende der Zeile.
==> Du teilst die Token also zwischen den beiden Varianten auf oder entfernst einzelne Token, wenn es Dir an irgendwelchen Stellen egal ist.
 

Hein_nieH

Bekanntes Mitglied
Hallo,

ich habe heute weiter probiert.
Zunächst habe ich mir die Datei google_checks.xml heruntergeladen, diese umbenannt (my_google_checks.xml) und in meine pom.xml eingebunden.

Das hat auch zumindestens soweit funktioniert, dass my_google_checks.xml ausgewertet wird.

Hierzu mal meine erste Frage: Wo wird google_checks.xml auf dem Rechner abgelegt? Ich habe mal alles durchsucht, jedoch keinen Speicherort gefunden.

Beim Build gab es dann mehrere Fehlermeldungen, die darauf abzielten, dass diverse Token nichtakzeptiert wurden.

Beispiele:
module: LeftCurly --- token: RECORD_DEF, COMPACT_CTOR_DEF
module: RightCurly --- token: INTERFACE_DEF, RECORD_DEF, COMPACT_CTOR_DEF
module: WhitespaceAfter --- token: ELLIPSIS, LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_CATCH, LAMBDA, LITERAL_YIELD, LITERAL_CASE

Es waren immer die zuletzt aufgeführten Token, so dass vermutlich ein Versionsproblem vorliegt.

Nachdem ich die Token entfernt hatte kam nachstehende Meldung beim Build.
Da bin ich mit meinem Latain am Ende.
Was könnte ich bei der nachstehenden Fehlermeldung noch versuchen?
Nutzte ich (in der pom.xml) im plugin maven-checkstyle-plugin die configLocation google_checks.xml dann gibt es keine Fehlermeldung.

Ich nutzte Java 11.
Über einen Lösungsansatz würde ich mich freuen.

[INFO] --- maven-checkstyle-plugin:3.1.1:check (validate) @ DVD_Archiv ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7.898 s
[INFO] Finished at: 2022-10-22T13:53:35+02:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:3.1.1:check (validate) on project DVD_Archiv: Failed during checkstyle configuration: cannot initialize module TreeWalker - cannot initialize module PatternVariableName - Fehler beim Instanziieren der Klasse 'PatternVariableName'. Es war auch nicht möglich, sie als .PatternVariableName, PatternVariableNameCheck, .PatternVariableNameCheck zu instanziieren. Bitte prüfen Sie, dass der Klassenname als kanonischer Name angegeben wurde oder lesen Sie, wie Sie abgekürzte Namen konfigurieren: https://checkstyle.org/config.html#Packages. Bitte prüfen Sie auch, dass der angegebene ClassLoader des Checkers richtig konfiguriert ist. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

Hier noch die Einbindung von Checkstyle in meine pom.xml
XML:
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <version>3.1.1</version>
                <configuration>
                    <!--
                    <configLocation>google_checks.xml</configLocation>
                    -->
                    <configLocation>C:\Users\${user.name}\Documents\Programmierung_Java\CheckStyle\my_google_checks.xml</configLocation>
                    <encoding>cp1252</encoding>
                    <consoleOutput>true</consoleOutput>
                    <failsOnError>true</failsOnError>
                    <linkXRef>false</linkXRef>
                </configuration>
                <executions>
                    <execution>
                        <id>validate</id>
                        <phase>package</phase>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
 

LimDul

Top Contributor
Ursache ist, dass deine my_google_checks.xml fehlerhaft ist - poste die mal.

In einer pom auf eine Datei außerhalb des Maven Projektes zu verweisen ist extrem schlechter Stil. Es ist deutlich sinnvoller, die my_google_checks.xml z.B. parallel zur pom.xml abzulegen und darauf zu verweisen.
 

Hein_nieH

Bekanntes Mitglied
Hallo,

In einer pom auf eine Datei außerhalb des Maven Projektes zu verweisen ist extrem schlechter Stil. Es ist deutlich sinnvoller, die my_google_checks.xml z.B. parallel zur pom.xml abzulegen und darauf zu verweisen.
ja das ist ok und ich werde das nach dem Experimentieren auch ändern.

Ich habe jetzt verschiedene Versuche gemacht:
1. Versuch: google_checks.xml von der Checkstyle Seite heruntergeladen und eingebunden
Ergebnis Fehler, siehe unten

2. Versuch: google_checks.xml von der Checkstyle Seite heruntergeladen und eingebunden
in my_google_checks.xml umbenannt
Im Modul: LeftCurly: <property name="option" value="nl" /> hinzugefügt und alle angemeckerten Token entfernt
Ergebnis: Fehler
Ergebnis Fehler, siehe unten

3. Versuch: google_checks.xml nicht von der Checkstyle Seite heruntergeladen und nicht extern eingebunden
Ergebnis: ok, aber keine Modifikation der Checkanforderungen möglich, wie z.B: öffnende Klammer in einer neuen Zeile (also mein Ursprungsproblem)

Anbei mal die Auszüge aus der pom.xml und die Fehlermeldungen:
=======================================================================================
1. Versuch: google_checks.xml von der Checkstyle Seite heruntergeladen und eingebunden
Ergebnis: Fehler
XML:
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <version>3.1.1</version>
                <configuration>
                    <configLocation>C:\Users\${user.name}\Documents\Programmierung_Java\CheckStyle\google_checks.xml</configLocation>
                    <encoding>cp1252</encoding>
                    <consoleOutput>true</consoleOutput>
                    <failsOnError>true</failsOnError>
                    <linkXRef>false</linkXRef>
                </configuration>
                <executions>
                    <execution>
                        <id>validate</id>
                        <phase>package</phase>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

Fehlermeldung:
[INFO] --- maven-checkstyle-plugin:3.1.1:check (validate) @ DVD_Archiv ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.332 s
[INFO] Finished at: 2022-10-23T09:54:14+02:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:3.1.1:check (validate) on project DVD_Archiv: Execution validate of goal org.apache.maven.plugins:maven-checkstyle-plugin:3.1.1:check failed: given name COMPACT_CTOR_DEF -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException

Wie man sieht wird hier das Token COMPACT_CTOR_DEF angemeckert

=======================================================================================
2. Versuch: google_checks.xml von der Checkstyle Seite heruntergeladen
in my_ google_checks.xml umbenannt und eingebunden
Im Modul: LeftCurly: <property name="option" value="nl" /> hinzugefügt und alle angemeckerten Token entfernt
Ergebnis: Fehler
Code:
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <version>3.1.1</version>
                <configuration>
                    <configLocation>C:\Users\${user.name}\Documents\Programmierung_Java\CheckStyle\my_google_checks.xml</configLocation>
                    <encoding>cp1252</encoding>
                    <consoleOutput>true</consoleOutput>
                    <failsOnError>true</failsOnError>
                    <linkXRef>false</linkXRef>
                </configuration>
                <executions>
                    <execution>
                        <id>validate</id>
                        <phase>package</phase>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

[INFO] --- maven-checkstyle-plugin:3.1.1:check (validate) @ DVD_Archiv ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7.890 s
[INFO] Finished at: 2022-10-23T09:59:07+02:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:3.1.1:check (validate) on project DVD_Archiv: Failed during checkstyle configuration: cannot initialize module TreeWalker - cannot initialize module PatternVariableName - Fehler beim Instanziieren der Klasse 'PatternVariableName'. Es war auch nicht möglich, sie als .PatternVariableName, PatternVariableNameCheck, .PatternVariableNameCheck zu instanziieren. Bitte prüfen Sie, dass der Klassenname als kanonischer Name angegeben wurde oder lesen Sie, wie Sie abgekürzte Namen konfigurieren: https://checkstyle.org/config.html#Packages. Bitte prüfen Sie auch, dass der angegebene ClassLoader des Checkers richtig konfiguriert ist. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

=======================================================================================
3. Versuch: google_checks.xml nicht von der Checkstyle Seite heruntergeladen und nicht extern eingebunden
Ergebnis: ok (aber keine Modifikation der Checkdefinitionen möglich)

XML:
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <version>3.1.1</version>
                <configuration>
                    <configLocation>google_checks.xml</configLocation>
                    <encoding>cp1252</encoding>
                    <consoleOutput>true</consoleOutput>
                    <failsOnError>true</failsOnError>
                    <linkXRef>false</linkXRef>
                </configuration>
                <executions>
                    <execution>
                        <id>validate</id>
                        <phase>package</phase>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>


Ich habe keine Idee was ich noch versuchen könnte.

Gruss Hein_nieH
 

Hein_nieH

Bekanntes Mitglied
Hallo,

ich habe die heruntergeladene Datei google_checks.xml unverändert gelassen.
Wenn ich diese in das plugin einbinde kommt eine Fehlermeldung, siehe 1. Versuch in meinem vorhergegangenen Post.

Hier die unveränderte Datei google_checks.xml:
XML:
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
          "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
          "https://checkstyle.org/dtds/configuration_1_3.dtd">

<!--
    Checkstyle configuration that checks the Google coding conventions from Google Java Style
    that can be found at https://google.github.io/styleguide/javaguide.html
    Checkstyle is very configurable. Be sure to read the documentation at
    http://checkstyle.org (or in your downloaded distribution).
    To completely disable a check, just comment it out or delete it from the file.
    To suppress certain violations please review suppression filters.
    Authors: Max Vetrenko, Ruslan Diachenko, Roman Ivanov.
 -->

<module name="Checker">
  <module name="SuppressWarningsFilter"/>

  <property name="charset" value="UTF-8"/>

  <property name="severity" value="warning"/>

  <property name="fileExtensions" value="java, properties, xml"/>
  <!-- Excludes all 'module-info.java' files              -->
  <!-- See https://checkstyle.org/config_filefilters.html -->
  <module name="BeforeExecutionExclusionFileFilter">
    <property name="fileNamePattern" value="module\-info\.java$"/>
  </module>
  <!-- https://checkstyle.org/config_filters.html#SuppressionFilter -->
  <module name="SuppressionFilter">
    <property name="file" value="${org.checkstyle.google.suppressionfilter.config}"
           default="checkstyle-suppressions.xml" />
    <property name="optional" value="true"/>
  </module>

  <!-- Checks for whitespace                               -->
  <!-- See http://checkstyle.org/config_whitespace.html -->
  <module name="FileTabCharacter">
    <property name="eachLine" value="true"/>
  </module>

  <module name="LineLength">
    <property name="fileExtensions" value="java"/>
    <property name="max" value="100"/>
    <property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/>
  </module>

  <module name="TreeWalker">
    <module name="OuterTypeFilename"/>
    <module name="IllegalTokenText">
      <property name="tokens" value="STRING_LITERAL, CHAR_LITERAL"/>
      <property name="format"
               value="\\u00(09|0(a|A)|0(c|C)|0(d|D)|22|27|5(C|c))|\\(0(10|11|12|14|15|42|47)|134)"/>
      <property name="message"
               value="Consider using special escape sequence instead of octal value or Unicode escaped value."/>
    </module>
    <module name="AvoidEscapedUnicodeCharacters">
      <property name="allowEscapesForControlCharacters" value="true"/>
      <property name="allowByTailComment" value="true"/>
      <property name="allowNonPrintableEscapes" value="true"/>
    </module>
    <module name="AvoidStarImport"/>
    <module name="OneTopLevelClass"/>
    <module name="NoLineWrap">
      <property name="tokens" value="PACKAGE_DEF, IMPORT, STATIC_IMPORT"/>
    </module>
    <module name="EmptyBlock">
      <property name="option" value="TEXT"/>
      <property name="tokens"
               value="LITERAL_TRY, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH"/>
    </module>
    <module name="NeedBraces">
      <property name="tokens"
               value="LITERAL_DO, LITERAL_ELSE, LITERAL_FOR, LITERAL_IF, LITERAL_WHILE"/>
    </module>
    <module name="LeftCurly">
      <property name="tokens"
               value="ANNOTATION_DEF, CLASS_DEF, CTOR_DEF, ENUM_CONSTANT_DEF, ENUM_DEF,
                    INTERFACE_DEF, LAMBDA, LITERAL_CASE, LITERAL_CATCH, LITERAL_DEFAULT,
                    LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF,
                    LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE, METHOD_DEF,
                    OBJBLOCK, STATIC_INIT, RECORD_DEF, COMPACT_CTOR_DEF"/>
    </module>
    <module name="RightCurly">
      <property name="id" value="RightCurlySame"/>
      <property name="tokens"
               value="LITERAL_TRY, LITERAL_CATCH, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE,
                    LITERAL_DO"/>
    </module>
    <module name="RightCurly">
      <property name="id" value="RightCurlyAlone"/>
      <property name="option" value="alone"/>
      <property name="tokens"
               value="CLASS_DEF, METHOD_DEF, CTOR_DEF, LITERAL_FOR, LITERAL_WHILE, STATIC_INIT,
                    INSTANCE_INIT, ANNOTATION_DEF, ENUM_DEF, INTERFACE_DEF, RECORD_DEF,
                    COMPACT_CTOR_DEF"/>
    </module>
    <module name="SuppressionXpathSingleFilter">
      <!-- suppresion is required till https://github.com/checkstyle/checkstyle/issues/7541 -->
      <property name="id" value="RightCurlyAlone"/>
      <property name="query" value="//RCURLY[parent::SLIST[count(./*)=1]
                                     or preceding-sibling::*[last()][self::LCURLY]]"/>
    </module>
    <module name="WhitespaceAfter">
      <property name="tokens"
               value="COMMA, SEMI, TYPECAST, LITERAL_IF, LITERAL_ELSE, LITERAL_RETURN,
                    LITERAL_WHILE, LITERAL_DO, LITERAL_FOR, LITERAL_FINALLY, DO_WHILE, ELLIPSIS,
                    LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_CATCH, LAMBDA,
                    LITERAL_YIELD, LITERAL_CASE"/>
    </module>
    <module name="WhitespaceAround">
      <property name="allowEmptyConstructors" value="true"/>
      <property name="allowEmptyLambdas" value="true"/>
      <property name="allowEmptyMethods" value="true"/>
      <property name="allowEmptyTypes" value="true"/>
      <property name="allowEmptyLoops" value="true"/>
      <property name="ignoreEnhancedForColon" value="false"/>
      <property name="tokens"
               value="ASSIGN, BAND, BAND_ASSIGN, BOR, BOR_ASSIGN, BSR, BSR_ASSIGN, BXOR,
                    BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN, DO_WHILE, EQUAL, GE, GT, LAMBDA, LAND,
                    LCURLY, LE, LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY,
                    LITERAL_FOR, LITERAL_IF, LITERAL_RETURN, LITERAL_SWITCH, LITERAL_SYNCHRONIZED,
                    LITERAL_TRY, LITERAL_WHILE, LOR, LT, MINUS, MINUS_ASSIGN, MOD, MOD_ASSIGN,
                    NOT_EQUAL, PLUS, PLUS_ASSIGN, QUESTION, RCURLY, SL, SLIST, SL_ASSIGN, SR,
                    SR_ASSIGN, STAR, STAR_ASSIGN, LITERAL_ASSERT, TYPE_EXTENSION_AND"/>
      <message key="ws.notFollowed"
              value="WhitespaceAround: ''{0}'' is not followed by whitespace. Empty blocks
               may only be represented as '{}' when not part of a multi-block statement (4.1.3)"/>
      <message key="ws.notPreceded"
              value="WhitespaceAround: ''{0}'' is not preceded with whitespace."/>
    </module>
    <module name="OneStatementPerLine"/>
    <module name="MultipleVariableDeclarations"/>
    <module name="ArrayTypeStyle"/>
    <module name="MissingSwitchDefault"/>
    <module name="FallThrough"/>
    <module name="UpperEll"/>
    <module name="ModifierOrder"/>
    <module name="EmptyLineSeparator">
      <property name="tokens"
               value="PACKAGE_DEF, IMPORT, STATIC_IMPORT, CLASS_DEF, INTERFACE_DEF, ENUM_DEF,
                    STATIC_INIT, INSTANCE_INIT, METHOD_DEF, CTOR_DEF, VARIABLE_DEF, RECORD_DEF,
                    COMPACT_CTOR_DEF"/>
      <property name="allowNoEmptyLineBetweenFields" value="true"/>
    </module>
    <module name="SeparatorWrap">
      <property name="id" value="SeparatorWrapDot"/>
      <property name="tokens" value="DOT"/>
      <property name="option" value="nl"/>
    </module>
    <module name="SeparatorWrap">
      <property name="id" value="SeparatorWrapComma"/>
      <property name="tokens" value="COMMA"/>
      <property name="option" value="EOL"/>
    </module>
    <module name="SeparatorWrap">
      <!-- ELLIPSIS is EOL until https://github.com/google/styleguide/issues/259 -->
      <property name="id" value="SeparatorWrapEllipsis"/>
      <property name="tokens" value="ELLIPSIS"/>
      <property name="option" value="EOL"/>
    </module>
    <module name="SeparatorWrap">
      <!-- ARRAY_DECLARATOR is EOL until https://github.com/google/styleguide/issues/258 -->
      <property name="id" value="SeparatorWrapArrayDeclarator"/>
      <property name="tokens" value="ARRAY_DECLARATOR"/>
      <property name="option" value="EOL"/>
    </module>
    <module name="SeparatorWrap">
      <property name="id" value="SeparatorWrapMethodRef"/>
      <property name="tokens" value="METHOD_REF"/>
      <property name="option" value="nl"/>
    </module>
    <module name="PackageName">
      <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>
      <message key="name.invalidPattern"
             value="Package name ''{0}'' must match pattern ''{1}''."/>
    </module>
    <module name="TypeName">
      <property name="tokens" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF,
                    ANNOTATION_DEF, RECORD_DEF"/>
      <message key="name.invalidPattern"
             value="Type name ''{0}'' must match pattern ''{1}''."/>
    </module>
    <module name="MemberName">
      <property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
      <message key="name.invalidPattern"
             value="Member name ''{0}'' must match pattern ''{1}''."/>
    </module>
    <module name="ParameterName">
      <property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
      <message key="name.invalidPattern"
             value="Parameter name ''{0}'' must match pattern ''{1}''."/>
    </module>
    <module name="LambdaParameterName">
      <property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
      <message key="name.invalidPattern"
             value="Lambda parameter name ''{0}'' must match pattern ''{1}''."/>
    </module>
    <module name="CatchParameterName">
      <property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
      <message key="name.invalidPattern"
             value="Catch parameter name ''{0}'' must match pattern ''{1}''."/>
    </module>
    <module name="LocalVariableName">
      <property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
      <message key="name.invalidPattern"
             value="Local variable name ''{0}'' must match pattern ''{1}''."/>
    </module>
    <module name="PatternVariableName">
      <property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
      <message key="name.invalidPattern"
             value="Pattern variable name ''{0}'' must match pattern ''{1}''."/>
    </module>
    <module name="ClassTypeParameterName">
      <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
      <message key="name.invalidPattern"
             value="Class type name ''{0}'' must match pattern ''{1}''."/>
    </module>
    <module name="RecordComponentName">
      <property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
      <message key="name.invalidPattern"
               value="Record component name ''{0}'' must match pattern ''{1}''."/>
    </module>
    <module name="RecordTypeParameterName">
      <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
      <message key="name.invalidPattern"
               value="Record type name ''{0}'' must match pattern ''{1}''."/>
    </module>
    <module name="MethodTypeParameterName">
      <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
      <message key="name.invalidPattern"
             value="Method type name ''{0}'' must match pattern ''{1}''."/>
    </module>
    <module name="InterfaceTypeParameterName">
      <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
      <message key="name.invalidPattern"
             value="Interface type name ''{0}'' must match pattern ''{1}''."/>
    </module>
    <module name="NoFinalizer"/>
    <module name="GenericWhitespace">
      <message key="ws.followed"
             value="GenericWhitespace ''{0}'' is followed by whitespace."/>
      <message key="ws.preceded"
             value="GenericWhitespace ''{0}'' is preceded with whitespace."/>
      <message key="ws.illegalFollow"
             value="GenericWhitespace ''{0}'' should followed by whitespace."/>
      <message key="ws.notPreceded"
             value="GenericWhitespace ''{0}'' is not preceded with whitespace."/>
    </module>
    <module name="Indentation">
      <property name="basicOffset" value="2"/>
      <property name="braceAdjustment" value="2"/>
      <property name="caseIndent" value="2"/>
      <property name="throwsIndent" value="4"/>
      <property name="lineWrappingIndentation" value="4"/>
      <property name="arrayInitIndent" value="2"/>
    </module>
    <module name="AbbreviationAsWordInName">
      <property name="ignoreFinal" value="false"/>
      <property name="allowedAbbreviationLength" value="0"/>
      <property name="tokens"
               value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, ANNOTATION_DEF, ANNOTATION_FIELD_DEF,
                    PARAMETER_DEF, VARIABLE_DEF, METHOD_DEF, PATTERN_VARIABLE_DEF, RECORD_DEF,
                    RECORD_COMPONENT_DEF"/>
    </module>
    <module name="NoWhitespaceBeforeCaseDefaultColon"/>
    <module name="OverloadMethodsDeclarationOrder"/>
    <module name="VariableDeclarationUsageDistance"/>
    <module name="CustomImportOrder">
      <property name="sortImportsInGroupAlphabetically" value="true"/>
      <property name="separateLineBetweenGroups" value="true"/>
      <property name="customImportOrderRules" value="STATIC###THIRD_PARTY_PACKAGE"/>
      <property name="tokens" value="IMPORT, STATIC_IMPORT, PACKAGE_DEF"/>
    </module>
    <module name="MethodParamPad">
      <property name="tokens"
               value="CTOR_DEF, LITERAL_NEW, METHOD_CALL, METHOD_DEF,
                    SUPER_CTOR_CALL, ENUM_CONSTANT_DEF, RECORD_DEF"/>
    </module>
    <module name="NoWhitespaceBefore">
      <property name="tokens"
               value="COMMA, SEMI, POST_INC, POST_DEC, DOT,
                    LABELED_STAT, METHOD_REF"/>
      <property name="allowLineBreaks" value="true"/>
    </module>
    <module name="ParenPad">
      <property name="tokens"
               value="ANNOTATION, ANNOTATION_FIELD_DEF, CTOR_CALL, CTOR_DEF, DOT, ENUM_CONSTANT_DEF,
                    EXPR, LITERAL_CATCH, LITERAL_DO, LITERAL_FOR, LITERAL_IF, LITERAL_NEW,
                    LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_WHILE, METHOD_CALL,
                    METHOD_DEF, QUESTION, RESOURCE_SPECIFICATION, SUPER_CTOR_CALL, LAMBDA,
                    RECORD_DEF"/>
    </module>
    <module name="OperatorWrap">
      <property name="option" value="NL"/>
      <property name="tokens"
               value="BAND, BOR, BSR, BXOR, DIV, EQUAL, GE, GT, LAND, LE, LITERAL_INSTANCEOF, LOR,
                    LT, MINUS, MOD, NOT_EQUAL, PLUS, QUESTION, SL, SR, STAR, METHOD_REF,
                    TYPE_EXTENSION_AND "/>
    </module>
    <module name="AnnotationLocation">
      <property name="id" value="AnnotationLocationMostCases"/>
      <property name="tokens"
               value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF,
                      RECORD_DEF, COMPACT_CTOR_DEF"/>
    </module>
    <module name="AnnotationLocation">
      <property name="id" value="AnnotationLocationVariables"/>
      <property name="tokens" value="VARIABLE_DEF"/>
      <property name="allowSamelineMultipleAnnotations" value="true"/>
    </module>
    <module name="NonEmptyAtclauseDescription"/>
    <module name="InvalidJavadocPosition"/>
    <module name="JavadocTagContinuationIndentation"/>
    <module name="SummaryJavadoc">
      <property name="forbiddenSummaryFragments"
               value="^@return the *|^This method returns |^A [{]@code [a-zA-Z0-9]+[}]( is a )"/>
    </module>
    <module name="JavadocParagraph"/>
    <module name="RequireEmptyLineBeforeBlockTagGroup"/>
    <module name="AtclauseOrder">
      <property name="tagOrder" value="@param, @return, @throws, @deprecated"/>
      <property name="target"
               value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/>
    </module>
    <module name="JavadocMethod">
      <property name="accessModifiers" value="public"/>
      <property name="allowMissingParamTags" value="true"/>
      <property name="allowMissingReturnTag" value="true"/>
      <property name="allowedAnnotations" value="Override, Test"/>
      <property name="tokens" value="METHOD_DEF, CTOR_DEF, ANNOTATION_FIELD_DEF, COMPACT_CTOR_DEF"/>
    </module>
    <module name="MissingJavadocMethod">
      <property name="scope" value="public"/>
      <property name="minLineCount" value="2"/>
      <property name="allowedAnnotations" value="Override, Test"/>
      <property name="tokens" value="METHOD_DEF, CTOR_DEF, ANNOTATION_FIELD_DEF,
                                   COMPACT_CTOR_DEF"/>
    </module>
    <module name="MissingJavadocType">
      <property name="scope" value="protected"/>
      <property name="tokens"
                value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF,
                      RECORD_DEF, ANNOTATION_DEF"/>
      <property name="excludeScope" value="nothing"/>
    </module>
    <module name="MethodName">
      <property name="format" value="^[a-z][a-z0-9]\w*$"/>
      <message key="name.invalidPattern"
             value="Method name ''{0}'' must match pattern ''{1}''."/>
    </module>
    <module name="SingleLineJavadoc"/>
    <module name="EmptyCatchBlock">
      <property name="exceptionVariableName" value="expected"/>
    </module>
    <module name="CommentsIndentation">
      <property name="tokens" value="SINGLE_LINE_COMMENT, BLOCK_COMMENT_BEGIN"/>
    </module>
    <!-- https://checkstyle.org/config_filters.html#SuppressionXpathFilter -->
    <module name="SuppressionXpathFilter">
      <property name="file" value="${org.checkstyle.google.suppressionxpathfilter.config}"
             default="checkstyle-xpath-suppressions.xml" />
      <property name="optional" value="true"/>
    </module>
    <module name="SuppressWarningsHolder" />
    <module name="SuppressionCommentFilter">
      <property name="offCommentFormat" value="CHECKSTYLE.OFF\: ([\w\|]+)" />
      <property name="onCommentFormat" value="CHECKSTYLE.ON\: ([\w\|]+)" />
      <property name="checkFormat" value="$1" />
    </module>
    <module name="SuppressWithNearbyCommentFilter">
      <property name="commentFormat" value="CHECKSTYLE.SUPPRESS\: ([\w\|]+)"/>
      <!-- $1 refers to the first match group in the regex defined in commentFormat -->
      <property name="checkFormat" value="$1"/>
      <!-- The check is suppressed in the next line of code after the comment -->
      <property name="influenceFormat" value="1"/>
    </module>
  </module>
</module>

Gruss Hein_nieH
 

LimDul

Top Contributor

ATTENTION: Links to config and test in following table reference to latest (not released yet) config. Config might be slightly different from what we have in latest release. Please always use config that is embedded to jar or use a custom version copied from one that matches your checkstyle version.

This is exactly your case, since token COMPACT_CTOR_DEF was added after 8.35 release.
Die Google Checks passt nicht zur Checkstyle. Entweder die google Checks aus dem Jar entpacken oder checkstyle aktualisieren.
 

Hein_nieH

Bekanntes Mitglied
... Mist kein Erfolg.

Ich habe jetzt google_checks.xml aus allen checkstyle jar.-Versionen von 8.35 bis 8.11 getestet. Es kommt ständig eine Fehlermeldung, hier bei Verwendung von google_checks.xml Version 8-11. :-(

[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7.709 s
[INFO] Finished at: 2022-10-23T14:06:29+02:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:3.1.1:check (validate) on project DVD_Archiv: Failed during checkstyle configuration: cannot initialize module TreeWalker - TreeWalker is not allowed as a parent of LineLength Please review 'Parent Module' section for this Check in web documentation if Check is standard. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.

Nun mal eine Frage:
wenn ich in meiner pom.xml diese Konfiguration verwende funktioniert es ja.
XML:
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <version>3.1.1</version>
                <configuration>
                    
                    <configLocation>google_checks.xml</configLocation>
                    
                    <encoding>cp1252</encoding>
                    <consoleOutput>true</consoleOutput>
                    <failsOnError>true</failsOnError>
                    <linkXRef>false</linkXRef>
                </configuration>
Kann ich daraus Rückschlüsse ziehen, welche Version von Google_check.xml für den Build verwendet wird?
Es muss doch eine Lösung geben :)

Gruss Hein_nieH
 

Hein_nieH

Bekanntes Mitglied
Nutzt CheckStyle 8.29, wenn du die Check daraus nutzt sollte es klappen
Bingo ... das war ein guter Tip :)
Ich habe jetzt google_checks.xml aus dem checkstyle.jar-Paket 8.29 extern eingebunden ...
und tatsächlich der Build läuft jetzt durch.

Wie wäre jetzt die Erklärung dazu?
Ich hatte ja auch eine niedrige Version 8.11 verwendet und da gab es eine Fehlermeldung.

Nun werde ich mal die google_checks.xml 8.29 an meine Bedürfnisse anpassen.

Gruss Hein_nieH
 

Hein_nieH

Bekanntes Mitglied
Jetzt funktioniert es :)

Nachdem die google_checks.xml Version 8.29 jetzt funktioniert, konnte ich auch die Definition (öffnende Klammer in
einer neuen Zeile) einpflegen.
Ausnahmsweise hat es dann auch mal auf Anhieb funktioniert.

Vielen Dank für die Unterstützung.

Eine weitere Frage zu einer weiteren Definition hätte ich noch
Ich möchte das vor und hinter den Vergleichsoperatoren ein Leerzeichen steht, d.h

statt x=1 in x = 1
statt x<=1 in x <= 1
usw.

Weiss jemand, welche Definition in der google_checks.xml dort geändert werden muss.
Sofern es die Zeit erlaubt muss ich mich ohnehin mit der Doku von Checkstyle beschäftigen.

Gruss Hein_nieH
 

Ähnliche Java Themen

Neue Themen


Oben