2014-06-17 13 views
6

Yığın akışına ilişkin bilgileri ararken, benimkiyle benzer bir soru gördüm, ancak gerçek bir yanıtı yok here. 14 veya daha yüksek (I RangeSet gerekir) 11.0.2 guava içinNeden Guava 14+ kullanmak için artifact JSR305 eklemeliyim?

ben guava benim maven projesi Geçiş gereken.

<dependency> 
    <groupId>com.google.guava</groupId> 
    <artifactId>guava</artifactId> 
    <version>14.0</version> 
</dependency> 

Sonra maven yapı çalıştırın ve bu hata var: Ben bağımlılık ile benim maven pom güncellenmiş

[ERROR] xxx.java: cannot find symbol 
[ERROR] symbol : class Nonnull 
[ERROR] location: package javax.annotation 

daha yakın bir göz attım ve bu açıklamalar JSR305 ile donatılmıştır guava 11.0.2, mvn repository olarak bildirir. Garip Ne bulmak

guava 14 da mvn repository raporları gibi JSR305 bağlı olmasıdır.

<dependency> 
    <groupId>com.google.code.findbugs</groupId> 
    <artifactId>jsr305</artifactId> 
    <version>1.3.9</version> 
    <scope>provided</scope> 
</dependency> 

Ama guava zaten buna bağlıdır, neden benim pom için bu bağımlılığı eklemek gerekir:

benim pom JSR bağımlılık eklerseniz, o zaman derleme yalnızca iyi çalışır? Bu bir çözümden ziyade bir çözüm için daha fazla görünüyor ve ben bir şeyleri anlamaya ve temizlemeyi tercih ederim.

Katıldığınız için teşekkürler.

+0

Ben Scala derleyici kullanırken bu gerekli olduğunu hatırlamak gibi görünüyor - Kurulumunuzda bu? –

+0

Özellikle, bir java projesi oluşturduğumdan, http://stackoverflow.com/questions/10007994/why-do-i-need-jsr305-to-use-guava-in-scala –

+0

Bu benim kurulumum değil. Ama sorun benimkine çok yakın ... –

cevap

11

aşağıdaki gibi Guava 14 kendi pom içinde bağımlılık tanımlar çünkü bağımlılığıysa olarak eklemek gerekir nedeni: senin sorunun

<dependency> 
    <groupId>com.google.code.findbugs</groupId> 
    <artifactId>jsr305</artifactId> 
    <version>1.3.9</version> 
    <scope>provided</scope> 
</dependency> 

önemli parçası <scope>provided</scope> çizgidir. onlar provided bağımlılıkları ile ilgili olarak aşağıdaki ifade website maven itibaren

: Guava bir provided bağımlılık olarak bu ayarlama nedeniyle Yani temelde

provided: This is much like compile , but indicates you expect the JDK or a container to provide the dependency at runtime. For example, when building a web application for the Java Enterprise Edition, you would set the dependency on the Servlet API and related Java EE APIs to scope provided because the web container provides those classes. This scope is only available on the compilation and test classpath, and is not transitive.

onlar kimse tam olarak ne olduğunu bu bağımlılığı sağlamak için Guava tüketen bekliyoruz Yapman gerekiyordu.

Guava 11.0.2'de normal bir compile bağımlılığı oldu, dolayısıyla kendi projenizde bunu sağlamak zorunda değildiniz.

değişiklik

release notes itibaren Guava 13. yılında yapılmıştır:

Made findbugs a provided dependency to avert dep conflicts when using findbugs 2.0. The side-effect of this change is that projects which relied upon Guava to grant access to the JSR-305 annotations "for free" will break unless they provide their own direct dependency on that jar (or an equivalent). Projects should always have been directly depending on JSR-305 (per maven best-practice), but this change makes that should into a must.

+2

Evet ve hayır. Bunu kendiniz deneyebilirsiniz - sadece Guava ile ve JSR-305 olmadan temiz bir proje oluşturun. Her şey Java'da iyi çalışır (en azından Java 7'de, Java 8'den emin değil). Bunun nedeni, çalışma zamanında ek açıklamalar için sınıflara ihtiyacınız olmamasıdır. Bakınız örneğin http: // stackoverflow.com/sorular/3567413/neden-doesnt-a-eksik-açıklama-neden-a-ClassNotFoundException-at-çalışma zamanı. Scala ile olsa da, bu farklı bir şarkı ve haklısın. –

+0

Benim durumumda, çalışma zamanında buna ihtiyacım var, bu yüzden DB5 yanıtı bana uyar. –

+1

Guava'daki her şey, çalışma zamanında JSR-305 kavanozu olmadan iyi çalışmalıdır. Kendi kodunuzda JSR-305 ek açıklamaları kullanıyor olsaydınız, evet, derhal derlemek için doğrudan ona bağlı olmanız gerekir. (Bazı nedenlerle ek açıklamalarda yansıma yapmadığınız sürece çalışma zamanına ihtiyacınız olmamalıdır.) – ColinD

İlgili konular