Cela peut être plus d'un processus que d'une solution technologique. Je travaille actuellement sur un projet qui est divisé en une bibliothèque et une application de mise en œuvre. Cela a été un moyen très efficace de déboguer la bibliothèque lors de la construction de l'application. Je voudrais utiliser Maven pour les deux projets mais je ne veux pas faire une build et déployer pour chaque changement mineur. Existe-t-il un moyen pour Maven de référencer le projet en tant que référentiel?Développement de bibliothèques avec Maven
Répondre
Vous avez raison, c'est une question de processus. J'interprète votre question comme voulant éviter de déclarer une version spécifique de la bibliothèque en tant que dépendance dans l'implémentation. L'intention est de mettre à jour l'un ou l'autre des composants indépendamment, en particulier vous voulez pouvoir mettre à jour la bibliothèque sans avoir à reconstruire l'implémentation.
Vous devrez évidemment reconstruire et redéployer quelque chose si vous apportez une modification. Cependant, je peux voir deux étapes qui devraient répondre à vos préoccupations. Je vais appeler vos composants 'lib' et 'app'.
- Créer un projet "wrapper" vide, dépendant (scope = runtime) à la fois sur lib et app. Ce wrapper est ce que vous allez déployer. Lorsque vous mettez à jour la bibliothèque ou l'application, vous n'avez qu'à mettre à jour la version de cette dépendance dans le projet wrapper. Lorsque vous "build" (compile est une no-op) et tester le projet wrapper, vous confirmerez que l'ancienne/nouvelle application fonctionne toujours avec la nouvelle/ancienne lib, et vous pouvez déployer la mise à jour. Bien sûr, si vos tests échouent, vous devrez mettre à jour la dépendance de lib de l'application pour voir si une reconstruction corrige le problème, et essayer de trouver quel composant a le bug. Donc, ce n'est qu'une solution à mi-chemin, à mon avis.
- Mieux vaut aussi créer un composant 'lib-api', qui déclare l'interface entre lib et app. Faites en sorte que lib et ap dépendent toutes deux de lib-api, mais l'application est et non en fonction d'une version spécifique de lib. Vous pouvez toujours vouloir un projet wrapper comme ci-dessus, pour faciliter le déploiement (puisque vous aurez besoin de déployer à la fois lib et app). Mais tant que vous n'avez pas besoin d'affecter l'API de la librairie, vous pouvez être sûr que vos changements de lib ou d'application sont protégés les uns des autres et ne nécessiteront pas (ne peuvent pas) une reconstruction. Cela pourrait faciliter le suivi des bogues. Si vous avez besoin de mettre à jour lib-api, vous aurez évidemment besoin de tout reconstruire, mais ce serait vrai de toute façon et au moins de cette façon il est exposé dans la structure du projet.
J'espère que cela a du sens pour vous et j'ai correctement interprété votre question.
Vous pouvez avoir un "super-pom" qui a deux sous-projets. Un projet serait votre bibliothèque et l'autre projet serait votre application. Les deux peuvent être développés individuellement.
Votre application dépendrait du projet avec la bibliothèque.
Par exemple:
"super-pom": stocker ce pom.xml dans le répertoire plus haut. Vous auriez quelque chose comme ça dans ce:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>your.group</groupId>
<artifactId>project</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<name>caap</name>
<modules>
<module>project-library</module>
<module>project-app</module>
</modules>
</project>
Ensuite, votre pom.xml bibliothèque aurait quelque chose comme ceci:
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>project</artifactId>
<groupId>your.group</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>=your.group</groupId>
<artifactId>project-library</artifactId>
<version>1.0-SNAPSHOT</version>
<name>project-library</name>
</project>
Et votre application aurait quelque chose comme ceci:
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>project</artifactId>
<groupId>your.group</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>=your.group</groupId>
<artifactId>project-application</artifactId>
<version>1.0-SNAPSHOT</version>
<name>project-application</name>
<dependencies>
<dependency>
<artifactId>project-library</artifactId>
<groupId>your.group</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
mvn install
On dirait ce que je veux. Il suffit de l'exécuter depuis le projet pour l'ajouter au dépôt local et les autres applications peuvent le récupérer.
- 1. Gestion des bibliothèques natives avec Maven
- 2. Maven et bibliothèques natives
- 3. Java développement maven lent
- 4. Création d'un projet maven avec des bibliothèques JNI externes
- 5. Cross (console) -Plates-formes de développement/bibliothèques?
- 6. Comment environnement de développement bundle configuration (Eclipse Equinox Maven)
- 7. Quelles bibliothèques tierces sont disponibles pour le développement de l'iPhone?
- 8. IzPack-maven-plugin n'inclut pas les bibliothèques natives par défaut
- 9. Bâtiment Maven pour GoogleAppEngine, obligé d'inclure les bibliothèques JDO?
- 10. Fichiers de configuration externes avec Maven
- 11. Développement du service CXF RESTful à l'aide de sysdeo-tomcat-plugin avec maven
- 12. Custom compiler avec maven
- 13. Travailler avec Maven
- 14. environnement de développement Java
- 15. JavaFX avec Maven
- 16. Exécuter build.xml avec Maven
- 17. Invalid URI avec Maven
- 18. Besoin d'aide avec l'exemple maven
- 19. NCover Avec de nombreuses bibliothèques de classes
- 20. m2eclipse - après définition de pom et dépendances - pas de bibliothèques sur les dépendances classpath/Maven
- 21. est les bibliothèques de goyave disponibles dans le repo de maven?
- 22. projet de construction de cacao avec maven
- 23. Maven échoue avec tomcat-maven-plugin depuis ce matin
- 24. jetty-maven-plugin ne fonctionne pas avec Maven 3
- 25. erreur Maven avec plusieurs exécutions dans maven-deploy-plugin
- 26. Déploiement de build Maven
- 27. Ambiguïté avec les bibliothèques de classes std
- 28. Utilisation de bibliothèques Java JAR avec C++
- 29. Utilisation de bibliothèques standard .Net avec VBA
- 30. Utilisation de GDB avec des bibliothèques externes
Okay J'ai totalement mal interprété votre question et essayé d'y répondre entre-temps ... et je ne comprends même pas ce que vous deviez faire auparavant? Je vais laisser ma réponse mais n'hésitez pas à l'ignorer. –
Je suis relativement nouveau à Maven donc l'oubli. Dans Eclipse, l'application utilisait le projet lib, en tant que dépendance, puis construisait et déployait l'application. – BobBrez