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:
-
Long shot: est-il un "Protocole Tampons plugin" pour Maven 2 que peut atteindre l'-dessus dans un automagic façon? Il y a un 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.
-
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 dans unantrun
invocation ou quelque chose de similaire.
Expériences personnelles sont les plus appréciés.
- C'est 7 ans question, qui pour la plupart ont dépassées les réponses (sauf une). Questions les plus récentes sont liées. E. g. stackoverflow.com/questions/40426366/... et stackoverflow.com/questions/40575671/...
Vous devez vous connecter pour publier un commentaire.
Vous trouverez quelques informations sur le plug-in disponible dans le Protocole de Tampons de référentiel dans la Protocol Buffers Compilateur Maven Plug-In fil 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 le
antrun
plugin (snipet collé à partir du thread mentionné ci-dessus):<exec failonerror="true" executable="protoc">
..proto
fichiers, dois-je les ajouter un par un dans ce script, comme vous l'avez fait avectest.proto
? Comme si j'ai deux proto fichiers, je vais écrire ça comme ça, hein?<arg value="target/proto/Empty.proto"/> <arg value="target/proto/ComponentState.proto"/>
[exec] /home/usr/workspace_runtime_x/x.messages/proto/ros/RosTime.proto: File does not reside within any path specified using --proto_path (or -I). You must specify a --proto_path which encompasses this file. Note that the proto_path must be an exact prefix of the .proto file names -- protoc is too dumb to figure out when two paths (e.g. absolute and relative) are equivalent (it's harder than you think)
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:
Noter que j'ai changé 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.
La solution retenue n'est pas à l'échelle de plusieurs proto fichiers. Je devais venir avec mon propre:
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é).
.proto
fichiers danssrc/main/protobuf
, vous aurez le résultat danstarget/generated-sources/protobuf
. Vous aurez toujours besoin deprotoc
sur votrePATH
pour que cela fonctionne.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:
Vous pouvez ensuite utiliser le maven config ci-dessus.
J'ai juste essayé un moins officiel, mais très récente (v 0.1.7) fourchette de https://github.com/dtrott/maven-protoc-plugin et ça a très bien fonctionné, avec l'aimable autorisation de David Trott. Je l'ai testé avec un couple de Maven modules dont un contenait DTO style des messages et de l'autre un service selon eux. J'ai emprunté la configuration du plugin MaxA posté le 16 Oct '09, j'ai eu protoc sur mon CHEMIN et j'ai ajouté
<temporaryProtoFileDirectory>${basedir}/target/temp</temporaryProtoFileDirectory>
juste après
<protocExecutable>protoc</protocExecutable>
.Ce qui est vraiment bien c'est que tout ce que j'avais à faire est de déclarer une normale de la dépendance à partir du module de service sur la DTO module. Le plugin a été en mesure de résoudre proto fichiers de dépendances par trouver le proto fichiers qui sont emballés avec les DTO module d'extraction dans un répertoire temporaire et de l'aide lors de la génération de code pour le service. Et il a été assez intelligent pour ne pas compresser une deuxième copie de la DTO des cours avec le module de service.
Il y a un plugin maven pour protobuf. https://www.xolstice.org/protobuf-maven-plugin/usage.html
La config minimale
Je pense que l'utilisation de
antrun
d'invoquer la non-Maven étapes est la solution communément acceptée.Vous pouvez également essayer les maven-exec-plugin.
antrun
: (1) Son objectif est de faciliter la migration en provenance ou l'intégration avec Ant. Je suis d'essayer d'atteindre aucun des deux. Ainsi, en l'utilisant dans ce cas, semblent presque comme une mauvaise utilisation. (2) je suis vraiment juste pour frayer un externe des processus du système d'exploitation. En tirant dans tous Ant juste pour qui est, à mon humble avis, exagéré.maven-exec-plugin
sonne comme une cure de minceur et de choix plus approprié dans ce cas.Je bifurquais du plugin de David Trott et avoir de la compilation de plusieurs langues, ce qui le rend beaucoup plus utile. Voir le projet github ici et un tutoriel sur l'intégration avec un maven build ici.