2012-04-04 17 views
19

मैं निम्नलिखित स्केला फ़ाइल है:स्कैला में अमरूद का उपयोग करने के लिए मुझे jsr305 की आवश्यकता क्यों है?

object SGuavaTryout { 
    com.google.common.cache.CacheBuilder.newBuilder() 
} 

मैं classpath में अमरूद-11.0.2.jar साथ संकलन। मेरे स्केला 2.9.1 संकलक (दोनों ग्रहण प्लगइन और सादे scalac) की शिकायत है:

error while loading CacheBuilder, Missing dependency 
    'class javax.annotation.CheckReturnValue', required by 
    D:\devel\eclipse-workspace\Scala Spielwiese\guava-11.0.2.jar 
    (com/google/common/cache/CacheBuilder.class) 

संकलन करने के लिए, मैं निर्माण पथ के लिए JSR305 (jsr305-1.3.9.jar) जोड़ने की जरूरत है। जावा बराबर JSR305 बिना ठीक संकलित:

public class JGuavaTryout { 
    public void tryout() { 
    com.google.common.cache.CacheBuilder.newBuilder(); 
    } 
} 

कोई भी विचार क्यों स्केला JSR305 की आवश्यकता है? क्या अमरूद के साथ उपयोग करने के लिए कोई आधिकारिक jsr305 कार्यान्वयन है?

धन्यवाद! - जॉर्ज

उत्तर

21

स्कैला कंपाइलर जिस तरह से डिज़ाइन किया गया है, उसके कारण क्लास द्वारा संकलित सभी प्रकारों को संकलित समय पर उपलब्ध होने की आवश्यकता होती है, जबकि जावा कंपाइलर प्रभावी रूप से परवाह नहीं करता है।

+2

जावा कंपाइलर विशेष रूप से एनोटेशन प्रकारों की परवाह नहीं करता है, लेकिन मुझे लगता है कि अन्य सभी प्रकारों को उपलब्ध होने की आवश्यकता है। –

+2

स्कैला 2.11.1 और ऊपर अब लापता एनोटेशन को गर्व से संभालते हैं; अब आपको कक्षापथ पर jsr305 की आवश्यकता नहीं है। – retronym

21

शॉन पार्सन्स ने आपके पहले प्रश्न का उत्तर दिया, यह बताकर कि स्कैला को जेएसआर 305 निर्भरता की आवश्यकता क्यों है।

"आधिकारिक" JSR 305 कार्यान्वयन अमरूद के साथ उपयोग करने के लिए के रूप में, मैं एक है कि वे अपने pom.xml में घोषित करनी चाहिए:

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

आप Maven उपयोग कर रहे थे, मैं यह निर्भरता जोड़ना होगा लगता है क्लासपाथ स्वचालित रूप से।

नोट: आप सीधे Maven Central repository से जार डाउनलोड कर सकते हैं।

+8

मैं जोड़ता हूं कि 'प्रदत्त' दायरे में डीपी डालने से स्केलैक संतुष्ट हो जाता है और lib को पैक किए गए परिणामों में शामिल नहीं किया जाता है। – ron

6

आप इस निर्भरता जोड़ सकते हैं:

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

इस प्रकार संकलन काम करेंगे और इस अंतिम रिलीज करने के लिए नहीं आएगा।

संबंधित मुद्दे

 संबंधित मुद्दे