在 maven 项目中编译 thrift 文件有几个选项:
选项 1:使用 maven thrift 插件(最好的)
Maven Thrift 插件支持生成源/测试源,修改时重新编译等。基本上,它是在 Maven 项目中使用 thrift 最方便的方式。
- 将您的资源放入
src/main/thrift
(或src/test/thrift
用于测试节俭资源)。
- 将 thrift 二进制文件安装到 /usr/local/bin/thrift (或您喜欢的任何其他位置)
将插件添加到plugins
pom.xml 的部分:
<plugin>
<groupId>org.apache.thrift.tools</groupId>
<artifactId>maven-thrift-plugin</artifactId>
<version>0.1.11</version>
<configuration>
<thriftExecutable>/usr/local/bin/thrift</thriftExecutable>
</configuration>
<executions>
<execution>
<id>thrift-sources</id>
<phase>generate-sources</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>thrift-test-sources</id>
<phase>generate-test-sources</phase>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
就是这样:下次调用mvn compile
java 源时,将从 Thrift 生成。生成的源码会被放到target/generated-sources/thrift/
目录下,这个目录会被添加到java编译器的编译路径中。
您可以在 Github 上找到详细说明、示例等:https ://github.com/dtrott/maven-thrift-plugin 。
选项 2:使用 Maven Antrun 插件
如果由于某种原因需要使用 antrun 插件,最好使用apply
命令而不是exec
处理一组文件。
我将只写一个 ant target 的基本概念,因为修改时的条件重新编译可能超出了这个问题的范围:
<target name="compile-thrift">
<!-- Define fileset of thrift files -->
<fileset id="thrift.src.files" dir="${src.thrift.dir}">
<include name="**/*.thrift"/>
</fileset>
<!-- Invoke thrift binary for each of these files -->
<apply executable="${thrift.compiler}" resultproperty="thrift.compile.result"
failifexecutionfails="true" failonerror="true"
searchpath="true" dir="${src.thrift.dir}">
<arg value="-o"/>
<arg value="${thrift.dest.dir}"/>
<arg value="--gen"/>
<arg value="java"/>
<srcfile/>
<fileset refid="thrift.src.files"/>
</apply>
</target>
选项 3:将 antrun 与 exec ant 任务一起使用
如果出于某种原因绝对有必要使用 Antrun 插件和exec
任务,那么有办法做到这一点。我建议不要这样做,因为它丑陋且不可移植,但它可能会起作用。用于xargs
为文件列表调用 Thrift 编译器:
<exec dir="${src.thrift.dir}" executable="bash">
<arg line="ls * | xargs ${thrift.compiler} -o ${thrift.dest.dir} --gen java"/>
</exec>