Ich versuche, Maven zu erhalten, um Lint-Level-Warnungen auszugeben. Ich habe ein kleines Testprogramm erstellt, das eine Warnung über die Verwendung einer statischen Methode aus einem nicht statischen Kontext generieren sollte, aber trotz einer Reihe verschiedener Plugin-Konfigurationsoptionen ist der Build immer ohne Warnungen möglich!Problem mit -Xlint: alle und maven
Nachdem ich etwas gegoogelt habe, habe ich Vorschläge gefunden, das 'compilerArgument (s)' Attribut des Compiler Plugins zu verwenden, aber das scheint auch nicht für mich zu funktionieren.
Hier ist mein Beispielprogramm, das die Warnung erzeugen soll:
package com.dahlgren;
/**
* Test space
*
*/
public class App {
public static void main(String[] args) {
String foo = "foo";
// I want this to generate a compilation warning
System.out.println(foo.format("blah"));
}
}
Dieses Programm sollte eine Warnung ausgeben, als javadoc für Java 6 String :: Format gibt an, dass nur statische Versionen dieser Methode existieren. Ich möchte diesen Fall speziell fangen, wie es mir in der Vergangenheit gebissen hat und der Compiler sollte es erkennen :-)
Hier ist meine pom-Datei:
<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>com.dahlgren</groupId>
<artifactId>JavaScratchSpace</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>JavaScratchSpace</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<compilerArgument>-Xlint:all</compilerArgument>
<!--
<compilerArguments>
<Xlint:all />
</compilerArguments>
-->
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.dahlgren.App</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
ich beide Formen der versucht haben, compilerArgument (s) -Attribute ohne Erfolg.
mvn clean compile
Lauf ergibt die folgende Ausgabe:
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building JavaScratchSpace 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.3:clean (default-clean) @ JavaScratchSpace ---
[INFO] Deleting file set: /work/fun/JavaScratchSpace/target (included: [**], excluded: [])
[INFO]
[INFO] --- maven-resources-plugin:2.3:resources (default-resources) @ JavaScratchSpace ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /work/fun/JavaScratchSpace/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.0:compile (default-compile) @ JavaScratchSpace ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /work/fun/JavaScratchSpace/target/classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.716s
[INFO] Finished at: Tue Mar 12 11:39:21 PDT 2013
[INFO] Final Memory: 8M/150M
[INFO] ------------------------------------------------------------------------
Zusätzliche Versionsinformationen:
$ mvn --version && javac -version
Apache Maven 3.0.4
Maven home: /usr/share/maven
Java version: 1.6.0_24, vendor: Sun Microsystems Inc.
Java home: /usr/lib/jvm/java-6-openjdk-amd64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.2.0-29-generic", arch: "amd64", family: "unix"
javac 1.6.0_24
Mit der von Ihnen geposteten Methode scheint das Compiler-Plugin die verschachtelten XML-Tags als tatsächliche Compilerparameter zu interpretieren. Maven gibt Folgendes aus: "Fehler beim Ausführen des Ziels org.apache.maven.plugins: maven-compiler-plugin: 3.0: kompilieren (Standard-kompilieren) im Projekt JavaScratchSpace: Schwerwiegender Fehler beim Kompilieren: ungültiges Flag: -compilerArgument" - das ist wann mit "\t \t \t \t \t \t \t \t \t \t \t -Xlint: alle compilerArgument> \t \t \t \t \t compilerArguments>" - vielleicht die Version ich verwende hat unterschiedliche Semantik?Ich habe Maven-Compiler-Plugin-Version 3.0 –
@RonDahlgren Sorry, ich habe festgestellt, dass ich wirklich die erste Antwort vermasselt, hoffentlich wird die redigierte Ihnen von Nutzen sein. –
Scheint wie es war mein Javac die ganze Zeit! Sieht so aus, als ob openjdk die Verwendung dieser statischen Methode nicht korrekt erfasst. Der Pom, den du gepostet hast, funktioniert wie beabsichtigt, mein Javac entscheidet sich einfach dafür, ihn zu ignorieren. Überprüft mit 'javac -Xlint: all App.java' direkt. Danke für die Hilfe! –