Есть ли способы генерировать код Scala из файлов Protobuf в сборке Maven?

Я ищу решение, которое включает в себя все 3 из этих вещей. До сих пор мне удалось найти плагины Maven, которые будут генерировать Java-код из файлов proto во время сборки, и инструменты командной строки, которые будут генерировать код Scala из файлов proto, но ничего, что смешивает все вместе.

самое многообещающее, что я нашел до сих пор, - это ScalaBuff и тот факт, что он существует в репозиториях Maven. Если я добавлю его как зависимость таким образом...

    <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 build в качестве командной строки util на этапе сборки? (надеюсь, generate-sources) я также нашел это, но не знаю, как заставить их хорошо играть вместе: Maven:http://mojo.codehaus.org/exec-maven-plugin/

примечание: Я бы очень хотел, чтобы это было портативным и не зависело от чего-то, установленного на моем локальном ящике, но хаки совершенно приветствуются (т. е. добавление jar или исполняемого файла к источнику контроль)

спасибо заранее!

обновление:

в дополнение к вышеуказанной зависимости, если я добавлю следующее...

    <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 ответов


решено: цель java плагина Maven exec не разветвляется, поэтому выход (0) в компиляторе scalabuff вызывал выход всей сборки. Также пришлось создать каталог перед generate-sources, чтобы сохранить ScalaBuff счастливым. Использование зависимостей 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>