2013-06-22 2 views
5

Problem:Praxis für Android-Projekte zu gewährleisten baut direkt nach dem SVN checkout in Eclipse

Wenn ein Projekt in SVN aktiviert ist, und jemand anderes überprüft es aus, gibt es ein Ausrufezeichen darauf und bauen Pfad Fehler sein müssen aufgelöst. Wie man es repariert?

Als Beispiel habe ich ein Projekt und finden es ist Struktur:

Es verfügt über 3 Bibliotheken in libs Ordner:

* android-support-v4.jar 
* bugsense3.2.2.jar 
* gcm.jar 

Android Abhängigkeiten Ordner hat:

* annotations.jar 

referenzierte Bibliotheken hat:

* gcm.jar 

Android privaten Bibliotheken hat:

* bugsense3.2.2.jar 
* gcm.jar 
* android-support-v4.jar 

Google APIs [Android 2.2] hat:

* android.jar 
* maps.jar 

So scheint es, dass wie alles, was wir in den libs Ordner speichern wird den Android privaten Bibliotheken automatisch hinzugefügt, ist das genau? So können sie in SVN überprüfen und, wenn jemand anderes überprüft es aus und baut es, die .jars in Android privaten Bibliotheken einfach zu seinem lokalen Arbeitsbereich zeigen, damit ist kein Thema.

Allerdings referenzieren annotations.jar in Android Abhängigkeiten und android.jar und maps.jar in Google API den android-sdk Ordner auf meinem C :. Also, wenn jemand anderes checkt mein gesamtes Projekt, sie haben Probleme aufbauen, die sie über die Java Build Path zu lösen haben.

Wie ist es üblich, dass alle Bibliotheken in SVN so gespeichert werden, dass ein neuer Entwickler, der das Projekt auscheckt, einfach baut, ohne sich um die Einstellungen zu kümmern? Ich vermute, dass wir auf das Gebiet gehen zu einem Build-Management-System zu verwenden, die kontinuierliche Integration, baue Server, etc etc. Also ich davon weiß etwas haben, aber nie benutzen es tatsächlich in Praktikabilität, wie ich noch nie in einem ausreichend großen Team gearbeitet habe . Wenn jemand so freundlich wäre, mir genau zu geben, was sie benutzen (die wirklichen Werkzeuge wie Maven, Gradle, usw.), dann würde es sehr geschätzt werden!

Danke,

-V

+0

Sie können die privaten JAR-Dateien in einem Maven-Repository im lokalen Dateisystem bereitstellen und in SVN einchecken. Siehe: http://stackoverflow.com/a/12980000/7507 – noahlz

+0

Ich bin mir eigentlich nicht sicher, was du meinst. Nach meiner Frage ist mein Verständnis von Build-Prozessen schwach. Als Ergebnis hoffe ich, dass jemand genau erklären kann, was zu tun ist und welche Werkzeuge zu verwenden sind. Ich habe das Gefühl, dass viele Softwareingenieure, die nicht der Welt großer Teams, CI, Build-Prozesse usw. ausgesetzt waren, es extrem nützlich finden würden! – vkinra

+0

Sie können diesen Ansatz auch mit git, github und Travis-CI selbst verwenden. Große Teams haben damit nichts zu tun. – noahlz

Antwort

5

Es ist nichts Besonderes über die Bibliotheken, die die ADK zum Klassenpfad hinzufügt. Wenn Sie alle Abhängigkeiten Ihres Projekts einchecken möchten, können Sie die referenzierten jars in ein lokales Verzeichnis kopieren und dann den Klassenpfad auf diese verweisen, anstatt die bereitgestellten Bibliotheksgruppen zu verwenden. Da die Android-Plugin, das neue verrückte System, das automatisch Zeug im Libs Verzeichnis auf Ihren Weg und Ihre apk fügt hinzu, würde ich nicht empfehlen, diese Gläser in dort setzen. Normalerweise, was wir hier tun, ist es, einen separaten Ordner in svn Dritter oder so ähnlich genannt erstellen und dann svn:externals verwenden, um die erforderlichen Gläser zu verweisen. Wenn Sie einen gemeinsamen Ort für die Speicherung von Drittanbieter-JARs verwenden, wird das Versionsmanagement und das Konfigurationsmanagement vereinfacht.

Dinge zu veranschaulichen ein wenig deutlicher, das ist, was ein Beispiel Subversion-Repository aussehen würde:

repo 
    -android_project 
     -trunk 
      -your other project stuff (src, etc) 
      -libs 
       -android-support-v4.jar 
       -bugsense3.2.2.jar 
       -gcm.jar 
      -third-party 
       -annotations.jar (external) 
       -android.jar (external) 
       -maps.jar (external) 
third-party 
    -android 
     -v_X.XX 
      -annotations.jar 
      -android.jar 
      -maps.jar 

In Ihrem aktuellen Eclipse-Projekt, können Sie die Sachen in Dritt auf den Pfad manuell hinzufügen würden, und die adk fügt den stuff in libs automatisch dem Pfad hinzu.

EDIT

Zum Thema dieser Methode vs. Maven, das erste, was ich gebe zu, dass ich nicht eine enorme Menge an Erfahrung mit Maven haben. Von dem, was ich darüber weiß, glaube ich nicht, dass es Ihren Kriterien entspricht. Wenn ich Maven benutzt habe, würde es standardmäßig Ihre Abhängigkeiten auf einen maschinenspezifischen Speicherort herunterladen, anstatt in Ihren Arbeitsbereich. Damit Eclipse diese Abhängigkeiten aufgreift, mussten Sie Ihrem Arbeitsbereich eine M2_HOME-Eigenschaft hinzufügen, damit alle Pfade ordnungsgemäß aufgelöst werden konnten. Es war ziemlich einfach, all diese Dinge einzurichten, weil es mvn-Befehle gab, um den Prozess zu automatisieren, aber für jemanden, der mit dem System nicht vertraut ist, könnte es viel Verwirrung verursachen und Dinge verlangsamen, wenn ein neuer Entwickler an einem Projekt beginnt. Darüber hinaus bestand ein großes Problem darin, Abhängigkeiten in einem zentralen Repository zu speichern, was das Arbeiten in nicht verbundenen Bereichen sehr schwierig machte.

Nochmals, ich bin kein Maven-Experte, also nehmen Sie das, was ich gesagt habe, aber Maven funktioniert nach meiner Erfahrung in einer Open-Source-Umgebung, wo die Verbindung willkommen ist und fast garantiert, aber nicht so sehr eine Closed-Source-Umgebung. Es schien, als ob es mehr Probleme verursachte als es für uns löste und daher nie wirklich auffiel. Das Schöne an dem oben beschriebenen System ist, dass Sie nach dem Checkout einen einzigen Ordner haben, der alles (außer Eclipse) enthält, das zum Entwickeln und Erstellen des Projekts benötigt wird. Das macht es sehr einfach, auf einer neuen Maschine oder in einer unbekannten Umgebung aufzusetzen.

Ich werde sagen, dass ein großer Vorteil von Maven Konsistenz ist. Mit dem System, das ich beschrieben habe, ist der Entwickler verantwortlich für jeden Aspekt der Einrichtung eines Projekts. Dies bedeutet, dass Sie zwischen Entwicklern und Projekten variieren können, wie Ihr SVN-Repository ausgelegt ist. Ein Entwickler könnte ein Verzeichnis "Drittanbieter" nennen, während ein anderer es "Open-Source" nennen könnte, oder einige Entwickler verwenden in ihren Projekten möglicherweise keinen Stamm. Im Laufe der Zeit können sich diese kleinen Dinge aufbauen und dein Repository ein Durcheinander hinterlassen. Da Maven für das Layout des Projekts zuständig ist, können Sie sicher sein, dass Ihr Repository konsistent bleibt.

+0

Frage: Ich hatte den Eindruck, dass Sie mit Maven die Abhängigkeiten des Projekts verwalten können. Ich höre immer wieder, dass ich einfach das Maven Eclipse Plugin dafür verwenden sollte. Haben Sie Erfahrung damit, wie ich sagte, ich suche nach der besten Industriepraxis. Wie auch immer, ich überprüfe deinen Vorschlag und wenn es keine Antworten gibt und deine Methode sauber ist, werde ich es sofort akzeptieren. – vkinra

+0

@vkinra Meine Antwort auf Ihren Kommentar endete ein wenig langatmig, also habe ich meine Antwort bearbeitet, um sie einzuschließen, anstatt einen weiteren Kommentar hinzuzufügen. – TwentyMiles

+0

Ich schätze die langatmige Antwort und werde die Antwort akzeptieren. Wenn jedoch jemand dies verbessern kann, fügen Sie bitte hinzu. Danke TwentyMiles. – vkinra