Frage

Ich arbeite in einem kleinen Team (3 Personen) auf mehreren Modulen (etwa 10 derzeit). Die Erstellung, Integration und das Management von Build-Versionen werden immer mehr und mehr langweilig. Ich bin auf der Suche nach einem guten build / Integrations-Tool ersetzen / Komplett Ant.

Hier ist die Beschreibung unserer aktuellen Entwicklungsumgebung: - Mehrere Module auf jedem über je und auf fremden JARs - Einige JARS exportieren können, einige Export WARS, einige Exportstandalone, runnable JARS (mit Fat-Jar) - Javadoc für alle von ihnen - Wir arbeiten mit Eclipse - Benutzerdefinierte Ant-Skript für jedes Modul. Viele redundante Informationen zwischen der Eclipse-Konfiguration und Ant-Skripten. Zum Beispiel für den Standalone-Fat-JAR, haben wir alle rekursiven Abhängigkeiten aufgeführt, während im Idealfall deutlich von der Eclipse-Konfiguration importiert werden konnten. - Der Quellcode wird versioniert SVN mit

Hier ist, was ich möchte eine perfekte Integration Tool für mich zu tun:

  • Automatisieren der Releases und Versionierung von Modulen. Idealerweise sollte das Integrations-Tool erkennt, ob eine neue Version benötigt wird. Zum Beispiel, wenn ich ein Projekt A freigeben will, die an einem Projekt B abhängt, und wenn ich kleine Änderungen an dem Projekt B lokal, dann ist das Integrations-Tool sollte zunächst Release eine neue Version von B als auch und macht A basierend auf gemacht es.

  • Integrieren stark mit Eclipse, so dass es die Abhängigkeiten zwischen den Modulen und Dritten Libs von seiner Konfiguration bekommen kann. BTW, würde Ich mag zu konfigurieren Build-Pfad mit Eclipse fortzusetzen, ohne eine andere „.xml“ Sachen zu aktualisieren. Ich sehe, dass Gradle kann Eclipse-Projektdateien von seiner Konfiguration erzeugen, aber das Gegenstück wäre toll.

  • Aktivieren eine „live“ und transparente Entwicklung auf lokale Projekten. Ich meine, dass ich oft kleine Änderungen an dem Kern / gemeinsamen Projekte zu machen, während das Haupt / „Blatt“ Projekte zu entwickeln. Ich möchte meine Änderungen auf Kernprojekte sofort zur Verfügung Blatt Projekte ohne die Notwendigkeit der Veröffentlichung (auch vor Ort) die JAR-Dateien meiner Kernprojekte haben.

  • Speichern Sie alle Versionen der Veröffentlichungen meines Moduls auf einem externen Server. Die einfachste (Aktien Ordner / WebDAV) würde das Beste sein. Eine schöne Webseite mit einer Liste von Modulen und geliefert Artefakte wäre toll sein.

Ich habe viele Dinge sah sich um. Von Ant4eclipse, auf die Maven / Ivy / Gradle Tools (die Eclipse-Konfiguration in meinen Ant-Skript integrieren).

Ich bin ein wenig verwirrt. Hier ist, was ich bisher verstanden: - Maven ist ein großes / big Werkzeug, aber etwas steif und verpflichtet Sie zu seiner Struktur und Konzepten zu biegen. Es basiert auf Beschreibung basiert statt auf Scripting. Wenn Sie den Weg gehen, müssen Sie Sie eigene Plugins entwickeln. - Ivy ist weniger leistungsfähig als maven, Griffe es weniger Material aber ist flexibler. - Gradle ist in-between. Es ist allgemeine Zwecke. Es ermöglicht Scripting sowie „Konvention basiert“ -Konfiguration. Es integriert Ant und erweitert es.

Deshalb an dieser Stelle Ich suche tatsächliche Bewertungen von echten Benutzern. Welche Tools verwenden Sie? Wie ? Haben Sie die gleichen Bedürfnisse wie ich? Ist es Ihr Leben erleichtern oder in die Quere kommen?

Gibt es einige Anwendungsfälle probieren oder Arbeitsplatz Skelette gibt, die ich als Ausgangspunkt nutzen könnte, um zu sehen, was diese Werkzeuge sind in der Lage?

Sorry für die Länge dieser Nachricht. Und Dank im Voraus für Sie nach Rat.

Mit freundlichen Grüßen

Raphael

War es hilfreich?

Lösung

Automatisieren des Releases und Versionierung von Modulen (...)

Die Konzepte der Versionsverwaltung und Repository integriert mit Maven und sie konnten hier passen.

Maven unterstützt SCHNAPPSCHUSS Abhängigkeiten . Wenn eine Momentaufnahme verwenden, Maven werden in regelmäßigen Abständen versuchen, die neueste verfügbare Snapshot von einem Repository zum Download, wenn Sie einen Build ausführen. SNAPSHOT sind in der Regel verwendet, wenn ein Projekt im Rahmen einer aktiven Entwicklung.

Maven 2 unterstützt auch Version Bereiche (ich sie nicht wirklich empfehlen, aber das ist eine andere Geschichte), die zum Beispiel zu konfigurieren A erlauben, auf Version [4.0,) von B (jede Version größer oder gleich 4,0) abhängig zu sein. Wenn Sie eine neue Version von B aufbauen und loslassen, würde A verwenden.

Integrieren stark mit Eclipse

Die m2eclipse Plugin bietet bi-direktionale Synchronisation mit Eclipse.

Aktivieren eine "live" und transparente Entwicklung auf lokale Projekten.

Die m2eclipse Plugin unterstützt „Arbeitsbereich Auflösung“: wenn Projekt A ist abhängig von Projekt B und wenn Projekt B im Arbeitsbereich ist, können Sie eine Konfiguration auf B Quellen abhängen und nicht auf B.jar (die der Standardmodus ist, wenn ich ‚m nicht falsch). So ein Wechsel auf B Quellen würde direkt sichtbar sein, ohne die Notwendigkeit B.jar zu bauen.

Speichern Sie alle Versionen der Veröffentlichungen meines Moduls auf einem externen Server.

Wie bereits erwähnt, ist dies eigentlich ein zentrales Konzept von Maven (Sie auch nicht die Wahl haben) und die Bereitstellung von über file: // oder dav. // werden beide unterstützt


Um es zusammenzufassen, Maven ist (wahrscheinlich) nicht der einzige Kandidat, aber ich bin sicher, es wäre passen:

  • Ihr Projekt ist nicht so exotisch oder komplex, es gibt nichts Scheuchen aus Ihrer Beschreibung ist (einige Refactoring der Struktur werden wahrscheinlich erforderlich sein, aber das sollte kein großes Problem sein).
  • Maven bringt auch einen Workflow auf Basis von Best Practices.
  • m2eclipse bietet eine starke Integration in der IDE.

Aber Maven hat eine gewisse Einarbeitungszeit.

Andere Tipps

CI-Tools? Für mich gibt es nur einen: Hudson CI .


Ich habe Setup eine Software-Entwicklungsumgebung für Java einmal, mit den Komponenten:

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

und einige Apache, MySQL, PHP, Perl, Python, .. für die Integration.

Die hudson wurde nicht mit Eclipse integriert und das war absichtlich, weil ich zu bauen auf einem separaten Server wollte. für alle anderen Werkzeuge hatte ich eine perfekte Cross-Integration (wie: mylyn auf Eclipse Gespräch mit Bugzilla, m2eclipse für die Verwendung von Maven Eclipse, eine Menge von Plugins für hudson, ...)

Wir haben beginnend worden Gradle in unseren Build-Prozess zu integrieren, und ich kann hinzufügen, um die Antworten bereits gebucht, dass Gradle würde auch funktionieren. Ihre Annahmen sind meist richtig, gradle ist mehr aus dem Handgelenk, sondern ist leistungsstark und ermöglicht Scripting und so innerhalb des selbst aufbauen. Es scheint, dass die meisten Dinge maven tun kann, gradle auch der Fall ist.

Jetzt für Ihre individuellen Punkte:

Versioning : gradle unterstützt Abhängigkeitskarten, Versionierung und wenn Sie in einem CI-Server hinzufügen, können Sie automatische Trigger / abhängig aufbaut. Zum Beispiel ist .wars fast alle unserer ‚Leistungen‘, aber wir haben mehr Code-Bibliotheken (.jars) und eine ausführbare .jar in der Entwicklung. Eine Konfiguration ist es, die die Kriege und das „Fett-jar“ abhängig von dem gemeinsamen Code Libs zu machen. Dann, wenn die gemeinsam genutzten Bibliotheken aktualisiert werden, die Versionen auf den gemeinsam genutzten Bibliotheken stoßen, die verzehrende Projekte testen, verwenden Sie dann Hudson Fähigkeit abhängig Projekte abzufeuern denen erneut bereitstellen. Es gibt andere Möglichkeiten, aber das scheint am besten für uns zu arbeiten, denn jetzt.

Integrieren stark mit Eclipse : Du hast Recht, gradle können die Eclipse-Dateien erzeugen. Wir neigen dazu, nur die eclipseCp zu verwenden (Update .classpath) Aufgabe, wenn wir loslegen, da nur Classpath Bedarf geändert werden. Es ist eine Art schrulligen (packt Ihre Standard-JRE, so stellen Sie sicher, dass es richtig ist, fügen Sie nicht exportiert = „true“, wenn Sie es brauchen), aber bekommt man 99% der Weg dorthin.

Aktivieren eines „live“ und transparente Entwicklung auf lokaler Projekte : Dies ist ein Ich bin nicht sicher bin. Ich habe nur um gradle in diesem Fall gehackt; durch das Artefakt in dem konsumiere Projekt zu entfernen und das gemeinsame Projekt als solches in Eclipse markiert, dann später rückgängig gemacht.

Speichern Sie alle Versionen der Veröffentlichungen meines Moduls auf einem externen Server :. Einfache und viele Ansätze unterstützt werden, ähnlich wie Maven

Soweit Beispiele, die Dokumentation für gradle sind gut, ebenso wie die Beispiel-Projekte, die mit dem vollen Reißverschluss kommen. Sie werden erhalten Sie und ziemlich schnell ausgeführt wird.

Hier finden Sie aktuelle Ant Ivy. http://ant.apache.org/ivy/

Es sind keine Allheilmittel, aber nach meiner Erfahrung ist Maven ein großes Projekt-Management-Tool. Persönlich Ich mag eine comibnation von Subversion verwenden (für die Versionskontrolle) Maven (für Projekt / Build-Management) und hudson (für die kontinuierliche build / Integration).

ich die Konvention von Maven gebracht finden, ist für Kontextwechsel wirklich nützlich, und groß für Abhängigkeitsmanagement. Es kann frustrierend sein, wenn Gläser nicht in den Repositories sind, aber Sie können sie lokal installieren und wenn Sie bereit sind, können Sie Ihr eigenes Repository, das Spiegel an anderen Orten hosten. Ich habe eine gute Erfahrung mit sonar.nexus hatte von http://www.sonatype.com/ . Sie spielen auch eine excellenmt kostenloses Buch zur Verfügung stellen, um Ihnen den Einstieg erleichtern.

Es mag wie viel des Guten jetzt scheinen, aber ein gutes Build / Test / Integration / Release-Umgebung jetzt einrichten, später auszahlen. Es ist immer schwieriger zu retro-fit, und es ist etwas, das man leicht replizieren.

Schließlich passieren wir Netbeans Integration für Maven bevorzugen, aber das ist nur ich:)

Einige Ihrer Themen sind Teil der Implementierung und Release-Management.

Sie können ein Produkt überprüfen, wie: Xebia Deployit
(Mit einem Personal Edition , die frei ist)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top