Domanda

sto sperimentando buffer protocollo in un abbastanza vaniglia progetto esistente, Maven 2. Attualmente, invoco uno script di shell ogni volta che ho bisogno di aggiornare le mie fonti generate. Si tratta ovviamente di una seccatura, come vorrei le fonti per generare automaticamente prima di ogni generazione. Speriamo che senza ricorrere a aggiustamenti vergognosa.

Quindi, la mia domanda è duplice:

  1. Long shot: c'è un "buffer protocollo plug-in" per Maven 2 punti che può realizzare quanto sopra in modo automagic? C'è un href="http://protobuf.googlecode.com/svn/branches/maven-plugin/" ramo rel="noreferrer"> cui autore sembra aver preso un colpo ad attuare un plugin. Purtroppo, revisione del codice non ha superato il o stati fusi in tronco protobuf. Lo stato di tale plugin è quindi sconosciuta.

  2. Probabilmente più realistica: manca un plugin reale, altrimenti come potrei fare per invocare protoc dal mio Maven 2 accumulo? Suppongo che possa essere in grado di legare il mio script di shell esistente in un'invocazione antrun o qualcosa di simile.

esperienze personali sono più apprezzati.

È stato utile?

Soluzione

Troverete alcune informazioni sul plugin disponibili nel repository buffer protocollo nel buffer protocollo Compiler Maven plug-in thread sul gruppo di discussione buffer protocollo. La mia comprensione è che è test utilizzabili ma mancano. Mi piacerebbe fare un tentativo.

In alternativa si potrebbe utilizzare il plugin antrun (snipet incollato dal thread di cui sopra):

 <build>
   <plugins>
     <plugin>
       <artifactId>maven-antrun-plugin</artifactId>
       <executions>
         <execution>
           <id>generate-sources</id>
           <phase>generate-sources</phase>
           <configuration>
             <tasks>
               <mkdir dir="target/generated-sources"/>
               <exec executable="protoc">
                 <arg value="--java_out=target/generated-sources"/>
                 <arg value="src/main/protobuf/test.proto"/>
               </exec>
             </tasks>
             <sourceRoot>target/generated-sources</sourceRoot>
           </configuration>
           <goals>
             <goal>run</goal>
           </goals>
         </execution>
       </executions>
     </plugin>
   </plugins>
 </build>

 <dependencies>
   <dependency>
     <groupId>com.google.protobuf</groupId>
     <artifactId>protobuf-java</artifactId>
     <version>2.0.3</version>
   </dependency>
 </dependencies>

Altri suggerimenti

La risposta accettata mi ha incoraggiato a ottenere il Google plug -purché al lavoro. Ho fuso il ramo citato nella mia interrogazione in una cassa di 2.2.0 codice sorgente, costruito e installato / schierato il plugin, ed è stato in grado di usarlo nel mio progetto come segue:

  <build>
    <plugins>
      <plugin>
        <groupId>com.google.protobuf.tools</groupId>
        <artifactId>maven-protoc-plugin</artifactId>
        <version>0.0.1</version>
        <executions>
          <execution>
            <id>generate-sources</id>
            <goals>
              <goal>compile</goal>
            </goals>
            <phase>generate-sources</phase>
            <configuration>
              <protoSourceRoot>${basedir}/src/main/protobuf/</protoSourceRoot>
              <includes>
                <param>**/*.proto</param>
              </includes>
            </configuration>
          </execution>
        </executions>
        <configuration>
          <protocExecutable>/usr/local/bin/protoc</protocExecutable>
        </configuration>
      </plugin>
    </plugins>
  </build>

Si noti che ho cambiato la versione del plugin per 0.0.1 (senza -snapshot) al fine di farlo andare nel mio non-snapshot repository di terze parti Nexus. YMMV. L'asporto è che questo plugin sarà utilizzabile una volta che non è più necessario fare i salti mortali per farlo andare.

La soluzione accettata non scala per più file proto. Ho dovuto venire con la mia:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
                <execution>
                    <id>compile-protoc</id>
                    <phase>generate-sources</phase>
                    <configuration>
                        <tasks>
                            <mkdir dir="${generated.sourceDirectory}" />
                            <path id="proto.path">
                                <fileset dir="src/main/proto">
                                    <include name="**/*.proto" />
                                </fileset>
                            </path>
                            <pathconvert pathsep=" " property="proto.files" refid="proto.path" />
                            <exec executable="protoc" failonerror="true">
                                <arg value="--java_out=${generated.sourceDirectory}" />
                                <arg value="-I${project.basedir}/src/main/proto" />
                                <arg line="${proto.files}" />
                            </exec>
                        </tasks>
                    </configuration>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
</build>

C'è anche ottimo plugin di Igor Petruk chiamato protobuf-maven-plugin . E 'in repo centrale adesso e gioca bene con Eclipse (si consiglia M2E-1.1).

Ho appena aggiornato il plugin Maven per lavorare con 2.2.0 -. Pom aggiornato sono attaccati alla revisione del codice bug

Ecco le istruzioni per costruire il plugin da soli:

svn co http://protobuf.googlecode.com/svn/branches/maven-plugin/tools/maven-plugin
cd maven-plugin
wget -O pom.xml 'http://protobuf.googlecode.com/issues/attachment?aid=8860476605163151855&name=pom.xml'
mvn install

È quindi possibile utilizzare il config Maven sopra.

Ho appena provato a (v 0.1.7) forcella meno ufficiali ma molto recente da https: / /github.com/dtrott/maven-protoc-plugin e ha funzionato molto bene, per gentile concessione di David Trott. L'ho provato con un paio di moduli Maven uno dei quali conteneva messaggi in stile DTO e l'altro un servizio di base su di loro. Ho preso in prestito la configurazione del plugin Maxa Pubblicato il 16 ott '09, ho avuto ProtoC sul mio cammino e ho aggiunto

<temporaryProtoFileDirectory>${basedir}/target/temp</temporaryProtoFileDirectory>

dopo

<protocExecutable>protoc</protocExecutable>.

La cosa davvero bella è che tutto quello che dovevo fare è dichiarare una dipendenza normale dal modulo di servizio sul modulo DTO. Il plugin è stato in grado di risolvere i file proto dipendenze trovando i file proto confezionati con il modulo DTO, estraendoli in una directory temporanea e l'utilizzo durante la generazione di codice per il servizio. Ed è stato sufficiente, non per confezionare una seconda copia delle classi DTO generate con il modulo di servizio. Intelligente

Non è un esperto di plug-in per protobuf. https://www.xolstice.org/protobuf-maven-plugin/usage.html

La configurazione minima

 <plugin>
    <groupId>org.xolstice.maven.plugins</groupId>
    <artifactId>protobuf-maven-plugin</artifactId>
    <version>0.5.0</version>
    <configuration>
      <protocExecutable>/usr/local/bin/protoc</protocExecutable>
    </configuration>
    <executions>
      <execution>
        <goals>
          <goal>compile</goal>
          <goal>test-compile</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

Credo che l'utilizzo di antrun per invocare passi non Maven è la soluzione generalmente accettata.

Si potrebbe anche provare il Maven-exec-plugin .

I a forcella della plug-in da David Trott e lo hanno compilazione di più lingue che lo rende molto più utile. Vedere il progetto github qui e un tutorial su integrandolo con una build Maven qui .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top