Цель Ant для создания буферных файлов протокола - PullRequest
1 голос
/ 03 сентября 2010

Может ли кто-нибудь показать мне, как написать муравьиные правила (build.xml) для создания файла .jar из файла .proto?

В основном я написал функционал example.proto и могу использоватькомандная строка protoc для вывода файлов Java.Но я хочу, чтобы муравьиное правило автоматизировало описанный выше процесс как часть моей сборки.Может кто-нибудь поделиться фрагментом кода для начальной точки?

Ответы [ 4 ]

2 голосов
/ 24 октября 2013

Я знаю, что этот вопрос древний, но он по-прежнему является одним из лучших хитов в Google для "ant protoc".

Я был разочарован тем, что не смог найти задачу муравья для protoc, поэтому я написал свою собственную: https://github.com/okorz001/ant-protoc

Это довольно примитивно на данный момент, но он поддерживает вложенные наборы файлов, что я не мог понять, как поступить с хеками exec. (Я ни в коем случае не эксперт по муравьям.) Задача выполняет только протокол; вам понадобится использовать задания javac и jar для работы с муравьями, чтобы получить jar.

2 голосов
/ 03 июня 2014

Прото-компиляция также может быть выполнена через ant exec.

  <!-- Generates protocol buffers. -->
  <property name="proto.srcs" value="../protos" />
  <target name="proto">
    <exec executable="protoc" failonerror="true">
        <arg value="--java_out=." />
        <arg value="--proto_path=${proto.srcs}" />
        <arg line="${proto.srcs}/my.proto" />
    </exec>
  </target>
1 голос
/ 21 октября 2014

Вот что я сделал, чтобы включить protoc в проект. В идеале я бы использовал <mapper>, но ассоциировать файлы .proto с их файлами .java нетривиально, поэтому я просто касаюсь файла маркера каждый раз, когда запускается protoc. Ключом является задача <uptodate>, которая позволяет установить свойство на основе относительного возраста двух наборов файлов (true, если from старше, чем to, false в противном случае).

<property name="proto.messages" value="proto"/>
<property name="proto.src" value="src-proto"/>
<property name="proto.markerfile" value="${proto.src}/markerfile"/>

<target name="init">
  <uptodate property="skip.protogen" targetfile="${proto.markerfile}">
    <srcfiles dir="${proto.messages}" />
  </uptodate>
  ...
</target>

<target name="clean">
  <delete dir="${proto.src}"/>
  ...
</target>

<target name="protoc" depends="init" unless="skip.protogen">
  <!-- delete first to ensure clean build -->
  <delete dir="${proto.src}"/>
  <mkdir dir="${proto.src}" />
  <apply executable="protoc" failonerror="true">
    <arg prefix="--java_out=" file="${proto.src}" />
    <arg prefix="--proto_path=" file="${proto.messages}" />
    <fileset dir="${proto.messages}" includes="**/*.proto" />
  </apply>
  <touch file="${proto.markerfile}" />
</target>

<target name="build" depends="init,protoc,...">
  <javac ...>
    <src path="${proto.src}"/>
    ...
  </javac>
</target>
1 голос
/ 03 сентября 2010

Похоже, вам нужно задание Ant Exec , чтобы выполнить двоичный файл для создания .java из файлов .proto. Задача Javac затем скомпилирует их, а задача Jar создаст файл .jar.

Как вы все это связываете? В этом руководстве рассказывается о Ant и о том, как использовать задачи, подобные описанным выше.

...