Installation der Entwicklungsumgebung
Diese Seite ist noch nicht mit vollständigem deutschem Inhalt gefüllt. Das kann bitte jemand nachholen, der das nächste Mal ein Eclipse neu aufsetzt.
Ich selber bin bisher nach der ausgezeichneten Anleitung von User:CarlosRuiz vorgegangen: Install Development Prerequisites. Carlos hat seine Entwicklungsumbebung unter Ubuntu-linux eingerichtet. Es gibt kleine Unterschiede zu anderen Systemen.
Als nächsten Schritt benötigt man eine passende Datenbank. Einerseits kann man selbstverständlich grundsätzlich eine Datenbank benutzen, die man vorher mit einer normalen iDempiere-Installation erzeugt hat. Auf der anderen Seite installiert man ja Eclipse höchstwahrscheinlich, um an der laufenden Entwicklung teilzuhaben und hat dazu in Eclipse den Quellcode der aktuellsten Entwicklerversion installiert und vielleicht nicht der stabilen Version, deren Installationpaket man vorher laufen hatte. Da mit sehr vielen Änderungen im Programm auch Änderungen in der Datenbank-Seed (also der Grundinstallation der Datenbank) verbunden sind, solte man als nächstes Datenbankeinrichtung für Entwickler lesen.
-- User:TBayen
Mein Vorschlag zum Befüllen des Themas. Mindestens drei Kapitel je nach Entwicklungsplatform und IDE-Version, da es doch auf die kleinen Unterschiede ankommt:
- linux
- windows
- mac
Nach meiner Lesart decken die zwei guten (engl.) Anleitungen von Carlos und Dominik linux und mac ab. Ich habe sie an der geeingneten Stelle verlinkt. Und selber füge ich einen Beitrag zu windows 7 bei. Falls die Seite zu groß werden sollte, kann sie nach Platform oder IDE-Version gesplittet werden.
-- User:Eugenh
Linux(ubuntu)
Dort finden sich auch Informationen über die für die Entwicklung ab 3.x benötigten Versionen.
Windows + Eclipse Indigo (3.7.2)
Ich benutze nicht das aktuellste eclipse unter Windows 7. Mit dieser 64-bit-IDE habe ich bereits Adempiere eingerichtet. Da ich gerade iDempiere neu aufsetze, kann ich meine Erfahrungen hier niederschreiben. Vorab: man sollte nicht erwarten, dass die Installation und das Build reibungslos funktioniert. Das Projekt lebt und ändert sich ständig. Das gilt aich für die IDE und die Subkomponenten.
In meiner eclipse-IDE haben sich inzwischen viele plugins angesammelt. Welche sind für iDempiere unbedingt notwendig?
- Java Development Tools
- Mercurial Hg plugin for Eclipse IDE, beinhaltet auch die bins für Hg-Workbench [1]
- Buckminster
- Restlet
- DTP 1.9, Data Tools Platform : http://www.eclipse.org/datatools/ wenn man von der IDE auf die DB zugreifen will
Da iDempiere aus vielen grossen und kleineren OSGI-Komponenten (bundle, plugin, feature) besteht, sollte man einen eigenen Workspace für die iDempiere-IDE spendieren. Pro Komponente wird mindestens ein Projekt grmäß der eclipse Terminologie benötigt. iDempiere besteht derzeit aus ca 70 eclipse-Projekten.
Da das Mercurial Eclipse-Plugin ein installiertes Mercurial benötigt, muß noch Mercurial installiert werden, falls nicht ohnehin vorhanden. https://mercurial.selenic.com/downloads Außerdem muß der Pfad zu hg.exe im Path enthalten sein.
Wie kommt man zu den Sourcen?
- die Sourcen gibt es im Hg-Repository unter https://bitbucket.org/idempiere/idempiere , Größe ca 2GB (Klonen dauert also entsprechend lange)
- siehe auch http://www.globalqss.com/wiki/index.php/IDempiere/Download_the_Code Download_the_Code von Carlos
- zwei Strategien:
- klonen direkt in eclipse-Workspace. Das ist die naheliegenste Strategie. Dazu wird das Mercurial Hg plugin benötigt. Dieses Vorgehen kann aber recht frustrierend sein, denn bei der Übertragung der Daten und Aufbau des Repositories darf es zu keinerlei Störung (timeout, ...) kommen.
File > New > Other > Mercurial>Clone...Repository
(siehe. Minibild) - klonen außerhalb eclipse und Import in den Workspace
Klonen des Repositories
Ich habe mich für die zweite Strategie entschieden, nicht zuletzt wg [2] und [3]. Es macht Sinn, den Pfad zum Workspace kurz zu wählen C:\proj\hg
.
Klonen außerhalb eclipse
In Hg-Workbench oder per Hg-Konsole kann man in kleineren wiederholbaren Portionen klonen.
Zurück in eclipse:
File > Import > Mercurial>Projecs from Local... > select hg-dir
Es ist nicht ausgeschlossen, dass nach dem Import eclipse diverse Fehler meldet.
Das liegt daran, dass defaultmäßig ein automatisches Compile eingestellt ist und die Pfade der einzelnen Komponenten noch nicht korrekt eingestellt sind.
Nach dem Buckminster materialize sollten die Fehler nicht mehr auftreten.
Definition targetPlatform
siehe http://www.banym.de/eclipse/build-the-idempiere-project-using-eclipse-with-buckminster von Dominik Zajac
Window > Preferences > Plug-in Development>Target Platform > Add > Add Directory
einen absoluten oder relativen Pfad für die Zielumgebung wählen (ich definiere es absolut mit C:\proj\iDempiereTarget
). Im nachhinein erweist sich die Wahl als ungünstig, den der #Buckminster-Import verwendet $(workspace.root)\targetPlatform
) und erstelt das Verzeichnis auch:
Target platform directory 'C:/proj/hg/targetPlatform/' does not exist and will be created
In diesem Verzeichnis wird anschliessend per #Buckminster-Import die Zielumgebung eingestellt.
Buckminster-Import
File > Import > Buckminster>Materialize from Buckminster CQUERY > Component Query
Die Component Query ist in /org.adempiere.sdk-feature/adempiere.cquery.
In meiner Umgebung liefert es mit einen Fehler:
ERROR [0010] : No suitable provider for component javax.servlet.source:osgi.bundle/[3.0.0.v201103241009,3.0.0.v201103241009] was found in resourceMap file:/C:/proj/hg/org.adempiere.sdk-feature/adempiere.rmap ERROR [0010] : No suitable provider for component javax.servlet.source:osgi.bundle/[3.0.0.v201103241009,3.0.0.v201103241009] was found in searchPath workspace.bundle.jar ERROR [0010] : Rejecting provider p2(file:///{0}/lib[file:///C:/proj/hg/lib]): No component match was found ...
Was habe ich falsch gemacht?
Uups! Ich habe vergessen die Target Platform zu aktivieren. So soll es aussehen:
Das Materialisieren (Befüllen der Verzeichnisses TargetPlatform mit feature- und plugin-Artefakten) dauert ein wenig. Zuvor bekommt man eine Auflistung der Artefakte:
Dann geht es los:
Nach dem Materialisieren sollte es keine Compilefehler mehr geben. Zumindest keine, die auf fehlende jars im build-Pfad hindeuten. Ist das nicht der Fall, so muss manuell nachgearbeitet werden.
Target Platform: manuelle Korrektur
Folgende jars mußte ich in das plugin-Verzeichnis der Zielumgebung C:\proj\iDempiereTarget\plugins
kopieren:
org.eclipse.core.runtime_3.7.0.v20110110.jar org.eclipse.equinox.app_1.3.100.v20110321.jar org.eclipse.equinox.common_3.6.0.v20110523.jar org.eclipse.osgi.services_3.3.0.v20110513.jar org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110815-1438.jar org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110815-1419.jar org.eclipse.equinox.p2.director.app_1.0.300.v20111126-0153.jar org.restlet_2.1.1.v20130116-1036.jar org.restlet.ext.net_2.1.1.v20130116-1036.jar org.restlet.ext.ssl_2.1.1.v20130116-1036.jar org.restlet.ext.servlet_2.1.1.v20130116-1036.jar
Und das DIR org.junit_4.8.2.v4_8_2_v20110321-1705
mit Inhalt. Die plugin-jars findet man im eclipse-Programmverzeichnis.
Ich habe die modifizierte Target Platform nochmals aktiviert und eclipse neu gestartet. Das Restart ist wichtig.
Jetzt bleiben nur noch ein paar Fehler, die durch Korrekturen im build-Pfad behoben werden können:
Das jar super-csv-2.0.0-beta-1.jar
ist im Verzeichnis /org.adempiere.base
aber nicht im build-Pfad.
Buckminster create swing-Client
Jetzt kann man den iDempiere swing-Client erstellen.
> Projekt /org.adempiere.ui.swing-feature > Buckminster > Invoke Action... > create.produkt
und property-file C:\proj\hg\org.adempiere.ui.swing-feature\buckminster_win32_x86.properties
angeben, nicht
!.
buckminster.properties
Falls noch plug-in jars nachzuinstallieren sind meldet sich Buckminster mit einem ActionError oder auf der Konsole:
No component named org.eclipse.equinox.event:osgi.bundle is known to Buckminster
Schließlich sind die Lücken in der Zielumgebung gefüllt und die Buckminster-action create.product startet:
In den buckminster.properties ist festgelegt, dass der output im C:\Users\ich\buckminster.output
landet:
buckminster.output.root=${user.home}/buckminster.output
Buckminster Probleme lösen
[ant] Using equinox launcher jar: C:\Program Files\eclipse3.7\plugins\org.eclipse.equinox.launcher_1.2.0.v20110502.jar org.eclipse.core.runtime.CoreException: C:\proj\hg\org.adempiere.ui.swing-feature\product.ant:36: Directory C:\Users\eugen\buckminster.output\org.adempiere.ui.swing_1.0.0-eclipse.feature\idempiere.*.*.* creation was not successful for an unknown reason
Bei Problemen kann man mit
> Window > Preferences > Buckminster
den Log Level höher setzen und den Grund herauslesen.
Dieses habe ich tatsächlich benötigt, um einen Spezifikationsfehler in buckminster.properties zu finden, Dort sind Variablen mit '*' definiert aus denen filenamen gebildet werden. Bekanntermaßen sind '*' für filenamen nicht zulässig.
Korrektur:
ich muss /org.adempiere.server-feature/buckminster_win32_x86.properties
verwenden. Dort stehen die korrekten Parameter:
target.os=win32 target.ws=win32 target.arch=x86
Den fertigen iDempiere-client finde ich unter C:\Users\ich\buckminster.output\org.adempiere.ui.swing_1.0.0-eclipse.feature\idempiere.win32.win32.x86
Beim Start des iDempiere-clients stelle ich fest, dass meine Datenbank nicht zur der gerade erstellten Software paßt.
DB Migration
- Der Stand meiner postgres-DB: "201211070846_IDEMPIERE-422.sql" // steht in Tabelle ad_migrationscript
- Das neueste (aktuelle) Migration script: /migration/i1.0a-release/postgresql/201301181138_IDEMPIERE-567.sql
Ergo muss ich ca 50 sql-scripte ausführen, um Datenbank und Software zu synchronisieren. Den Migration direkt aus Eclipse beschreibe ich uter Upgrade aus der IDE.
Buckminster create server
Auf symetrische Weise zu #Buckminster_create_swing-Client kann man den iDempiere server mit zk-UI erstellen.
> Projekt /org.adempiere.server-feature > Buckminster > Invoke Action... > create.produkt
und property-file C:\proj\hg\org.adempiere.server-feature\buckminster_win32_x86.properties
angeben.
Serverstart mit EquinoxLauncher
Der Bergriff Launcher ist in Eclipsekontext mehrdeutig, denn einerseits steht er für die Starten von eclipse selbst, und andererseits für das Konfigurieren (#Run_Configuration) und Ausführen von Komponenten, die mit dem Launch-Framework konfigurierbar sind. OSGI-Bundels werden mit <launchConfiguration type="org.eclipse.pde.ui.EquinoxLauncher">
gestartet.
Run Configuration
Eine Ausführungskonfiguration wird im XML-Format mit der Erweiterung .launch
in ${workspace_loc}\.metadata\.plugins\org.eclipse.debug.core\.launches.
gespeichert (Local file). Sie kann auch an einem anderen Speicherort im Projektverzeichnis abgelegt werden (Shared file), siehe server.product.launch
. Die Konfiguration ist fälschlicherweise auf org.eclipse.pde.ui.RuntimeWorkbench
eingestellt. Nach der Korrektur läßt sich der Server aus der IDE starten.