Verwenden von Maven für C / C ++ - Projekte


85

Ich setze Maven Build um Cluster von Amateur-, schlecht geschriebenem und ehrlich gesagt - primitivem C / C ++ - Code (was etwas C, etwas C ++ bedeutet). Das Problem ist, dass derzeit viel davon im Umlauf ist und nicht einfach ersetzt werden kann. Das Erstellen erfordert viel Stammeswissen (man muss von Würfel zu Würfel gehen, um herauszufinden, wie man verschiedene Teile kompiliert / baut) und das Freigeben ist ein totaler Albtraum. (Nein - ich werde es nicht umschreiben, bitte nicht fragen) Meine Frage ist - sollte ich verwenden maven-native-plugin, um eine Vielzahl von kurzen Makefiles zu ersetzen oder exec-maven-pluginum diese einfach auszuführen? Ich hatte bisher ziemlich gute Erfahrungen mit letzterem bei .NET und weiß nicht, ob ich in ein nativePlugin investieren oder bei bleiben soll exec? Wenn Sie Erfahrung mit "Mavenizing" C / C ++ haben, würde ich gerne einen Rat bekommen.


Ich bin gerade dabei, es zu versuchen. Wie ich sehe, wird es immer noch gewartet und ist inzwischen hierher gezogen: github.com/sonatype/maven-nar-plugin
espakm

Antworten:


90

Ich kann das Maven-Nar-Plugin nur empfehlen . Ich finde es in vielerlei Hinsicht den Alternativen überlegen. Es erfordert keine Auflistung von Quelldateien, behandelt mehrere Betriebssysteme und Architekturen, führt Einheiten- und Integrationstests durch und folgt im Allgemeinen "dem Maven-Weg". Es wird eine neue Art von Verpackung eingeführt - das NAR oder "native archive", das das Artefakt enthält, das Sie interessiert (.dll, .so, .a, .exe usw.), aber auch Metadaten, Header usw. in a Art und Weise, die Sinn macht.

Es erfordert ein wenig Vorarbeit, um Software von Drittanbietern in NARs zu packen, aber es ist ziemlich einfach. Sobald es sich um NARs handelt, verwenden Sie einfach den normalen Maven-Abhängigkeitsmechanismus, um eine Verknüpfung mit ihnen herzustellen. Beispiel:

<dependency>
  <groupId>cppunit</groupId>
  <artifactId>cppunit</artifactId>
  <scope>test</scope>
</dependency>

Ein Nachteil ist, dass es nicht aktiv gewartet zu werden scheint, aber es ist voll funktionsfähig und ein ziemlich beeindruckendes Beispiel für das Verfassen von Maven-Plugins.


Danke für den Tipp - ich werde es auf jeden Fall ausprobieren!
Bostone

Ich werde dies als Antwort akzeptieren - dies scheint tatsächlich dem Maven-Native-Plugin überlegen zu sein
Bostone

Viel Glück. Eine Sache zu beachten - Ich habe heute Morgen eine Benachrichtigung erhalten (wie zufällig), dass ein Fehler, den ich vor einem Jahr eingereicht habe, heute behoben wurde - die Wartung scheint reaktiviert zu sein.
SingleShot

2
Es sieht so aus, als ob das Maven-Nar-Plugin jetzt vom Sonatyp gepflegt wird: Issues.sonatype.org/browse/NAR
Tommy Chheng

1
Wenn Sie Beispiele für das Nar-Maven-Plugin verwenden, gehen Sie wie folgt vor, damit es funktioniert: MVN-Paket - Dadurch werden die
Testpakete
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.