C et C++ avec Maven : maven-nar-plugin

By , 14/07/2011

J’ai eu l’occasion de travailler sur plusieurs outils de build très différents comme MakeFile, Ant ou Maven. Chacun possède ses spécificités, ses avantages et ses inconvénients. Mais en règle générale, j’ai l’impression que les gens associent souvent un outil avec une technologie particulière : MakeFile pour C/C++, Ant ou Maven pour le Java. En réalité il est possible d’utiliser ces outils de build indépendamment des technologies utilisées.

Je pense que Maven est l’outil le plus abouti sur lequel j’ai travaillé jusqu’à présent. Il y a peu de temps, je découvrais qu’il était possible de l’utiliser avec des projets Flex grâce à l’extension FlexMojo. Cela m’a redonner envie de trouver une solution simple pour utiliser Maven dans un projet C/C++.

Jusqu’à aujourd’hui je ne connaissais que le plugin Native mais je l’ai toujours trouvé trop compliqué et au final, je n’ai jamais réussi à l’utiliser. C’est dans ce contexte d’échec que je viens de découvrir une extension C/C++ (et Fortran) qui fonctionne sans effort ou presque : maven-nar-plugin. Lorsque j’écris “presque” sans effort c’est tout simplement parce que les plugins nécessaires ne sont pas encore disponible sur le repository central.

Voici la structure standard des répertoires de cette extension :

/yourproject
    /src
        /main
            /java
            /resources
            /include
            /c++
            /c
            /fortran
        /test
            /java
            /resources
            /include
            /c++
            /c
            /fortran

Pour installer maven-nar-plugin dans le répository local, il est nécessaire d’installer au préalable la librairie net.sf.antcontrib:cpptasks-parallel qui se trouve sur le repository GIT http://github.com/duns/cpptasks-parallel.

git clone http://github.com/duns/cpptasks-parallel cpptasks-parallel

Puis

cd cpptasks-parallel
mvn clean install

Il faut procéder de la même façon pour installer le plugin nar qui se trouve sur le repository GIT https://github.com/duns/maven-nar-plugin.git et l’archetype maven-archetype-nar-exec sur le repository https://github.com/duns/maven-archetype-nar-exec.git. Cet archetype va permettre de créer un projet exemple pour débuter rapidement grâce à la commande suivante :

mvn archetype:generate -DarchetypeArtifactId=maven-archetype-nar-exec
        -DarchetypeVersion=1.0-SNAPSHOT
        -DgroupId=com.mycompany.app
        -DartifactId=my-cpp-app

Après l’exécution du build Maven sur ce nouveau projet (mvn install par exemple), l’exécutable se retrouve dans le répertoire target/nar/my-cpp-app-1.0-SNAPSHOT-*-executable/bin/*/my-cpp-app.

7 Responses to “C et C++ avec Maven : maven-nar-plugin”

  1. revo says:

    cmake est utilisé pas beaucoup de projets open source, il semblerait qu’il soit le produit le plus populaire.

    Ce que j’apprécie avec maven c’est de trouver rapidement les librairies nécessaire à mon projet. Ce genre d’outil n’existe pas en c/c++.

    Je viens de tester si maven-nar-plugin importait correctement le projet dans eclipse et ça ne fonctionne pas, le package src/main/c n’est pas défini comme un package.

    • angelsafrania says:

      Il suffit juste de les rajouté dans l’explorer de eclipse cliquer droit et puis build Path/Use as Source Folder.

  2. Yan says:

    Je ne connaissais pas cmake, il va falloir que je me documente un peu plus sur le sujet.

    le plugin n’est pas supporté par m2eclipse et j’ai l’impression que les archives de type nar ne sont pas encore présentent dans le repository central.

    Il y aura peut-être du changement lorsque ce plugin sera déployé sur ibiblio.

  3. lolo says:

    Hello,

    J’ai une question concernant les includes. J’ai fait un “hello word” avec un .h dans includes qd je build (avec maven) je ne trouve pas mon .h dans mon nar.

    Alors la question est …. dois-je passer par une assembly ou bien ai-je oublier qq chose ???

    D’avance merci pour votre aide qui sera sans aucun doute très précisieuse.

    Lolo

    • Yan says:

      Bonjour,

      Je ne suis pas certain de comprendre votre problème mais je pense qu’il est normal que le fichier source (.h) ne se retrouve pas dans l’archive “nar” finale. Je pense que seuls les résultats de la compilation s’y retrouvent.

      Sinon, je ne pense pas qu’il existe de plugin permettant de packager les sources comme avec les projets Java avec, par exemple, le plugin maven-source-plugin.

      • lolo says:

        Le but c’est que j’arrive à mettre le .so et les point h dans du nar.

        J’ai fait un projet avec maven-archetype-nar-lib.

        J’ai buildé les source ACE.

        J’ai copié les .h dans src/main/include.
        J’ai copier les .so dans ressources… (bon ok c pe pourri :)

        Qd je “mvn install” il y a un fichier …-noarch.nar dans lequel je retrouve mes .h et le fichier .jar ou j’ai mes .so

        Ce fichier est bien dans mon répo.

        Je fais un autre projet sur lequel je fais un dépendance (maven) sur mon premier composant. Et ça compile pas …

        genre … mdw_net.h:11:20: fatal error: ace/Os.h: No such file or directory

        merci d’avance pour ton aide

        • Yan says:

          J’ai vu que dans le plugin nar, il ya des exemples dans le répertoire src/it.
          J’ai l’impression que ton cas de figure correspond au cas it0009-jni-dep-lib-shared. Mais je n’en suis pas certain. Par contre j’ai du mal à comprendre comment ca marche car je n’arrive pas à faire un clean install sur cet exemple.

          Peut-être que si tu m’envoies un exemple (via un lien http par exemple) je pourrais creuser un peu plus.

Leave a Reply


6 + six =

OfficeFolders theme by Themocracy