2012-07-28 7 views
7

यदि जावा के साथ प्रोटोबफ का उपयोग करते समय आपको इन तरह की त्रुटियां मिलती हैं, तो नीचे देखें।प्रोटोबफ जावा कोड ने त्रुटियों का निर्माण किया है

The method getOptions() from the type Descriptors.Descriptor refers to the missing type MessageOptions 

The import com.google.protobuf.DescriptorProtos cannot be resolved 

FileDescriptorProto cannot be resolved to a type 
+0

रीडमे वास्तव में इसे कोई स्पष्ट नहीं कर सका: * जावा या पायथन रनटाइम लाइब्रेरी प्राप्त करने के लिए आपको अभी भी स्रोत कोड पैकेज डाउनलोड करने की आवश्यकता होगी। इसे प्राप्त करें: https://github.com/google/protobuf/releases/* –

उत्तर

31

ठीक है, protobufs के लिए Java tutorial तथाकथित वास्तव में कैसे अपने प्रोजेक्ट में Protobuf पुस्तकालय पाने के लिए उल्लेख नहीं है। इसका तात्पर्य है कि सभी कोड आपके एकल जेनरेट की गई .java फ़ाइल में है, जो वास्तव में बहुत अच्छा होगा, लेकिन ऐसा नहीं है।

स्रोत पर देखो और आप com.google.protobuf के लिए संदर्भ देखेंगे, जो आपको Protobuf स्रोत में java/src/main/java निर्देशिका में पा सकते हैं। हालांकि इसे अपनी परियोजना में कॉपी करें, और इसमें त्रुटियां पैदा होंगी।

समाधान README.txt फ़ाइल में है। हाँ, शायद मुझे इसे पढ़ना चाहिए था, लेकिन शुरू करने के लिए आपको जो जानकारी चाहिए, उसे ट्यूटोरियल शुरू करने में नहीं होना चाहिए? वैसे भी, ऐसा करते हैं:

# From the protobuf directory. 
cd java 
protoc --java_out=src/main/java -I../src ../src/google/protobuf/descriptor.proto 

और तो अपने प्रोजेक्ट में जावा फ़ाइलों की प्रतिलिपि।

+0

इससे मुझे बहुत मदद मिली। धन्यवाद! –

+0

@Timmmm: इससे मदद मिली .. धन्यवाद ..लेकिन वैसे भी मैं सिर्फ आदेश "protoc --java_out = src/मुख्य/जावा मैं ../ src ../src/google/protobuf/descriptor.proto" एक अस्पष्ट विचार हालांकि मुझे मिल गया गया है का अर्थ नहीं समझ सकता है .. तो क्या आप स्पष्ट रूप से समझा सकते हैं ?? –

+0

@ आरीश रन प्रोटोक-एच। मैं निर्देशिका के आयात के लिए खोज करने के लिए है, --java_out जिसमें उत्पन्न स्रोत फ़ाइलें और अंतिम तर्क जगह निर्देशिका 'README.md' निर्देशिका से – doc

0

एक और विकल्प स्रोत में शामिल pom.xml को संपादित करना है। आप प्रोटोटा फ़ाइलों को वैध जीवन चक्र पर संकलित करने और उन्हें स्रोत निर्देशिका में लिखने के लिए बदल सकते हैं।

इस diff या इसी तरह लागू करें (या बनाने के एक नए निर्माण प्रोफ़ाइल):

$ diff -u ~/Downloads/protobuf-2.6.0/java/pom.xml pom.xml 
--- /c/Users/MYNAME/Downloads/protobuf-2.6.0/java/pom.xml  Mon Aug 25 20:52:36 2014 
+++ pom.xml  Tue Dec 2 13:51:56 2014 
@@ -74,12 +74,12 @@ 
     <executions> 
      <execution> 
      <id>generate-sources</id> 
-   <phase>generate-sources</phase> 
+   <phase>validate</phase> 
      <configuration> 
       <tasks> 
       <mkdir dir="target/generated-sources" /> 
-    <exec executable="../src/protoc"> 
-     <arg value="--java_out=target/generated-sources" /> 
+    <exec executable="protoc"> 
+     <arg value="--java_out=src/main/java" /> 
        <arg value="--proto_path=../src" /> 
        <arg value="../src/google/protobuf/descriptor.proto" /> 
       </exec> 
@@ -92,12 +92,12 @@ 
      </execution> 
      <execution> 
      <id>generate-test-sources</id> 
-   <phase>generate-test-sources</phase> 
+   <phase>validate</phase> 
      <configuration> 
       <tasks> 
       <mkdir dir="target/generated-test-sources" /> 
-    <exec executable="../src/protoc"> 
-     <arg value="--java_out=target/generated-test-sources" /> 
+    <exec executable="protoc"> 
+     <arg value="--java_out=src/test/java" /> 
        <arg value="--proto_path=../src" /> 
        <arg value="--proto_path=src/test/java" /> 
        <arg value="../src/google/protobuf/unittest.proto" /> 

अब, तुम बस mvn validate चला सकते हैं और सभी आद्य फ़ाइलें अपनी परियोजना के स्रोत :)

में संकलित किया जाएगा
0

https://github.com/google/protobuf/tree/master/java

स्थापना - Maven

आप बल्कि पुस्तकालय का निर्माण करने Maven स्थापित नहीं चाहते हैं, तो y के बिना कहां इन निर्देशों का पालन कर सकते हैं। ध्यान दें कि ये निर्देश चल रहे यूनिट परीक्षण छोड़ते हैं और केवल कोर प्रोटोबफ लाइब्रेरी (उपयोग पैकेज के बिना) को स्थापित करने का वर्णन करते हैं।

1) सी ++ कोड बनाएं, या प्रोटोक का बाइनरी वितरण प्राप्त करें। यदि आप बाइनरी वितरण स्थापित करते हैं, तो सुनिश्चित करें कि यह इस पैकेज के समान संस्करण है। यदि संदेह में है, तो चलाएं:

$ प्रोटोक --वर्जन यदि आपने इंस्टॉल किए बिना सी ++ कोड बनाया है, तो कंपाइलर बाइनरी ../src में स्थित होना चाहिए।

2) DescriptorProtos.java का निर्माण करने के protoc आह्वान:

$ protoc --java_out = कोर/src/मुख्य/जावा मैं ../ src \ ../src/google/protobuf/descriptor। प्रोटो 3) जो भी आप पसंद करते हैं उसका उपयोग कर कोर/src/main/java में कोड संकलित करें।

4) जहां भी आप चाहें कक्षाएं स्थापित करें।

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