9

javaでprotobufsを使用しているときにこのようなビルドエラーが発生した場合は、以下を参照してください。

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
4

3 に答える 3

36

わかりました。protobufsのいわゆるJavaチュートリアルでは、protobufライブラリをプロジェクトに組み込む方法については実際には説明されていません。これは、すべてのコードが単一の生成された.javaファイルに含まれていることを意味します。これは実際には非常に便利ですが、そうではありません。

ソースを見ると、protobufソースcom.google.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ファイルをプロジェクトにコピーします。

于 2012-07-28T01:46:35.117 に答える
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、すべてのprotoファイルがプロジェクトのソースにコンパイルされます:)

于 2014-12-02T13:59:37.353 に答える
0

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

インストール-Mavenなし

ライブラリをビルドするためにMavenをインストールしたくない場合は、代わりにこれらの手順に従うことができます。これらの手順では、単体テストの実行をスキップし、コアprotobufライブラリ(utilパッケージなし)をインストールする方法のみを説明していることに注意してください。

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

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

2)protocを呼び出してDescriptorProtos.javaをビルドします。

$ protoc --java_out = core / src / main / java -I ../ src \ ../src/google/protobuf/descriptor.proto 3)任意の手段を使用してcore / src / main/javaのコードをコンパイルします。

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

于 2017-02-23T07:42:40.803 に答える