Question

Je travaille dans une petite équipe (3 personnes) sur plusieurs modules (10 actuellement). La compilation, l'intégration et la gestion des versions de construction devient de plus en plus fastidieux. Je cherche une bonne construction / outil d'intégration pour remplacer / Ant complète.

Voici la description de l'environnement de développement actuel:  - Plusieurs modules en fonction de chaque cours et JARs tiers  - Certains peuvent exporter POTS, certains WARS d'exportation, certains autonome d'exportation, POTS exécutables (avec Fat-pot)  - Javadoc pour tous  - Nous travaillons avec Eclipse  - script Ant personnalisé pour chaque module. De nombreuses informations redondantes entre la configuration d'Eclipse et des scripts Ant. Par exemple, pour la version autonome Fat-JAR, nous avons répertorié toutes les dépendances récursives, alors idéalement, il pourrait bien être importé de la configuration de l'éclipse.  - Le code source est versionné en utilisant SVN

Voici ce que je voudrais un outil d'intégration parfaite à faire pour moi:

  • automatiser les rejets et des versions de modules. Idéalement, l'outil d'intégration doit détecter si une nouvelle version est nécessaire. Par exemple, si je veux sortir un projet A qui dépend d'un projet B, et si je l'ai fait de petits changements sur le projet B au niveau local, l'outil d'intégration devrait d'abord sortir une nouvelle version de B ainsi et de faire une basée sur il.

  • fortement avec Integrate éclipse, afin qu'il puisse obtenir les dépendances entre les modules et les bibliothèques tiers de sa configuration. BTW, je voudrais continuer à chemin de génération de configuration avec Eclipse sans mettre à jour d'autres choses « .xml ». J'ai vu que Gradle peut générer des fichiers de projet Eclipse de sa configuration, mais la contrepartie serait grande.

  • Activer un développement « en direct » et transparente sur des projets locaux. Je veux dire que je fais souvent de petits changements sur les principaux / projets communs, tout en développant les principaux projets / « feuille ». Je voudrais que mes changements sur les projets de base immédiatement disponibles à des projets de feuille sans la nécessité de publier (même localement) les JARs de mes projets structurants.

  • Magasin toutes les versions des versions de mon module sur un serveur externe. Les plus simples (actions dossier / Webdav) serait le meilleur. Une page web agréable avec la liste des modules et des objets livrés serait trop grand.

J'ai regardé autour pour beaucoup de choses. De Ant4eclipse (pour intégrer la configuration Eclipse dans mon script Ant), aux outils Maven / Ivy / Gradle.

Je suis un peu confus. Voici ce que je l'ai compris jusqu'à présent:  - Maven est un outil grand / grand, mais est un peu rigide et vous oblige à se plier à sa structure et les concepts. Il est basé sur la description plutôt que sur les scripts. Si vous sortez du chemin, vous devez vous développer vos propres plugins. - Ivy est moins puissant que Maven, il gère moins de choses, mais est plus souple. - Gradle est entre les deux. Il est d'usage général. Il permet les scripts ainsi que la configuration « convention basée ». Il intègre Ant et l'étend.

Donc, à ce stade, je cherche des témoignages réels des utilisateurs réels. Quels outils utilisez-vous ? Comment ? Avez-vous les mêmes besoins que moi? Est-il facilité votre vie ou entrer dans le chemin?

Y at-il des cas d'échantillonner utilisation, ou des squelettes d'espace de travail là-bas que je pourrais utiliser comme point de départ pour voir ce que ces outils sont capables?

Désolé pour la longueur de ce message. Et merci à l'avance pour vous conseiller.

Cordialement,

Raphaël

Était-ce utile?

La solution

  

automatiser le presse et des versions de modules (...)

Les concepts de versioning et le dépôt sont intégrés avec Maven et ils pourraient s'adapter ici.

INSTANTANÉ dépendances . Lorsque vous utilisez un instantané, Maven essayera périodiquement pour télécharger le dernier instantané disponible à partir d'un référentiel lorsque vous exécutez une construction. INSTANTANÉ sont généralement utilisés lorsqu'un projet est en cours de développement.

Maven 2 prend en charge également Version gammes (je ne recommande vraiment eux, mais c'est une autre histoire) qui permettent par exemple de configurer un dépendre [4.0,) version B (une plus grande version supérieure ou égale à 4,0). Si vous construisez et une nouvelle version de B, A l'utiliserait.

  

Intégrer fortement avec éclipse

m2eclipse plug-in assure la synchronisation bidirectionnelle avec Eclipse.

  

Activer un développement « en direct » et transparente sur des projets locaux.

Le plugin m2eclipse supports « résolution de l'espace de travail »: si le projet A dépendent de projet B et si le projet B se trouve dans l'espace de travail, vous pouvez configurer A dépendre des sources B et non sur B.jar (qui est le mode par défaut si je 'M pas tort). Donc, un changement des sources B serait directement visible, sans la nécessité de construire B.jar.

  

Magasin toutes les versions des versions de mon module sur un serveur externe.

Comme mentionné précédemment, c'est en fait un concept central de Maven (vous ne même pas le choix) et le déploiement par file: // ou dav:. // sont tous deux pris en charge


Pour résumer, Maven est (probablement) pas le seul candidat, mais je suis sûr qu'il cadrerait:

  • Votre projet n'est pas exotique ou complexe, il n'y a rien d'effarouchement de votre description (refactoring de la structure sera probablement nécessaire, mais cela ne devrait pas être un gros problème).
  • Maven apporte également un flux de travail basé sur les meilleures pratiques.
  • m2eclipse fournit une forte intégration avec l'IDE.

Mais Maven a une courbe d'apprentissage.

Autres conseils

Outils de CI? Pour moi, il n'y a qu'une seule: Hudson CI .


J'ai installé un environnement de développement logiciel pour Java une fois, avec les composants:

  • Eclipse IDE
  • Mercurial
  • Bugzilla
  • maven
  • Nexus
  • Hudson CI

et certains apache, mysql, php, perl, python, .. pour l'intégration.

Le hudson n'a pas été intégré à Eclipse et qui était à dessein, parce que je voulais construire sur un serveur distinct. pour tous les autres outils que j'ai eu une intégration parfaite croix (comme: mylyn sur Eclipse pour parler avec Bugzilla, m2eclipse pour utiliser Eclipse Maven, un grand nombre de plug-ins pour hudson, ...)

Nous avons commence à intégrer Gradle dans notre processus de construction, et je peux ajouter aux réponses déjà affichées que Gradle travailleraient aussi. Vos hypothèses sont la plupart du temps correct, gradle est plus large le brassard, mais il est puissant et permet de scripts et comme dans le build lui-même. Il semble que la plupart des choses Maven peut faire, gradle fait aussi bien.

pour vos points individuels:

Versioning : supports Gradle cartes de dépendance, versioning, et si vous ajoutez un serveur de CI, vous pouvez déclencher automatisé / dépendant construit. Par exemple, la quasi-totalité de nos apports attendus sont .wars, mais nous avons plusieurs libs de code (de .jars) et un .jar exécutable dans le développement. Une configuration est de faire les guerres et la personne à charge « fat-pot » sur les libs de code partagé. Puis, quand les bibliothèques partagées sont mis à jour, les versions bump sur les bibliothèques partagées, tester les projets consommateurs, puis utiliser la capacité d'Hudson à tirer des projets dépendant de redéployer ceux-ci. Il existe d'autres moyens, mais qui semble le mieux pour nous, pour l'instant.

Intégrer fortement avec éclipse : Vous avez raison, gradle peut générer les fichiers d'éclipse. Nous avons tendance à utiliser uniquement le eclipseCp (pour la mise à jour .classpath) tâche une fois que nous y aller, car seuls besoins de classpath changé. Il est un peu bizarre (attrape par défaut JRE, alors assurez-vous qu'il est juste, ne pas ajouter exporté = « true » si vous en avez besoin), mais vous obtient 99% du chemin.

Activer un « live » et le développement transparent sur des projets locaux : C'est celui que je ne suis pas sûr. Je n'ai piraté autour gradle dans ce cas; en supprimant l'artefact dans le projet long et a marqué le projet partagé en tant que telle éclipse, puis est revenu par la suite.

Stockez toutes les versions des versions de mon module sur un serveur externe :. Simple et de nombreuses approches sont prises en charge, similaire à Maven

En ce qui concerne à titre d'exemple, les documents pour gradle sont bons, ainsi que les exemples de projets qui viennent avec le zip pleine. Ils vous permettent d'être opérationnel assez rapidement.

Jetez un oeil à Ant Ivy. http://ant.apache.org/ivy/

Il n'y a pas de solution miracle, mais dans mon expérience Maven est un outil de gestion de projet. Personnellement, je préfère utiliser un comibnation de subversion (pour le contrôle de version), Maven (pour le projet / construction de gestion) et hudson (pour la construction / intégration continue).

Je trouve la convention apportée par Maven est vraiment utile pour le changement de contexte, et une grande pour la gestion des dépendances. Il peut être frustrant si les pots ne sont pas dans les dépôts, mais vous pouvez les installer localement et lorsque vous êtes prêt, vous pouvez héberger votre propre référentiel privé miroirs autres lieux. J'ai eu une bonne expérience en utilisant sonar.nexus par http://www.sonatype.com/ . Ils fournissent également un livre gratuit excellenmt pour vous lancer.

Il peut sembler exagéré maintenant, mais la mise en place d'une bonne construction / test / intégration / environnement de libération maintenant, va verser des dividendes plus tard. Il est toujours plus difficile est de rétrofit, et il est quelque chose que vous pouvez facilement reproduire.

Enfin, je suis d'préférer l'intégration Netbeans pour Maven, mais c'est juste moi:)

Certains thèmes font partie du déploiement et la gestion des versions.

Vous pouvez vérifier un produit comme: Xebia Deployit (Avec une édition personnelle qui est gratuit)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top