2013-03-14 13 views
20

Sono nuovo a Linux e Protobuf .. Ho bisogno di aiuto.Errore di compilazione Maven & Protobuf: Impossibile trovare il simbolo nel pacchetto com.google.protobuf

Sto cercando di "pacchetto mvn", un progetto che contiene molti file "Proto", e un file pom.xml ovviamente ...

sto lavorando su Ubuntu

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

ERRORE

Quando eseguo "pacchetto mvn", ho ricevuto questo errore:

dopo

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

ottengo un mazzo di questi errori:

[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

Ecco il file di pom.xml, con groupId & artifactId portati fuori:

<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> 

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

protobuf INSTALLAZIONE

ho fatto

./configure 
make 
make check 
make install 

in protobuf /,

e

mvn test 
mvn install 
mvn package 

in protobuf/java.

ho preso il vaso in protobuf/java/target

e ha aggiunto al mio Maven repo eseguendo:

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 

Nota che ho pasticciato con $ LD_LIBRARY_PATH. Attualmente quando eseguo echo, ottengo:

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

sì ....come si può dire che non ho la più pallida idea su come impostare $ LD_LIBRARY_PATH

Inoltre ho fatto funzionare:

apt-get install protobuf-compiler 

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

ProtoC INSTALLAZIONE

ho dimenticato quello che ho fatto per rendere il lavoro ProtoC, ma quando corro

protoc --version 

Ottengo

libprotoc 2.5.0 

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

La mia domanda è SIMILAR:

Problems using protobufs with java and scala

maven compilation failure

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

POSSIBILE RELAVEN CE?

still not find package, after 'mvn install'

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

Chiunque può aiutare?

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

PROGRESS

a quanto pare si tratta di un fallimento 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: 
+4

+1 Bella domanda composizione. –

risposta

11

ho avuto lo stesso problema. costruire le fonti protobuf da Google direttamente (io ho usato 2.5.0) e facendo

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 

risolto il problema per me.

Nelle mie precedenti prove ho notato che mancava il file jar in /root/.m2/repository/com/google/protobuf/protobuf-java/2.5.0/.

Forse provare a utilizzare la versione 2.5.0 nel pom.xml e/o copiare manualmente il file jar.

applausi

+5

Sì! Cambio da 2.4.1 a 2.5.0 funzionato! Grazie! – Kayvar

+0

Cambiare 2.4.1 a 2.5.0 nel mio pom risolto il mio problema pure – gnielsen

8

Ho avuto questo problema quando ci fu una mancata corrispondenza tra la versione ProtoC installata e la versione elencata nel pom. La corrispondenza con le versioni ha risolto il problema. Nel mio caso, ho dovuto cambiare la versione di protoc in 2.4.1 per adattarla al POM.

8

protoc --version deve essere la stessa versione del file pom.xml (protobuf-java-2.5.0.jar).

+0

Questa era la soluzione più semplice per me! – santon

+0

fantastico, grazie. – idmitriev

1

Il mio problema era che una unit test ha esteso la classe dalla cartella principale. Ho risolto il problema con:

<!-- 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>