2013-10-30 7 views
9

私はこれらの3つすべてを含むソリューションを探しています。これまでは、ビルド中にprotoファイルからJavaコードを生成するMavenプラグインや、protoファイルからScalaコードを生成するコマンドラインツールを見つけることができましたが、すべてを一緒に混ぜることはありませんでした。MavenビルドでProtobufファイルからScalaコードを生成する方法はありますか?

私が今までに見つけた最も有望なのは、ScalaBuffとそれがMaven reposに存在するという事実です。私は以下のようなものを依存関係として追加した場合は...

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

...単にMavenのビルドのフェーズでUTILコマンドラインとして、それを起動構築持ってする方法はありますか? (うまくいけば、ソースを生成する)私もこれを見つけましたが、これらをうまく組み合わせる方法については紛失しています:Maven:http://mojo.codehaus.org/exec-maven-plugin/

注:これは移植可能で何かに依存しないことが本当に欲しいです私のローカルボックスにインストールされていますが、ハッキングは完全に歓迎です(つまり、ソースコントロールにjarまたは実行可能ファイルを追加する)。

ありがとうございます!

UPDATE:

上記の依存関係に加えて、私は次のよう...

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

を追加した場合、...私は(生成-ソース相に)私のビルド時にソースを生成することができます何らかの理由でexecプラグインを実行した直後にビルドが停止します。だから近くに!誰かが最後の問題を解決できれば、これは解決されます。

+1

私はsbtが受け入れ可能ではないと思いませんか? https://github.com/gseitz/sbt-protobuf/tree/scalabuff ...本当にMavenを使いたい場合は、Mavenにsbtビルドを起動するように設定できます。 – sdanzig

+1

私はMavenに固執する必要があります - それは選択ではありません。 Mavenにexecプラグインを使用してScalaBuffコンパイラを呼び出させることは可能ですが、Mavenがそのプラグインを使用するためにbarebones SBTビルドを呼び出そうとすると思います。 –

+0

あなたの解決策を回答として追加し、それを合格とマークできますか?私はあなたが見つけたように 'exec'プラグインがここでの正しい修正であることに同意します。 – Rich

答えて

1

解決済み:maven execプラグインのJava目標はフォークしないため、scalabuffコンパイラのexit(0)によってビルド全体が終了していました。また、ScalaBuffを満足させるためにsourcesを生成する前にディレクトリを作成しなければなりませんでした。 ScalaBuffの依存関係を使用すると次のプラグインが実際に動作します!:

<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

これを使ってgithubにプロジェクトの例がありますか? – qwwqwwq

関連する問題