JavaNCSS und der Diamond-Operator

Ich bin vor einigen Monaten über ein Problem gestolpert, welches nicht dringlich genug war, sich genauer damit auseinanderzusetzen. Und zwar hat sich JavaNCSS am Diamond-Operator gestört und folgenden Output erzeugt:

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building mavenproject1 0.1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- javancss-maven-plugin:2.0:report (default-cli) @ mavenproject1 ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.146s
[INFO] Finished at: Thu Jan 29 11:00:06 CET 2015
[INFO] Final Memory: 18M/491M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:javancss-maven-plugin:2.0:report (default-cli) on project mavenproject1: An error has occurred in JavaNCSS Report report generation. Error while JavaNCSS was executing: Encountered " ">" "> "" at line 18, column 50.
[ERROR] Was expecting one of:
[ERROR] "boolean" ...
[ERROR] "byte" ...
[ERROR] "char" ...
[ERROR] "double" ...
[ERROR] "float" ...
[ERROR] "int" ...
[ERROR] "long" ...
[ERROR] "short" ...
[ERROR] <IDENTIFIER> ...
[ERROR] "?" ...
[ERROR] "boolean" ...
[ERROR] "char" ...
[ERROR] "byte" ...
[ERROR] "short" ...
[ERROR] "int" ...
[ERROR] "long" ...
[ERROR] "float" ...
[ERROR] "double" ...
[ERROR] <IDENTIFIER> ...
[ERROR] "?" ...
[ERROR] "?" ...
[ERROR] "?" ...
[ERROR] "?" ...
[ERROR] -> [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

 

 

Das mochte ich gar nicht glauben, da der Diamond-Operator mit Java 7 im Jahre 2011 eingeführt wurde und die <a href=”http://javancss.codehaus.org/release-history.html”>letzte JavaNCSS-Version 2014</a> veröffentlicht wurde. Da musste irgendwas auf meiner Seite falsch sein.

Also habe ich ein kurzes Hello-World Programm genommen:

package test.mavenproject1;

import java.util.ArrayList;
import java.util.List;

public class Main
{

    public List<String> list = new ArrayList<>();

    public static void main(String[] args)
    {
        System.out.println("hello world");
    }
}

 

und eine minimalistische POM.XML:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>test</groupId>
    <artifactId>mavenproject1</artifactId>
    <version>0.1</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>
    
    <reporting>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>javancss-maven-plugin</artifactId>
                <version>2.1</version>
            </plugin>
        </plugins>
    </reporting>
</project>

 

Dann auf der Konsole

mvn javancss:report

eingegeben, nur um die obige Fehlerausgabe zu erhalten. Was mich stutzig machte, war die Tatsache, dass ich in der POM Version 2.1 für JavaNCSS angegeben hatte, die Fehlermeldung aber Version 2.0 ausgab. Witzigerweise funktionierte ein

mvn site:site

einwandfrei. Inklusive JavaNCSS-Report.

Rätsels Lösung: ich muss das Plugin ebenfalls in der Build-Sektion der POM spezifizieren:

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>javancss-maven-plugin</artifactId>
                    <version>2.1</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

Dann wird auch Version 2.1 verwendet und JavaNCSS kennt auch den Diamond-Operator. Darauf gekommen bin ich erst, als ich folgendes gelesen habe:

Important Note: It is recommended to always defined each version of the plugins used by the build to guarantee the build reproducibility. A good practice is to specify them in the <build><pluginManagement/></build> elements for each build plugins (generally, you will define a <pluginManagement/> element in a parent POM). For reporting plugins, you should specify each version in the <reporting><plugins/></reporting> elements (and surely in the <build><pluginManagement/></build> elements too).

(Quelle)

Na denn…

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>