2013-05-13 29 views
5

Yapım sürecini şimdiye kadar tamamen karınca/kabuk betiklerine dayanan bir proje (yani bu bir sözcük mü?).Enum açıldığında Maven derleme başarısızlığı

aşağıdaki enum düşünün

public enum ResourceType { 
    A, B; 
} 

aşağıdaki fasulye:

public ResourceTypeOwner { 
    //set get resourceType property 
} 

Ve aşağıdaki kod parçacığı:

void foo(ResourceTypeOwner rto) { 
    ResourceType resourceType = rto.getResourceType(); 
    switch (resourceType) { 
    case A: 
     handleA(resourceType); break; 
    case B: 
     handleB(resourceType); break; 
    default: 
     throw new RuntimeException("Unsupported resource type"); 
    } 
} 

maven ile oluştururken bir derleme hatası alıyorum:

ResourceType türünde bir değer açılamıyor. Sadece int değerler veya numaralama değişkenleri dönüştürülebilir izin

pom.xml sahip

<plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.0</version> 
     <configuration> 
      <compilerId>eclipse</compilerId> 
      <compilerVersion>1.6</compilerVersion> 
      <source>1.6</source> 
      <target>1.6</target> 
     </configuration> 
     <dependencies> 
      <dependency> 
       <groupId>org.codehaus.plexus</groupId> 
       <artifactId>plexus-compiler-eclipse</artifactId> 
       <version>2.2</version> 
      </dependency> 
     </dependencies> 
    </plugin> 
... 
</plugins> 

Hem (org.eclipse.jdt.core.JDTCompilerAdapter) ile karınca ve tutulması derleme için, aşağıdaki eklenti yapılandırma derleme/derleme. Açıkçası yanlış bir şey yapıyorum (bir kayıtsız maven-derleyici-eklenti veya pleksus-derleyici-eclipse eklenti hata, bu biraz muhtemel, enumlar geçiş yapmak ne kötü ne roket bilimi değildir). Herhangi birinin bir fikri var mı?

Ek çevre detayları

$ mvn -version Apache Maven 3.0.4 (r1232337; 2012-01-17 10: 44: + 0200 56) Maven'in ev:/home/d/dev/araçları /apache-maven-3.0.4 Java sürümü: 1.6.0_35, satıcı: Sun Microsystems Inc. Java ana sayfası: /opt/jdk1.6.0_35/jre Varsayılan yerel ayar: en_US, platform kodlaması: UTF-8 OS adı: " linux", sürüm: "", kemer: "3.2.0-40-jenerik amd64", ailesi: "uNIX"

GÜNCELLEME:

Standart JDK derleyici, belirli bir sınıfı başarıyla derler. Bir pleksus derleyici eclipse 2.2 sorun gibi görünüyor.

+1

kontrol edin. Aynı ada sahip başka bir (normal) sınıfa sahip olduğunuzu düşünüyorum. – AlexR

+1

Sadece aynı adla sınıflar için tüm mvn deposunu aradım. Hiç yok. Ayrıca, iki farklı Enum üzerinde gerçekleşir (bunlar, bir projenin tüm projeye geçtiği tek durumlardır). Son olarak enum'u ResourceType123456'ya (eclipse refactor ile) değiştirdi. Aynı sorun. Thx olsa da. – dkateros

+1

eclipse derleyicisini kullanmak zorunda mısın? jdk bir sorun ne? – radai

cevap

4

Sorunu yeniden oluşturup buldum.

numarasını tanımak için org.eclipse.jdt.core.compiler.compliance ayarının numaralı telefonu tanıması için hedef versiyona ayarlanması gerektiğine karar verilir.

Bu ayar, yalnızca targetVersion AND optimize ayarlandığında plexus-derleyici tutulması tarafından ayarlanır.[1]

bu gibi pom değiştirin ve çalışması gerekir:

<plugins> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>3.1</version> <!-- or 3.0 --> 
    <configuration> 
     <compilerId>eclipse</compilerId> 
     <source>1.6</source> 
     <target>1.6</target> 
     <optimize>true</optimize> <!-- add this line! --> 

emin değilim o optimizasyon uyum düzeyini etkileyecek-Tutulma pleksus-derleyici karar verildi yüzden, bu da öyle aslında bir çözüm.

Ayrıca, bu kod sorunu tetiklemek için yeterlidir:

class Foo { 
    static enum MyEnum { A } 

    void foo() { 
     switch (MyEnum.A) { case A: } 
    } 
} 

[1] (bağımlılıkları dahil) sınıf yolunda yalnızca bir `ResourceType` olup olmadığını https://github.com/sonatype/plexus-compiler/blob/master/plexus-compilers/plexus-compiler-eclipse/src/main/java/org/codehaus/plexus/compiler/eclipse/EclipseJavaCompiler.java#L156

+0

[github issue] (https://github.com/sonatype/plexus-compiler/issues/16) – Kenney

+0

Bu yarın sabah işte bir kez test edip onaylayacak, ama erken bir şeye benziyor. – dkateros

+0

Kabul edildi. Tekrar teşekkür ederim. – dkateros

0

Maven derlemesinde eclipse derleyicisini kullanmayın. Satır atlarsanız

<compilerId>eclipse</compilerId> 

her şey bu tutulma derleyici özgü bir sorun olduğunu gösteren, gayet iyi çalışıyor.

+0

Benim maven yapılandırmam eclipse derleyicisini kullanır. Java7 bir seçenek değildir. Rt1 == rt2'yi neden sadece enum anahtarını yapan sınıfın iç sınıfı olduğunda anlamıyorum. Normal JDK belirli sınıfları derler, pleksus-derleyici-eclipse eklentisinin bir hatası gibi görünüyor. – dkateros

+0

@dkateros: Üzgünüz, yanlış bir yöne yönlendirildiğimi tespit ettiğimde cevabımı tamamen değiştirdim. Ama dediğim gibi, eclipse derleyici kullanılmadığında iyi olacak. Ya da normal JDK yerine onu kullanmak için özel bir neden var mı? Kişi her zaman maven yapımı IDE agnostik yapmaya çalışmalıdır. –

+0

Cevabınız için teşekkürler. Ne yazık ki, derleme eclipse derleyicisi olmadan sayısız sorunla başarısız olacaktır:/Ben pleksus kullanıcıları posta listesinde sorun yayınladı. – dkateros