9
votes

Le code Java Protobuf a des erreurs de construction

Si vous obtenez des erreurs de construction comme celles-ci lorsque vous utilisez des protobufs avec Java, regardez ci-dessous.

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


1 commentaires

Le README n'aurait vraiment pas pu le rendre plus clair: Vous aurez toujours besoin de télécharger le package de code source afin d'obtenir les bibliothèques Java ou Python Runtime. Obtenez de: Github.com/google/protobuf/relases


3 Réponses :


36
votes

OK, le soi-disant didacticiel Java pour protobufs ne mentionne pas comment obtenir le Bibliothèque protobuf dans votre projet. Cela implique que tout le code est dans votre fichier .java unique généré, qui serait vraiment agréable, mais ce n'est pas cas.

Regardez la source et vous verrez des références à < Code> com.google.protobuf , que vous pouvez trouver dans le répertoire java / src / main / java de la source protobuf. Copiez cela dans votre projet cependant, et il aura des erreurs de construction.

La solution est dans le fichier readme.txt . Ouais, peut-être que j'aurais dû le lire, mais toutes les informations dont vous avez besoin pour commencer soient-elles dans le tutoriel de démarrage? Quoi qu'il en soit, faites ceci: xxx

et puis copie les fichiers Java dans votre projet.


4 commentaires

Cela m'a aidé tellement. Merci!


@Timmmm: Cela a aidé .. Merci .. Mais de toute façon, je ne pouvais tout simplement pas comprendre la signification de la commande "Protoc --java_out = src / Main / Java -i ../ src ../src/google/protobuf/descriptor .Proto "Bien que j'ai eu une idée vague .. alors pouvez-vous s'il vous plaît expliquer clairement ??


@Arish Run Protoc -H. -Je est le répertoire à rechercher des importations, --java_out est le répertoire dans lequel placer les fichiers source générés et le dernier argument est le fichier de proto à compiler


de readme.md répertoire, ouvrez readme.md et exécutez la commande comme protoc -java_out = noyau / src / main / java -i ../ src \ ../ src / google / protobuf / descriptor.proto Si vous êtes nouveau venu de Protobuf comme je le fais avec la version 3.3.0. La structure de répertoire peut être modifiée à mesure que la version change. @Arish



0
votes

Une autre option consiste à éditer le pom.xml inclus dans la source. Vous pouvez le modifier pour compiler les fichiers de proto sur le cycle de vie de validation et les écrire dans le répertoire source.

Appliquez ce diff ou similaire (ou créez un nouveau profil de construction): P>

$ 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" />


0 commentaires

0
votes

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

Installation - sans maven

Si vous préférez ne pas installer Maven pour construire la bibliothèque, vous pouvez suivre ces instructions à la place. Notez que ces instructions ignorent les tests d'unité exécutées et décrivent uniquement comment installer la bibliothèque Protobuf principale (sans le package UTIL).

1) Construisez le code C ++ ou obtenez une distribution binaire de Protoc. Si vous installez une distribution binaire, assurez-vous qu'il s'agit de la même version que ce package. En cas de doute, exécutez:

$ Protoc-version Si vous avez construit le code C ++ sans installer, le compilateur binaire doit être situé à ../ src.

2) InvoKe Protoc pour construire des descriptorprotos.java:

$ Protoc --java_out = noyau / src / main / java -i ../ src \ ../src/google/protobuf/descriptor.Proto 3) Compilez le code dans Core / SRC / Main / Java en utilisant tout ce qui signifie que vous préférez.

4) Installez les classes où que vous préfériez.


0 commentaires