Max*_* A. 42 maven-2 protocol-buffers
我正在现有的,相当普通的Maven 2项目中试验Protocol Buffers.目前,每次我需要更新生成的源时,都会调用shell脚本.这显然是一个麻烦,因为我希望在每次构建之前自动生成源.希望不要诉诸可耻的hackery.
所以,我的问题是双重的:
远射:是否有Maven 2的"Protocol Buffers插件"可以以自动方式实现上述目标?谷歌代码上有一个分支,其作者似乎已经开始实施这样的插件.不幸的是,它没有通过代码审查或合并到protobuf主干.因此,该插件的状态是未知的.
可能更现实:缺少一个实际的插件,我怎么可能protoc
从我的Maven 2版本调用?我想我可以将现有的shell脚本连接到antrun
调用或类似的东西.
个人经历非常感谢.
Pas*_*ent 44
您可以在Protocol Buffers讨论组的Protocol Buffers Compiler Maven Plug-In线程中的Protocol Buffers存储库中找到有关插件的一些信息.我的理解是它可以使用但缺乏测试.我试一试.
或者您可以使用antrun
插件(从上面提到的线程粘贴的snipet):
<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>
Run Code Online (Sandbox Code Playgroud)
Max*_* A. 23
该接受的答案鼓励我得到了谷歌提供的插件工作.我将我的问题中提到的分支合并到2.2.0源代码的检查中,构建并安装/部署了该插件,并且能够在我的项目中使用它,如下所示:
<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>
Run Code Online (Sandbox Code Playgroud)
请注意,我将插件的版本更改为0.0.1(无-SNAPSHOT),以使其进入我的非快照第三方Nexus存储库.因人而异.需要注意的是,一旦不再需要跳过篮筐就可以使用这个插件.
jsr*_*avn 21
已接受的解决方案无法扩展到多个原型文件.我必须拿出自己的:
<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>
Run Code Online (Sandbox Code Playgroud)