2013-10-30 19 views
9

Sto cercando una soluzione che includa tutte e 3 queste cose. Finora, sono stato in grado di trovare i plugin Maven che generano il codice Java dai file proto durante una compilazione e gli strumenti da riga di comando che generano il codice Scala dai file di proto, ma nulla che misuri tutto insieme.Esistono modi per generare il codice Scala dai file Protobuf in una build Maven?

La cosa più promettente che ho trovato finora è ScalaBuff, e il fatto che esista nei repository Maven. Se aggiungo come una dipendenza da questa convenzione ...

<dependency> 
     <groupId>net.sandrogrzicic</groupId> 
     <artifactId>scalabuff-compiler_2.10</artifactId> 
     <version>1.3.6</version> 
    </dependency> 
    <dependency> 
     <groupId>net.sandrogrzicic</groupId> 
     <artifactId>scalabuff-runtime_2.10</artifactId> 
     <version>1.3.6</version> 
    </dependency> 

... c'è un modo per avere semplicemente il Maven costruire lancio come una riga di comando util durante una fase della compilazione? (si spera che generi-fonti) Ho anche trovato questo, ma sono in perdita su come ottenere questi a giocare bene insieme: Maven: http://mojo.codehaus.org/exec-maven-plugin/

Nota: mi piacerebbe davvero che questo sia portatile e non dipenda da qualcosa installato nella mia casella locale, ma gli hack sono perfettamente benvenuti (ad esempio aggiungendo un jar o eseguibile al controllo del codice sorgente)

Grazie in anticipo!

UPDATE:

Oltre alla dipendenza sopra, se aggiungo il seguente ...

<plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>exec-maven-plugin</artifactId> 
     <version>1.2.1</version> 
     <executions> 
      <execution> 
       <id>protobuf-sources</id> 
       <phase>generate-sources</phase> 
       <goals> 
        <goal>java</goal> 
       </goals> 
      </execution> 
     </executions> 
     <configuration> 
      <mainClass>net.sandrogrzicic.scalabuff.compiler.ScalaBuff</mainClass> 
      <arguments> 
       <argument>--proto_path=src/main/protobuf</argument> 
       <argument>--scala_out=target/generated-sources/scalabuff</argument> 
      </arguments> 
      <sourceRoot>target/generated-sources/scalabuff</sourceRoot> 
     </configuration> 
    </plugin> 

... posso generare fonte durante la mia build (in fase di generare-sources) , ma la build si interrompe immediatamente dopo aver eseguito il plugin exec per qualche motivo. Così vicino! Se qualcuno può risolvere l'ultimo problema, questo sarà risolto.

+1

Non credo che sbt sia accettabile? https://github.com/gseitz/sbt-protobuf/tree/scalabuff ... potresti configurare Maven per avviare una build sbt se volevi davvero restare con Maven. – sdanzig

+1

Devo rimanere con Maven - non è una scelta. Sembra ancora che dovrebbe essere possibile che Maven invochi il compilatore ScalaBuff usando il plugin exec, ma suppongo che potrei anche provare ad avere Maven per invocare un build SBT barebone per usare quel plugin. –

+0

Si prega di aggiungere la soluzione come risposta e contrassegnarla come accettata? Sono d'accordo che il plugin 'exec' è la correzione corretta qui, come hai trovato. – Rich

risposta

1

RISOLTO: Il plug-in maven exec java non si biforca, quindi l'uscita (0) nel compilatore scalabuff stava causando l'uscita dell'intero build. Dovevo anche creare una directory prima di generate-sources per far contenti ScalaBuff. L'utilizzo delle dipendenze di ScalaBuff e dei seguenti plugin funziona davvero !:

<plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.7</version> 
    <executions> 
     <execution> 
      <phase>initialize</phase> 
      <configuration> 
       <tasks> 
        <mkdir dir="target/generated-sources/scalabuff" /> 
       </tasks> 
      </configuration> 
      <goals> 
       <goal>run</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.2.1</version> 
    <executions> 
     <execution> 
      <id>protobuf-sources</id> 
      <phase>generate-sources</phase> 
      <goals> 
       <goal>exec</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <executable>java</executable> 
     <arguments> 
      <argument>-classpath</argument> 
      <!-- automatically creates the classpath using all project dependencies, 
      also adding the project build directory --> 
      <classpath/> 
      <argument>net.sandrogrzicic.scalabuff.compiler.ScalaBuff</argument> 
      <argument>--proto_path=src/main/protobuf</argument> 
      <argument>--scala_out=target/generated-sources/scalabuff</argument> 
     </arguments> 
     <sourceRoot>target/generated-sources/scalabuff</sourceRoot> 
    </configuration> 
</plugin> 
+0

Hai un progetto di esempio su github che usa questo che potresti condividere? – qwwqwwq

Problemi correlati