2012-07-28 18 views
7

javaでprotobufsを使用しているときにこれらのようなビルドエラーが発生した場合は、以下をご覧ください。 protobufsためJava tutorialいわゆるProtobuf Javaコードにビルドエラーがあります

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

READMEは本当にそれを明確にすることはできませんでした:* JavaまたはPythonランタイムライブラリを入手するためには、まだソースコードパッケージをダウンロードする必要があります。それを入手する: https://github.com/google/protobuf/releases/* –

答えて

31

OK]をクリックして、実際にプロジェクトにいる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 

そしてプロジェクトにJavaファイルをコピーします。

+0

これは私を助けてくれました。ありがとう! –

+0

@ティムムーム:これは..助けてくれてありがとう..しかし、とにかく私は漠然とした考えを持っていますが、 "protoc --java_out = src/main/java -I ../ src ../src/google/protobuf/descriptor.proto"というコマンドの意味を理解できませんでした..あなたは明確に説明できますか? –

+0

@aarish run protoc -h。 -Iはインポートを検索するディレクトリ、--java_outは生成されたソースファイルを置くディレクトリ、最後の引数は 'README.md'ディレクトリから – doc

0

もう1つの方法は、ソースに含まれるpom.xmlを編集することです。ライフサイクルの検証時にprotoファイルをコンパイルし、ソースディレクトリに書き込むことができます。

この差分または類似の適用(または新しいビルドのプロファイルを作成):今すぐ

$ 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なし代わりにこれらの指示に従うことがあります。これらの命令はユニットテストの実行をスキップし、core protobufライブラリ(utilパッケージなし)をインストールする方法についてのみ説明しています。

1)C++コードをビルドするか、またはprotocのバイナリ配布を入手します。バイナリディストリビューションをインストールする場合、それがこのパッケージと同じバージョンであることを確認してください。

$ protoc --version インストールせずにC++コードをビルドした場合、コンパイラバイナリは../srcに配置する必要があります。

2)DescriptorProtos.javaを構築するためにprotocを起動します。

$ protoc --java_out =コア/ srcに/メイン/ javaの-I ../ SRC \ ../src/google/protobuf/descriptorを。 proto 3)core/src/main/javaのコードを好みの方法でコンパイルします。

4)好きな場所にクラスをインストールします。