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
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 compilerArgument> \t \t \t \t \t compilerArguments>" - forse la versione che sto usando ha una semantica diversa?Ho specificato maven-compiler-plugin versione 3.0 –
@RonDahlgren Ci dispiace, ho capito che ho davvero incasinato la risposta iniziale, speriamo che quella modificata sarà di qualche utilità per voi. –
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! –