2011-11-18 29 views
21

Bir proje için Java 7 denediğiniz ve bu tür açıklama işlemciler gelen uyarılara (Bindgen ve Hazırda JPA modelgen) alıyorum:İleri uyumlu Java 6 ek açıklama işlemci ve SupportedSourceVersion

warning: Supported source version 'RELEASE_6' from annotation processor 'org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor' less than -source '1.7' 

Bu @SupportedSourceVersion(SourceVersion.RELEASE_6) kaynaklanır açıklama notu sınıfları üzerinde ek açıklama. Java 6 ile derlendikleri için, bunlara uygun en yüksek SourceVersion değeri RELEASE_6'dur. SourceVersion'un Java 7 sürümü, RELEASE_7'u tanıtmaktadır.

Sorularım: Ek açıklama işlemcilerin ileri uyumluluğu nasıl ele almaları gerekiyor? Ayrı jdk6 ve jdk7 ikili sürümleri olmalı mı? Burada başka bir şey anlamadım mı?

Querdydsl bug report

@Override 
public SourceVersion getSupportedSourceVersion() { 
    return SourceVersion.latest(); 
} 

Oracle blog kullanılan edildiği bir commentor destekleyen önerir son kaynak sürümü İleri uyumluluk işleyerek bilinmeyen dil tarafından ele alınır

cevap

12

:

Sadece bu endişe ilgili şu bilgileri bulundu Örneğin ElementVisitor.visitUnknown'u uygulayarak uygun şekilde yapılandırır.
  • mevcut dil sürümüyle sadece işe işlemciyi yazın: ileri uyumluluk ile ilgili iki politikaları önerir sözü Oracle blog başka bir girişi vardır

    .

  • Bilinmeyen gelecek yapılarla başa çıkmak için işlemciyi yazın.

ikincisi olarak zaten söz konusu yayınlanmıştır SourceVersion.latest() dönen yapılır.

Çoğu durumda, ek dil öğelerinin herhangi bir şeyi kırmayacağından emin olduğunuzda bunu yapmak iyi olur. Tabi ki, yeni sürümlerde bile her şeyin yolunda gideceğini düşünmemeniz gerekir, bunu da test etmelisiniz.


Tamam, işte bazı örnekler, işleme bilinmeyen dil uygun yapıları belirsiz biraz geliyor sanırım.

Bilinen dil yapılarında (örneğin, sınıftaki ek açıklamalar) özel ek açıklamaları kontrol eden ve bulduğu şeyin basit bir belgelerini oluşturan bir işlemciniz olduğunu varsayalım. Daha yeni sürümlerde de çalışacağını varsaymak muhtemelen güvenlidir. Belirli bir sürümle kısıtlamak benim görüşüme göre iyi bir karar olmayacaktır.

Her öğeyi denetleyen bir işlemciniz olduğunu ve kod yapısını dışarıdan bir grafik oluşturmak için bulabildiğini ve analiz ettiğini varsayalım. Daha yeni sürümler ile sorunla karşılaşabilirsiniz. Bilinmeyen dil yapılarını bir şekilde ele alabilirsin (örneğin bir bilinmeyen düğümünü grafiğe ekleyerek), ancak bu mantıklıysa bunu yapın - ve eğer sorun buysa.İşlemcinin bilinmeyen bir şeyle karşılaştığı zaman daha fazla faydası olmazsa, muhtemelen belirli bir java sürümüne bağlı kalması gerekir.

Kullanılan politika ne olursa olsun, benim düşüncemdeki en iyi yol, dile yönelik değişiklikleri izlemek ve işlemciyi buna göre güncellemek olacaktır. Örneğin, Java 7'de, project coin, büyük olasılıkla bir işlemci tarafından görülemeyen bazı yeni dil özelliklerini tanıttı. Öte yandan Java 8, işleme etkileyecek yeni yapılara sahiptir, örneğin type annotations. Yeni dil özellikleri sık sık gerçekleşmez, bu yüzden Şanslar, uzun bir süre için hiçbir şeyi değiştirmenize bile gerek yoktur.

+1

İlk gönderi ve güncellemeniz için teşekkürler. Cevabınızı henüz kabul etmedim çünkü bir ek açıklama işlemcisini Java 7'ye dönüştürme sürecinde hala (çok part-time) olduğumu görüyorum. Başka bir şeyin ortaya çıkıp çıkmadığını görmek istiyorum. – bernie