2013-03-12 17 views
5

Tiftik düzey uyarıları vermek için maven almaya çalışıyorum. Statik olmayan bir bağlamdan statik bir yöntem kullanmak konusunda bir uyarı üretmesi gereken küçük bir test programı oluşturdum, ancak bir dizi farklı eklenti konfigürasyon seçeneğine rağmen, derleme her zaman herhangi bir uyarı olmadan başarılı oluyor!-Xlint ile sorun: all ve maven

Bazı işler yaptıktan sonra derleyici eklentisinin 'compilerArgument (ler)' özniteliğini kullanma önerilerini buldum, ancak bu benim için de çalışmıyor gibi görünüyor. Java 6 dize için javadoc olarak,

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

Bu program bir uyarı olmalıdır :: formatı bu yöntemin sadece statik versiyonları var olduğunu gösterir:

İşte uyarı oluşturmalıdır benim örnek program. Ben her iki formu denedim

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

: Geçmişte beni ısırdı ve derleyici İşte

benim pom dosyasıdır :-) bunu algılamalıdır gibi ben özellikle bu durumda yakalamak istiyor compilerArgument (ler) öznitelikleri boşuna.

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

Ek sürüm bilgileri:

$ 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 

cevap

7

Bu kaynaklarla "Benim için çalışıyor" mvn clean compile Running

şu çıktıyı verir.

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

Ben neden senin "hepsi" etiketi anlamına gelen ineceğine olan

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

çünkü XML ad alanı "Xlint" nin başarısız olan bir girişimde dışarı yorumladı hayal olduğunu tüm etiket “Xlint: hepsi” muhtemelen maven konfigürasyon ayrıştırıcısı tarafından görülmedi (farklı bir isim alanında ve tümünde). Bu arada

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

çıktı

satırları ve benim çevre
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" 

Belki bir platforma özel böcek bastı?

+1

Gönderdiğiniz yöntemi kullanarak, derleyici eklentinin yuvalanmış xml etiketlerini gerçek derleyici paramları olarak yorumladığı görülüyor. Maven aşağıdaki çıktılar: "Hedefi çalıştırmak için başarısız oldu: org.apache.maven.plugins: maven-compiler-plugin: 3.0: proje üzerinde derleme (varsayılan derleme) JavaScratchSpace: Önemli bir hata derleme: geçersiz flag: -compilerArgument" - ne zaman kullanarak "\t \t \t \t \t \t \t \t \t \t \t -Xlint: tüm \t \t \t \t \t" - belki kullanıyorum sürümü farklı sözcüklerle vardır?Maven-compiler-plugin 3.0 sürümünü güncelledim –

+0

@RonDahlgren Üzgünüm, ilk cevabı berbat ettiğimi fark ettim, umarım düzenlenmiş olanın size faydası olacaktır. –

+1

Tüm javacım gibiydi! Openjdk, bu statik yöntem kullanımını doğru şekilde yakalamıyor gibi görünüyor. Gönderdiğiniz pom, istediği gibi çalışıyor, javac'ım bunu görmezden gelmeyi seçiyor. Doğrudan 'javac -Xlint: all App.java' kullanarak doğrulandı. Yardım için teşekkürler! –