J'ai un grand projet qui utilise SWT sur plusieurs plateformes différentes comme windows (32 et 64 bits), linux-gtk (32 et 64 bits) etc. Le projet a plusieurs modules en une structure simple:Constructions multi-plateformes multi-plateformes avec Maven
project-parent +- core +- swt-bridge (uses SWT) +- module1 (uses swt-bridge module) +- module2 +- ... +- module17 (uses swt-bridge module)
J'aimerais pouvoir exécuter mon code depuis Eclipse sur toutes les plateformes supportées. Par exemple. si je regarde le module swt-bridge
sur une machine Windows 32 bits, il devrait avoir les dépendances Windows SWT 32 bits, et aussi avoir les DLL requises extraites dans un répertoire que je peux ensuite ajouter à java.library.path
.
Je peux spécifier différentes dépendances en définissant des profils activés par os.family
et os.arch
.
<profile> <id>macos</id> <activation> <os> <family>macosx</family> <arch>x86</arch> </os> </activation> <properties> <swt.native.groupId>org.eclipse.swt.carbon.macosx</swt.native.groupId> <swt.native.artifactId>x86</swt.native.artifactId> <swt.native.version>3.5.1</swt.native.version> </properties> </profile>
Je peux aussi utiliser le maven-dependency-plugin
pour extraire toutes les DLL, fichiers .so du SWT JAR target/swtlib
, et de les utiliser d'Eclipse.
Cela fonctionne très bien si je mets les profils dans le module swt-bridge
. Mais de cette façon, je ne peux pas voir les propriétés définies par le profil actif d'autres projets, par exemple. Je ne peux pas utiliser le plugin de dépendance avec ces propriétés (ce que je voudrais). Je pensais que je pouvais résoudre ce problème en déplaçant les profils vers le POM parent, et en effet, si je construis le produit entier, cela fonctionne. Mais de cette façon, je ne peux pas construire un seul module, car Maven se plaindra des propriétés manquantes.
Je suis sûr que beaucoup de gens sont confrontés à ce problème, donc il doit y avoir un moyen de gérer cela correctement dans Maven. Quelqu'un peut-il me dire ce que c'est?
Ai-je raison de supposer que vous avez un véritable héritage de projets maven (c.-à-d.sous-projet pom contient élément avec les coordonnées du projet parent correspondant) et dit que le module enfant unique ne peut pas être construit en raison de propriétés manquantes? –
Oui, il y a les pointeurs appropriés à. Est-ce que quelque chose dit que je ne suis pas autorisé à construire un module de cette façon? –
Eh bien, la documentation Maven dit ce qui suit: 'Lorsqu'un projet spécifie un parent, il hérite des informations contenues dans le POM du projet parent. Il peut ensuite remplacer et ajouter aux valeurs spécifiées dans ce POM parent '. C'est à dire. votre projet enfant est supposé voir les propriétés du projet parent. Je viens de vérifier que si le projet parent définit un profil activé et qu'il est activé, le projet maven build for child en voit les propriétés correctes. –