2013-03-12 12 views
5

Sto cercando di convincere Maven ad emettere avvisi di livello di lanugine. Ho creato un piccolo programma di test che dovrebbe generare un avviso sull'utilizzo di un metodo statico da un contesto non statico, ma nonostante un numero di opzioni di configurazione del plugin diverse, la compilazione riesce sempre senza alcun avviso!Problemi con -Xlint: tutti e Maven

Dopo aver fatto qualche ricerca su google, ho trovato suggerimenti per utilizzare l'attributo 'compilerArgument (s)' del plug-in del compilatore, ma anche questo non sembra funzionare per me.

Ecco il mio programma di esempio che dovrebbe generare l'avviso:

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

Questo programma dovrebbe emettere un avvertimento, come javadoc per Java 6 String :: formato indica che esistono solo versioni statiche di questo metodo. Voglio prendere questo caso specifico, come mi ha morso in passato e il compilatore dovrebbe rilevarlo :-)

Ecco il mio file pom:

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

Ho provato entrambe le forme del attributi di compilerArgument (s) inutilmente.

Esecuzione mvn clean compile produce il seguente output:

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

Ulteriori informazioni sulla versione:

$ 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 

risposta

7

Questo "lavora per me" con le tue fonti.

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

immagino che il motivo per il vostro commentata tentativo con

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

non riesce a causa dello spazio dei nomi XML "Xlint" che il tag "tutti" sarebbe cadere in, il che significa che l'intero tag "Xlint: all" probabilmente non è stato nemmeno visto dal parser di configurazione di Maven (che si trova in un namespace diverso e tutto).

Tra l'altro, le linee rilevanti di uscita

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 

e il mio ambiente

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" 

Forse calpestato un bug specifico piattaforma?

+1

Utilizzando il metodo che hai postato, sembra che il plug-in del compilatore interpreti i tag xml nidificati come parametri del compilatore. Maven restituisce quanto segue: "Impossibile eseguire l'obiettivo org.apache.maven.plugins: maven-compiler-plugin: 3.0: compile (default-compile) sul progetto JavaScratchSpace: errore irreversibile compilazione: flag non valido: -compilerArgument" - questo è quando utilizzando "\t \t \t \t \t \t \t \t \t \t \t -Xlint: tutti \t \t \t \t \t" - forse la versione che sto usando ha una semantica diversa?Ho specificato maven-compiler-plugin versione 3.0 –

+0

@RonDahlgren Ci dispiace, ho capito che ho davvero incasinato la risposta iniziale, speriamo che quella modificata sarà di qualche utilità per voi. –

+1

Sembra che fosse il mio javac da sempre! Sembra che openjdk non stia interferendo correttamente con questo metodo statico. Il pom che hai postato funziona come previsto, il mio javac sceglie di ignorarlo. Verificato utilizzando 'javac -Xlint: all App.java' direttamente. Grazie per l'aiuto! –

Problemi correlati