42 votes

Intégrer le Protocole de Tampons dans Maven2 construire

Je suis en train d'expérimenter avec des Tampons de Protocole en vigueur, de façon équitable à la vanille Maven 2 du projet. Actuellement, j'invoque un script shell à chaque fois que j'ai besoin de mettre à jour mon généré sources. C'est évidemment un soucis, que je voudrais les sources pour être généré automatiquement avant chaque construction. Espérons-le, sans recourir à de honteux hackery.

Donc, ma question est double:

  1. Long shot: est-il un "Protocole Tampons plugin" pour Maven 2 que peut atteindre l'-dessus dans un automagic façon? Il y a une branche sur Google Code dont l'auteur semble avoir pris un coup à la mise en œuvre de ce plugin. Malheureusement, il n'a pas passé l'examen du code ou fusionné en protobuf tronc. L'état de ce plugin est donc inconnu.

  2. Sans doute plus réaliste: en l'absence d'un réel plugin, sinon comment pourrais-je aller sur le lancement d' protoc de mon Maven 2 build? Je suppose que je peut être en mesure de relier mon script shell en antrun invocation ou quelque chose de similaire.

Expériences personnelles sont les plus appréciés.

44voto

Pascal Thivent Points 295221

Vous trouverez quelques informations sur le plug-in disponible dans le Protocole de Tampons de référentiel dans le Protocole de Tampons Compilateur Maven Plug-In thread sur le Protocole de Tampons groupe de discussion. Ma compréhension est qu'il est utilisable, mais manque de tests. Je donnerais un essai.

Ou vous pouvez simplement utiliser l' antrun plugin (snipet collé à partir du thread mentionné ci-dessus):

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

23voto

Max A. Points 1916

La accepté de répondre m'a encouragé à obtenir de la Google-plugin fourni à travailler. J'ai fusionné la branche mentionné dans ma question dans une caisse de 2.2.0 code source, construit et installé/déployé le plug-in, et a été en mesure de l'utiliser dans mon projet comme suit:

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

Notez que j'ai modifié le plugin de la version 0.0.1 (pas INSTANTANÉ), afin de le faire passer dans mon non-instantané tiers Nexus référentiel. YMMV. La vente à emporter est que ce plugin sera utilisable une fois qu'il n'est plus nécessaire de sauter à travers des cerceaux pour obtenir ce que ça va.

21voto

jsravn Points 331

La solution retenue n'est pas à l'échelle de plusieurs proto fichiers. Je devais venir avec mon propre:

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

10voto

morgwai Points 81

Il y a aussi de grands plugin par Igor Petruk nommé protobuf-maven-plugin. C'est dans le centre des pensions de maintenant et joue bien avec eclipse (m2e-1.1 est recommandé).

4voto

mrm Points 558

Je viens de mettre à jour le plugin maven pour travailler avec 2.2.0 -- la mise à jour de pom sont attachés à la révision du code de bug.

Voici les instructions pour construire le plugin vous-même:

svn co http://protobuf.googlecode.com/svn/branches/maven-plugin/tools/maven-plugin
cd maven-plugin
wget -O pom.xml 'http://protobuf.googlecode.com/issues/attachment?aid=8860476605163151855&name=pom.xml'
mvn install

Vous pouvez ensuite utiliser le maven config ci-dessus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X