2013-03-12 6 views
5

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 

Antwort

7

Dieses "funktioniert für mich" mit Ihrer Quellen.

<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.buck</groupId> 
    <artifactId>mavenproject3</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>mavenproject3</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 

    <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> 
      <showWarnings>true</showWarnings> 
      <showDeprecation>true</showDeprecation> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

Ich stelle mir vor, dass der Grund Ihr Versuch auf Kommentar mit

   <compilerArguments> 
        <Xlint:all /> 
       </compilerArguments> 

wird wegen des XML-Namespace „Xlint“ failing, dass die „alle“ Tag in fallen würden, was bedeutet, dass der gesamte Tag "Xlint: all" wurde wahrscheinlich nicht einmal vom Maven-Konfigurations-Parser erkannt (er befand sich in einem anderen Namensraum und allen anderen).

By the way, die entsprechenden Zeilen der Ausgabe

Compiling 1 source file to C:\Users\edwbuck\Documents\NetBeansProjects\mavenproject3\target\classes 
bootstrap class path not set in conjunction with -source 1.6 
com/buck/mavenproject3/App.java:[12,35] static method should be qualified by type name, java.lang.String, instead of by an expression 

und meine Umgebung

Apache Maven 3.0.4 (r1232337; 2012-01-17 02:44:56-0600) 
Maven home: C:\Program Files\NetBeans 7.2.1\java\maven 
Java version: 1.7.0_07, vendor: Oracle Corporation 
Java home: C:\Program Files (x86)\Java\jdk1.7.0_07\jre 
Default locale: en_US, platform encoding: Cp1252 
OS name: "windows 7", version: "6.1", arch: "x86", family: "windows" 

Vielleicht trat man auf einer Plattform spezifische Bug?

+1

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 \t \t \t \t \t" - vielleicht die Version ich verwende hat unterschiedliche Semantik?Ich habe Maven-Compiler-Plugin-Version 3.0 –

+0

@RonDahlgren Sorry, ich habe festgestellt, dass ich wirklich die erste Antwort vermasselt, hoffentlich wird die redigierte Ihnen von Nutzen sein. –

+1

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