web-dev-qa-db-fra.com

Erreur de compilation Maven & Protobuf: impossible de trouver le symbole dans le package com.google.protobuf

Je suis nouveau sur Linux et Protobuf .. J'ai besoin d'aide.

J'essaie de "mvn package" un projet qui contient de nombreux fichiers ".proto", et un fichier pom.xml bien sûr ...

Je travaille sur Ubuntu

=======================================

ERREUR

Lorsque j'exécute "package mvn", je reçois cette erreur:

après

...
Compiling 11 source files to .../target/classes
...

Je reçois un tas de ces erreurs:

[ERROR] .../target/generated-sources/...Java:[16457,30] cannot find symbol
[ERROR] symbol  : class Parser
[ERROR] location: package com.google.protobuf
[ERROR] 
[ERROR] .../target/generated-sources/...Java:[17154,37] cannot find symbol
[ERROR] symbol  : class Parser
[ERROR] location: package com.google.protobuf
[ERROR] 
[ERROR] .../target/generated-sources/...Java:[17165,30] cannot find symbol
[ERROR] symbol  : class Parser
[ERROR] location: package com.google.protobuf
[ERROR] 
[ERROR] .../target/generated-sources/...Java:[17909,37] cannot find symbol
[ERROR] symbol  : class Parser
[ERROR] location: package com.google.protobuf
[ERROR]

=======================================

POM

Voici le fichier pom.xml, avec groupId & artifactId retiré:

<project>
  <modelVersion>4.0.0</modelVersion>
  <parent>
     <groupId>*****</groupId>
     <artifactId>*****</artifactId>
     <version>1.0-SNAPSHOT</version>
  </parent>
  <artifactId>*****</artifactId>
  <version>1.0-SNAPSHOT</version>
  <properties>
      <proto.cas.path>${project.basedir}/src</proto.cas.path>
      <target.gen.source.path>${project.basedir}/target/generated-sources</target.gen.source.path>
  </properties>
 <dependencies>
      <dependency>
                <groupId>com.google.protobuf</groupId>
                <artifactId>protobuf-Java</artifactId>
                <version>2.4.1</version>
                <scope>compile</scope>
            </dependency>
  </dependencies>
  <build>
    <sourceDirectory>${project.basedir}/src</sourceDirectory>
        <plugins>
            <plugin>
               <artifactId>maven-compiler-plugin</artifactId>
               <version>2.0.2</version>
               <configuration>
                        <source>1.6</source>
                        <target>1.6</target>
                    <includes><include>**/commonapps/**</include></includes>
                </configuration>            
             </plugin>
             <plugin>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>generate-sources</id>
                            <phase>generate-sources</phase>
                            <configuration>
                                <tasks>
                                    <mkdir dir="${target.gen.source.path}" />    
                                    <path id="proto.path.files">
                                        <fileset dir="${proto.cas.path}">
                                            <include name="*.proto" />
                                        </fileset>  
                                    </path>
                                    <pathconvert pathsep=" " property="proto.files" refid="proto.path.files" />

                                    <exec executable="protoc">
                                         <arg value="--Java_out=${target.gen.source.path}" />
                                         <arg value="--proto_path=${proto.cas.path}" />
                                            <arg line="${proto.files}" />
                                    </exec>
                                </tasks>
                                <sourceRoot>${target.gen.source.path}</sourceRoot>
                            </configuration>
                            <goals>
                                <goal>run</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
         </plugins>
     </build>
</project>

=======================================

INSTALLATION PROTOBUF

J'ai fait

./configure
make
make check
make install

en protobuf /,

et

mvn test
mvn install
mvn package

dans protobuf/Java.

J'ai pris le pot dans protobuf/Java/target

et l'a ajouté à mon référentiel maven en exécutant:

mvn install:install-file -Dpackaging=jar -DgeneratePom=true  -DgroupId=com.google.protobuf   -DartifactId=protobuf-Java   -Dfile=protobuf-Java-2.4.1.jar -Dversion=2.4.1

Notez que j'ai dérangé avec $ LD_LIBRARY_PATH. Actuellement, lorsque je lance l'écho, j'obtiens:

/usr/local/lib/:/usr/:/usr/lib/:/usr/local/

ouais .... comme vous pouvez le voir, je n'ai aucune idée de la configuration de $ LD_LIBRARY_PATH

J'ai également couru:

apt-get install protobuf-compiler

=======================================

INSTALLATION DU PROTOC

J'ai oublié ce que j'ai fait pour que le protocole fonctionne, mais quand je cours

protoc --version

Je reçois

libprotoc 2.5.0

=======================================

MA QUESTION IS SIMILAIRE À:

Problèmes d'utilisation de protobufs avec Java et scala

échec de la compilation maven

=======================================

PERTINENCE POSSIBLE?

toujours pas trouvé de package, après 'mvn install'

http://www.scriptol.com/programming/protocol-buffers-tutorial.php

Quelqu'un peut-il aider?

=======================================

LE PROGRÈS

Apparemment, c'est un échec du plugin:

https://cwiki.Apache.org/confluence/display/MAVEN/MojoFailureException

[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-compiler-plugin:2.0.2:compile (default-compile) on project casprotobuf: Compilation failure: Compilation failure:
23
Katie

J'ai eu le même problème. construire les sources de protobuf de google directement (j'ai utilisé 2.5.0) et faire

mvn install:install-file -Dpackaging=jar -DgeneratePom=true  -DgroupId=com.google.protobuf   -DartifactId=protobuf-Java   -Dfile=protobuf-Java-2.5.0.jar -Dversion=2.5.0

résolu le problème pour moi.

Lors de mes précédents essais, j'ai remarqué que le fichier jar dans /root/.m2/repository/com/google/protobuf/protobuf-Java/2.5.0/ était manquant.

Essayez peut-être d'utiliser la version 2.5.0 dans le fichier pom.xml et/ou de copier le fichier jar manuellement.

à votre santé

13
thesonix

J'ai eu ce problème quand il y avait un décalage entre la version de protocole installée et la version répertoriée dans le pom. La correspondance des versions a résolu le problème. Dans mon cas, j'ai dû changer ma version de protocole en 2.4.1 pour correspondre au POM.

11
Nathan

Le protoc --version doit être la même version que celle définie dans pom.xml fichier (protobuf-Java-2.5.0.jar).

9
delijati

Pour moi, il est résolu après avoir utilisé ci-dessous dans le script de construction

<clearOutputDirectory>false</clearOutputDirectory

Script de construction complet

<build>
        <extensions>
            <extension>
                <groupId>kr.motd.maven</groupId>
                <artifactId>os-maven-plugin</artifactId>
                <version>1.5.0.Final</version>
            </extension>
        </extensions>
        <plugins>
            <plugin>
                <groupId>org.xolstice.maven.plugins</groupId>
                <artifactId>protobuf-maven-plugin</artifactId>
                <version>0.5.1</version>
                <configuration>
                    <protocArtifact>com.google.protobuf:protoc:3.6.1:exe:${os.detected.classifier}</protocArtifact>
                    <pluginId>grpc-Java</pluginId>
                    <pluginArtifact>io.grpc:protoc-gen-grpc-Java:1.19.0:exe:${os.detected.classifier}</pluginArtifact>
                    <clearOutputDirectory>false</clearOutputDirectory>
                    <outputDirectory>${basedir}/src/main/Java/</outputDirectory>

                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>compile-custom</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
1
Amar Tanwar

Mon problème était qu'une classe étendue de test unitaire du dossier principal. Je l'ai résolu avec:

<!-- Allow tests to call classes in main folder -->

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.9.1</version>
    <executions>
        <execution>
            <id>add-source</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>add-source</goal>
            </goals>
            <configuration>
                <sources>
                    <source>src/test/Java</source>
                    <source>src/main/Java</source>
                </sources>
            </configuration>
        </execution>
    </executions>
</plugin>
1
Valdis Vitolins