# Buckminster hilfe



## Alex Prak (10. Sep 2012)

Hallo,
ich hoffe jemand kann mir helfen !!

Ich habe ein Projekt, welches aus ca. 15 "Unterprojekten" besteht. Zurzeit automatisiere ich den ganzen Buildprozess und richte ein Continuous Integration Server ein. Dies klappt auch schon gut. Den Build habe ich mit Ant automatisiert. 

Mein Projekt ist ein Eclipse RCP Projekt. Nun muss ich nach dem kompilieren das Porjekt irgendwie erstellen (exe usw.).  So bin ich auf Buckminster gestoßen, jedoch habe ich trotz mehreren Stunden googlen keine Ahnung wie das funktioniert.

In Eclipse funktioniert die Produkterstellung mit Export Product wunderbar. Nun muss ich dies irgendwie aus der IDE herausbringen und in Jenkins einbinden. (Buckminster Plugin ist bereits installiert)


Mein Projekt enthält bereits Dateien wie build.propertes, p2.inf, plugin.properties usw.. 
Kann ich diese Dateien vllt. gleich verwenden oder muss ich die cspex, rmap.. - Dateien erstellen. Bis jetzt bin ich durch kein Tutorial schlau geworden....


----------



## Alex Prak (11. Sep 2012)

Ok bin jetzt bisschen weiter.

Ich bin nach diesem Tutorial vorgegangen (ralfebert.de/blog/eclipsercp/rcp_builds/).
Allerdings komme ich beim Punkt " Installing the product from the p2 repository manually" nicht weiter.

Ich kann zwar auch über Eclipse wie im Punkt davor beschrieben eine site.p2 erstellen, jedoch finde ich die Datei oder das Verzeichnis nicht. 

Wozu brauche ich überhaupt dieses p2-Zeug?

Meinen Build habe ich ja eigentlich in Ant schon automatisiert. Ich brauche eigentlich nur noch die Projekterstellung (exe...). Kann ich Buckminster nicht einfach alle benötigten Jars dafür geben?


----------



## Gonzo17 (11. Sep 2012)

Da bist du leider auf ein Thema gestoßen, das in meinen Augen ganz großer Murks ist und für mich persönlich auch ein Grund mir dreimal zu überlegen ob ich nochmal auf Eclipse RCP setze (trotz einiger Vorteile).

Das Tutorial ist ansich schon das, was ich dir auch mal empfohlen hätte, daran hatte ich mich anfangs auch orientiert.

Erstmal kann ich dir noch das hier empfehlen, die Dokumentation zu Buckminster: Eclipse downloads - mirror selection

Jetzt aber mal ein paar generelle Aussagen und Tipps zu Buckminster. 

Buckminster ist generell erstmal ein Plugin für Eclipse. Das, was man später für Jenkins bereitstellt, ist eine Eclipse-Umgebung + Buckminster Plugin und diese Umgebung wird dann "headless" (also ohne GUI) gestartet. Wozu? Das hast du dich ja auch schon gefragt, deswegen schonmal vorab die Antwort. Buckminster selbst macht erstmal nichts anderes als die Abhängigkeiten deiner Plugins, Features und Products aufzulösen und benötigt dafür eine komplette Eclipse-/OSGi-Umgebung. Dazu diese lustigen Dateien wie RMAP und CSPEX. Das, was du mit "Projekterstellung" betitelst, ist aber keine Leistung von Buckminster, sondern das machst du tatsächlich wieder per Ant mit einem Aufruf auf eine von Eclipse bereitgestellte jar-Datei. Dazu schau dir einfach mal seine product.ant an.



Alex Prak hat gesagt.:


> Mein Projekt enthält bereits Dateien wie build.propertes, p2.inf, plugin.properties usw..
> Kann ich diese Dateien vllt. gleich verwenden oder muss ich die cspex, rmap.. - Dateien erstellen. Bis jetzt bin ich durch kein Tutorial schlau geworden....



Ja, du musst vor allem CQUERY und RMAP verwenden. Genau das ist nämlich Buckminster, damit steuerst du woher du welche Abhängigkeiten lädst.




Alex Prak hat gesagt.:


> Wozu brauche ich überhaupt dieses p2-Zeug?
> 
> Meinen Build habe ich ja eigentlich in Ant schon automatisiert. Ich brauche eigentlich nur noch die Projekterstellung (exe...). Kann ich Buckminster nicht einfach alle benötigten Jars dafür geben?




Wofür du das p2-Zeug brauchst? Lies vielleicht mal hier: Equinox p2
Das ist die Basis deiner Eclipse RCP Application. Und momentan kenne ich keine Alternative als Eclipse RCP Applications mit Buckminster zu bauen.


----------



## Alex Prak (11. Sep 2012)

Hi, erstmal  danke für die Hilfe!

Rein vom Ablauf her werde ich also das Gesamtprojekt mit Ant bauen. Anschließend wird Buckminster ausgeführt, damit es die Abhängigkeiten usw. auflöst und jars erstellt, welche dann für die product.ant-Buildfile notwendig sind. Habe ich das richtig verstanden?


Die product-configuration ist feature-basiert und das Projekt besteht aus 15 unterprojekten. Davon ist eins das product und eins ist ein feature (update-feature). Die restlichen unterprojekte sind plug-in Projekte. Alle Projekte haben untereinander Abhängigkeiten. 


com.beispiel.product
com.beispiel.updatefeature
com.beispiel.common
...



Muss ich für jedes einzelne Projekt CQUERY und RMAP erstellen oder reicht eventuell eins fürs product, welche alle Abhängigkeiten auflöst? 
Die Projekte haben neben den Projektabhängigkeiten untereinander auch Plugin-Abhängigkeiten zu irgendwelchen Eclipse-Jars usw. Müssen auch diese in der RMAP berücksichtigt werden (sind nämlich in jedem Projekt ziemlich viele). In der CQUERY reichen ja die ganzen Projekte - zumindest habe ich das so verstanden.



Ich dachte die Automatisierung des Builds wird der größte Aufwand bei der CI-Einführung. Jedoch scheint mir dieser headless-export noch aufwendiger und komplexer.


----------



## Gonzo17 (11. Sep 2012)

Alex Prak hat gesagt.:


> Rein vom Ablauf her werde ich also das Gesamtprojekt mit Ant bauen. Anschließend wird Buckminster ausgeführt, damit es die Abhängigkeiten usw. auflöst und jars erstellt, welche dann für die product.ant-Buildfile notwendig sind. Habe ich das richtig verstanden?



Nicht ganz. Ich schilder dir mal kurz wie es bei mir abläuft - das ist aber keine Garantie für eine optimale oder gute Lösung, sondern lediglich für eine funktionierende.

Ich habe pro logischer Einheit gruppiert. Das war in diesem Fall pro Feature. Ich habe vier Features, die alle aufeinander aufbauen, also ist Feature A komplett unabhängig von anderen Features und hat nur seine Plugins, während Feature D alle anderen drei Features benötigt, das ist über verschachtelte Abhängigkeiten letztlich dann so beerdigt:

D -> C -> B -> A

Für jedes Modul (bzw Feature) habe ich einen Job in Jenkins und auch eine CSPEC. Ein Job in Jenkins sieht dann so aus, dass zum Beispiel alle Buckminster-Dateien für Feature D aus dem SVN ausgecheckt werden (nicht der Source-Code!) und im nächsten Schritt Buckminster aufgerufen wird. Buckminster zieht nun ALLE Abhängigkeiten des Features in den Workspace (bzw an die notwendige Stelle), da ist NICHTS mit Ant! Das ist der Teil, der Buckminster lohnenswert macht.* Es können nun verschiedene Actions von Buckminster aufgerufen werden. So kann man zum Beispiel eine Update-Site mit der Action #site.p2 erstellen lassen. Was Buckminster nicht kann ist ein Produkt für eine bestimmte Platftorm zu bauen! Und da kommt Ant ins Spiel, dann mit Ant kann man eigene Buckminster-Actions definieren und das ist das, was Ralf Ebert in seinem Tutorial macht. Die Actions #create.product bzw #create.product.zip gibt es so nicht, er definiert sie und damit kann man genau das machen, was du wolltest: Sein Eclipse RCP Produkt für eine bestimmte Plattform bauen. Netter Nebeneffekt hier ist, dass man für den Build auf einer anderen Plattform lediglich die drei Parameter 
	
	
	
	





```
os
```
, 
	
	
	
	





```
ws
```
 und 
	
	
	
	





```
arch
```
 ändern muss.



*Dahinter steckt natürlich erstmal viel Konfig-Arbeit, weil man neben den CSPEC auch die RMAP(s) definieren muss.






Alex Prak hat gesagt.:


> Ich dachte die Automatisierung des Builds wird der größte Aufwand bei der CI-Einführung. Jedoch scheint mir dieser headless-export noch aufwendiger und komplexer.



Das Problem liegt aus meiner Sicht eher daran, dass es generell schwer ist, ein Produkt im Nachhinein automatisiert bauen zu lassen, ohne dass man sich vorher Gedanken darüber gemacht hat. Wenn sowas von Anfang an gemacht wird, dann muss man nur stellenweise anpassen, hat aber einen Build, der mitwächst. Für ein bestehendes Produkt sowas nachzuziehen ist in jedem Fall - egal wo letztlich der Haken ist - sehr nervig.


----------



## Alex Prak (13. Sep 2012)

Achso ok. Ich versuche gerade RMAPs und CQUERYs zu erstellen. Kann ich das überhaupt über die Konsole starten? Ist das dieser Aufruf? Also ich tue mich irgendwie schwer mit Buckminster.
_
<path/to/director>/director
	-consolelog
	-r file://<path/to/p2/site>
	-d <path/to/destination/folder>
	-i com.example.mail.product
_

Ich habe mir jetzt gedacht, dass ich für jedes einzelne Projekt eine RMAP und CQUERY erstelle. Dann brauche ich ja noch eine Art "Master-Datei" die aufgerufen wird und den Ablauf steuert.. ?! Oder brauche ich die zwei Dateien (rmap,cquery) nur in dem Hauptprojekt, also in dem product-Projekt.

Ralf Eberts Tutorial ist schon ganz gut, jedoch hat er ein kleines Projekt, mit nur einem Feature. Ich habe 14 Komponenten vom Typ osgi.bundle und weiß gar nicht wie ich da anfangen soll. Hier meine ersten Gehversuche mit Buckminster. 


*CQUERY*

```
<?xml version="1.0" encoding="UTF-8"?>
<cq:componentQuery xmlns:cq="http://www.eclipse.org/buckminster/CQuery-1.0">
    <cq:rootRequest name="de.bsp.tdb.product" componentType="osgi.bundle"/>
</cq:componentQuery>
```

*RMAP*

```
<?xml version="1.0" encoding="UTF-8"?>
<rmap xmlns="http://www.eclipse.org/buckminster/RMap-1.0" 
	
	<searchPath name="Dependencies">
		<!-- dependencies project-->
		<provider readerType="local" componentTypes="osgi.bundle,eclipse.feature" mutable="true" source="true">
			<uri format="{0}/{1}/">
				<bc:propertyRef key="workspace.root" />
				<bc:propertyRef key="buckminster.component" />
			</uri>
		</provider>
	</searchPath>

	<!-- locator for jar dependencies (org.eclipse.core.runtime.....)
	<locator searchPathRef="Dependencies" pattern="^org(\..+)?" failOnError="false" />
	
	<!-- locator for other projects -->
	<locator searchPathRef="Dependencies" pattern="de.bsp.tdb.proj1" failOnError="false" />
	<locator searchPathRef="Dependencies" pattern="de.bsp.tdb.proj2" failOnError="false" />
	<locator searchPathRef="Dependencies" pattern="de.bsp.tdb.proj3" failOnError="false" />
	<locator searchPathRef="Dependencies" pattern="de.bsp.tdb.proj4" failOnError="false" />
	<locator searchPathRef="Dependencies" pattern="de.bsp.tdb.proj5" failOnError="false" />
	<locator searchPathRef="Dependencies" pattern="de.bsp.tdb.proj6" failOnError="false" />
	<locator searchPathRef="Dependencies" pattern="de.bsp.tdb.proj7" failOnError="false" />
	...
</rmap>
```


----------



## Alex Prak (14. Sep 2012)

Also ich teste das Buckminster Zeug jetzt direkt mit Hudson. Ich habe ein extra Projekt (product.site) für die Buckminster Dateien erstellt. Darin liegt eine product.ant, buckminster.properties, feature.xml, rcp.target, site.cquery und eine site.rmap Datei.

Die Target Platform Datei habe ich über Eclipse einfach exportiert. Habe nicht wie in Ralf Eberts Tutorial eine neue erstellt.

Meine Projekte heißen de.bsp.tdb.common, de.bsp.tdb.core  usw...


*RMAP*

```
<?xml version="1.0" encoding="UTF-8"?>
<rmap
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://www.eclipse.org/buckminster/RMap-1.0"
    xmlns:bc="http://www.eclipse.org/buckminster/Common-1.0"
    xmlns:mp="http://www.eclipse.org/buckminster/MavenProvider-1.0"
    xmlns:pp="http://www.eclipse.org/buckminster/PDEMapProvider-1.0">
 
   <searchPath name="project">
        <provider readerType="local"
            componentTypes="osgi.bundle,buckminster"
            mutable="true" source="true">
            <uri format="file:///{0}/trunk/{1}/">
                <bc:propertyRef key="workspace.root" />
                <bc:propertyRef key="buckminster.component" />
            </uri>
        </provider>
    </searchPath>
 
	<locator pattern="^de\.bsp\.tdb(\..+)?$" searchPathRef="project" />
</rmap>
```



*Hier mein Jenkins Output:*

_INFO:  importtargetdefinition '-A' '/D:/Jenkins/workspace/test/trunk/de.bsp.tdb.product.site/rcp.target'
INFO:  import '/D:Jenkins/workspace/test/trunk/de.bsp.tdb.product.site/site.cquery'
ERROR   [0001] : No suitable provider for component de.bsp.tdb.product.site:eclipse.feature was found in resourceMap file:/D:/Jenkins/workspace/test/trunk/de.bsp.tdb.product.site/site.rmap
  ERROR   [0001] : No suitable provider for component de.bsp.tdb.product.site:eclipse.feature was found in searchPath project
    ERROR   [0001] : Rejecting provider local(file:///{0}/trunk/{1}/[file:///D:/Jenkins/workspace/test/trunk/de.bsp.tdb.product.site/]): Components of type eclipse.feature are not supported
INFO:  TAG-ID 0001 = Query for de.bsp.tdb.product.site:eclipse.feature_




Nehme ich noch "eclipse.feature" als componentType mit auf, findet er tausende Komponenten, bringt jedoch auch für jede diesen Fehler:

_ERROR   [0002] : No suitable provider for component org.eclipse.emf.ecore.changesgi.bundle was found in resourceMap file:/D:/Jenkins/workspace/test/trunk/de.bsp.tdb.product.site/site.rmap
  ERROR   [0002] : No suitable provider for component org.eclipse.emf.ecore.changesgi.bundle was found in searchPath resources
    ERROR   [0002] : Resolution attempt ended with exception: Provider local(file:///D:/Jenkins/workspace/test/trunk/org.eclipse.emf.ecore.change/): Missing CSpec source required by component type osgi.bundle
      ERROR   Provider local(file:///D:/Jenkins/workspace/test/trunk/org.eclipse.emf.ecore.change/): Missing CSpec source required by component type osgi.bundle_



Hat jemand vielleicht eine Idee?  ... -.-


----------



## Gonzo17 (17. Sep 2012)

Du musst dir vollständig über deine Abhängigkeiten bewusst sein. Wie du siehst möchte er ein Bundle des EMF anziehen. Jetzt stellt sich generell erstmal eine Frage. Möchtest du das in deiner Target Platform schon bereitstellen (dann fehlt es anscheinend noch) oder ist das ein Zusatz, den du über eine RMAP nachladen willst? Der erste Fall sollte soweit klar sein, da brauch ich nicht erklären was zu tun ist. Im zweiten Fall musst du schlicht einen weiteren 
	
	
	
	





```
locator
```
 und einen weiteren 
	
	
	
	





```
searchPath
```
 erstellen. Und die URL für den 
	
	
	
	





```
searchPath
```
 ist dann eben zur entsprechenden Update-Site, die das Bundle hinterlegt hat.


----------



## Alex Prak (18. Sep 2012)

Achso alles klar.

Ok läuft jetz soweit ganz gut. Er erstellt die site.p2 erfolgreich. Anschließend führt er #create.product.zip aus. Auch dies klappt. Wenn er dann ant startet, kommen Fehler.


_[ant] D:\USERDATA\tq8796r\Jenkins\workspace\test\trunk\de.bsp.tdb.dependencies\lib\plugins\org.eclipse.equinox.launcher_1.2.0.v20110502.jar
[ant] file:/D:/USERDATA/tq8796r/Jenkins/workspace/test/buckminster.output/de.bsp.tdb.UpdateFeature_3.5.8-eclipse.feature/site.p2/
[ant] D:\USERDATA\tq8796r\Jenkins\workspace\test\buckminster.output\de.bsp.tdb.UpdateFeature_3.5.8-eclipse.feature\product.win32.win32.x86

ERROR: org.eclipse.core.runtime.CoreException: D:\USERDATA\tq8796r\Jenkins\workspace\test\trunk\de.bsp.tdb.UpdateFeature\product.ant:22: Java returned: 13
org.eclipse.core.runtime.CoreException: D:\USERDATA\tq8796r\Jenkins\workspace\test\trunk\de.bsp.tdb.UpdateFeature\product.ant:22: Java returned: 13
	at org.eclipse.buckminster.ant.AntRunner.handleInvocationTargetException(AntRunner.java:167)
	at org.eclipse.buckminster.ant.AntRunner.run(AntRunner.java:322)
	at org.eclipse.buckminster.ant.actor.AntActor.internalPerform(AntActor.java:254)
	at org.eclipse.buckminster.core.actor.AbstractActor.perform(AbstractActor.java:186)
	at org.eclipse.buckminster.core.internal.actor.PerformManager$DirectActionInvocation.execute(PerformManager.java:143)
	at org.eclipse.buckminster.core.internal.actor.PerformManager.internalPerform(PerformManager.java:454)
	at org.eclipse.buckminster.core.internal.actor.PerformManager.perform(PerformManager.java:293)
	at org.eclipse.buckminster.core.internal.actor.PerformManager.perform(PerformManager.java:305)
	at org.eclipse.buckminster.core.commands.Perform.internalRun(Perform.java:108)
	at org.eclipse.buckminster.core.commands.WorkspaceCommand.run(WorkspaceCommand.java:91)
	at org.eclipse.buckminster.cmdline.AbstractCommand.basicRun(AbstractCommand.java:200)
	at org.eclipse.buckminster.cmdline.Headless.run(Headless.java:317)
	at org.eclipse.buckminster.cmdline.Headless.run(Headless.java:136)
	at org.eclipse.buckminster.cmdline.Headless.start(Headless.java:156)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1408)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1384)
Caused by: D:\USERDATA\tq8796r\Jenkins\workspace\test\trunk\de.bsp.tdb.UpdateFeature\product.ant:22: Java returned: 13
	at org.apache.tools.ant.taskdefs.Java.execute(Java.java:108)
	at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
	at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
	at org.apache.tools.ant.Task.perform(Task.java:348)
	at org.apache.tools.ant.Target.execute(Target.java:357)
	at org.apache.tools.ant.Target.performTasks(Target.java:385)
	at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
	at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
	at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
	at org.eclipse.ant.internal.core.ant.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
	at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
	at org.eclipse.ant.internal.core.ant.InternalAntRunner.run(InternalAntRunner.java:662)
	at org.eclipse.ant.internal.core.ant.InternalAntRunner.run(InternalAntRunner.java:495)
	at sun.reflect.GeneratedMethodAccessor25.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.eclipse.buckminster.ant.AntRunner.run(AntRunner.java:318)
	... 25 more
_



*Meine product.ant*


```
<project>
	 <pathconvert property="equinox.launcher.jar">
	   <first count="1">
	     <sort>
	       <fileset dir="../de.bsp.tdb.dependencies/lib/plugins" includes="**/org.eclipse.equinox.launcher_*.jar"/>
	       <reverse xmlns="antlib:org.apache.tools.ant.types.resources.comparators">
	         <date/>
	       </reverse>
	     </sort>
	   </first>
	 </pathconvert>

	<target name="create.product">
		<property name="destination" location="${sp:destination}"/>
		<delete dir="${destination}"/>
		<makeurl property="repository" file="${sp:repository}"/>
		<mkdir dir="${destination}"/>
		<echoproperties/>
		<echo message="${equinox.launcher.jar}"/>
		<echo message="${repository}"/>
		<echo message="${destination}"/>
		<java jar="${equinox.launcher.jar}" fork="true" failonerror="true">
			<arg value="-application"/>
			<arg value="org.eclipse.equinox.p2.director"/>
			<arg value="-repository"/>
			<arg value="${repository}"/>
			<arg value="-destination"/>
			<arg value="${destination}"/>
			<arg value="-profile"/>
			<arg value="${profile}"/>
			<arg value="-profileProperties"/>
			<arg value="org.eclipse.update.install.features=true"/>
			<arg value="-installIU"/>
			<arg value="${iu}"/>
			<arg value="-p2.os"/>
			<arg value="${target.os}"/>
			<arg value="-p2.ws" />
			<arg value="${target.ws}"/>
			<arg value="-p2.arch" />
			<arg value="${target.arch}"/>
			<arg value="-consoleLog"/>
			<!-- jvmarg value="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y"/ -->
		</java>
	</target>
</project>
```


*Aufruf in Jenkins*
_
importtargetdefinition -A '${WORKSPACE}/trunk/de.bsp.tdb.UpdateFeature/rcp.target'
import '${WORKSPACE}/trunk/de.bsp.tdb.UpdateFeature/site.cquery'
build
perform -D target.os=win32 -D target.ws=win32 -D target.arch=x86 de.bsp.tdb.UpdateFeature#site.p2
perform -D target.os=win32 -D target.ws=win32 -D target.arch=x86 de.bsp.tdb.UpdateFeature#create.product.zip_



Irgendeine Ahnung was da nicht stimmt?


----------



## Gonzo17 (18. Sep 2012)

Sagt mir jetzt spontan nichts, aber gerade per Google-Suche etwas gefunden, das helfen könnte. Immerhin sagt dir Jenkins ja, dass mit Exit-Code 13 beendet wird. startup - Cannot run Eclipse; JVM terminated. Exit code=13 - Stack Overflow


----------



## Alex Prak (18. Sep 2012)

Hier meine logfile dazu usw...

*Logfile:*

!ENTRY org.eclipse.osgi 4 0 2012-09-18 11:26:38.612
!MESSAGE Application error
!STACK 1
java.lang.IllegalStateException: Unable to acquire application service. Ensure that the org.eclipse.core.runtime bundle is resolved and started (see config.ini).
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:74)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1386)



*Buckminster Director config.ini:*

#This configuration file was written by: org.eclipse.equinox.internal.frameworkadmin.equinox.EquinoxFwConfigFileParser
#Sat Sep 01 15:13:47 CEST 2012
eclipse.p2.profile=Director
osgi.instance.area.default=@user.home/workspace
osgi.framework=file\lugins/org.eclipse.osgi_3.8.0.v20120529-1548.jar
equinox.use.ds=true
osgi.bundles=reference\:file\rg.eclipse.equinox.simpleconfigurator_1.0.300.v20110815-1744.jar@1\:start
org.eclipse.equinox.simpleconfigurator.configUrl=file\rg.eclipse.equinox.simpleconfigurator/bundles.info
eclipse.product=org.eclipse.equinox.p2.director.product
osgi.framework.extensions=
osgi.bundles.defaultStartLevel=4
eclipse.p2.data.area=@config.dir/../p2
eclipse.application=org.eclipse.equinox.p2.director



Sagt vllt. mehr aus als return code 13. 
Die org.eclipse.core.runtime_3.7.0_....jar liegt im Dependencies Projekt und wird bzw. sollte vom RMAP gefunden werden (dort liegen alle plugins...).


----------



## Gonzo17 (18. Sep 2012)

Puh. Damit kann ich auf die Schnelle auch nichts anfangen. Außer zu sagen, was da steht: Ist 
	
	
	
	





```
org.eclipse.core.runtime
```
 wirklich schon gestartet? Vielleicht ist deine Eclipse-Instanz, die du hinterlegt hast, nicht vollständig? Woher hast du sie?


----------



## Alex Prak (18. Sep 2012)

Ich weiß nicht ob es schon gestartet ist.
Auf jeden Fall hab ich es in meiner product.configuration file drin und Auto-Start ist auf true gesetzt.
Wie meinst du das mit der Eclipse-Instanz? Ich mach das ja jetzt alles schon außerhalb der IDE, also mit Jenkins und dem Buckminster Plugin. Wirklich anstrengendes Zeug -.-!





Hier mal der log, wenn ich versuche das Projekt über die Konsole per director...  zu erstellen.

_....
....
....
!ENTRY org.eclipse.update.configurator 4 0 2012-09-18 14:22:33.840
!MESSAGE Could not install bundle plugins/org.eclipse.equinox.util_1.0.400.v20120522-2049.jar   Bundle "org.eclipse.equinox.util" version "1.0.400.v20120522-2049" has already been installed from: reference:filelugins/org.eclipse.equinox.util_1.0.400.v20120522-2049.jar

!ENTRY org.eclipse.update.configurator 4 0 2012-09-18 14:22:33.844
!MESSAGE Could not install bundle plugins/org.eclipse.update.configurator_3.3.200.v20120523-1752.jar   Bundle "org.eclipse.update.configurator" version "3.3.200.v20120523-1752" has already been installed from: reference:filelugins/org.eclipse.update.configurator_3.3.200.v20120523-1752.jar

!ENTRY org.eclipse.update.configurator 4 0 2012-09-18 14:22:33.845
!MESSAGE Could not install bundle plugins/org.sat4j.core_2.3.0.v20110329.jar   Bundle "org.sat4j.core" version "2.3.0.v20110329" has already been installed from: reference:filelugins/org.sat4j.core_2.3.0.v20110329.jar

!ENTRY org.eclipse.update.configurator 4 0 2012-09-18 14:22:33.846
!MESSAGE Could not install bundle plugins/org.sat4j.pb_2.3.0.v20110329.jar   Bundle "org.sat4j.pb" version "2.3.0.v20110329" has already been installed from: reference:filelugins/org.sat4j.pb_2.3.0.v20110329.jar

!ENTRY org.eclipse.equinox.p2.director 4 1 2012-09-18 14:22:35.107
!MESSAGE Cannot complete the install because one or more required items could not be found.
!SUBENTRY 1 org.eclipse.equinox.p2.director 4 0 2012-09-18 14:22:35.107
!MESSAGE Software being installed: Product Plug-in 3.5.8.201209181108 (de.bsp.tdb.product 3.5.8.201209181108)
!SUBENTRY 1 org.eclipse.equinox.p2.director 4 0 2012-09-18 14:22:35.107
!MESSAGE Missing requirement: Core Plug-in 3.5.8.201209181107 (de.bsp.tdb.common.core 3.5.8.201209181107) requires 'bundle org.eclipse.core.runtime [3.7.0,4.0.0)' but it could not be found_



Er findet org.eclipse.core.runtime nicht. Drüber sucht er z.B. die org.sat4j.pb....jar - und die findet er. Und die core.runtime jar liegt in genau dem selben Ordner. (RMAP referenziert diesen Ornder) - also muss er die jar finden oder nicht ?!
Genauer Name: org.eclipse.core.runtime_3.7.0.v20110110.jar


----------



## Gonzo17 (18. Sep 2012)

Alex Prak hat gesagt.:


> Ich mach das ja jetzt alles schon außerhalb der IDE, also mit Jenkins und dem Buckminster Plugin.



Achso, also hast du selbst keine Eclipse-Installation hinterlegt? Das ist gut, war mir nicht bewusst, aber ist natürlich besser so.


Aber leider kann ich dir wie gesagt da nicht mehr so einfach helfen. Mein Vorschlag ist, dass du erstmal ein kleines Projekt zu bauen versuchst (vielleicht einfach das Beispiel von Ralf Ebert oder ein Hello-World-RCP-Beispiel?) und dann schaust, ob das soweit funktioniert. Direkt mit einem riesigen Projekt loszulegen ohne vorher Erfahrung zu sammeln ist unheimlich schwer. Ich stand vor einer ähnlichen Aufgabe und habe erstmal geschaut was die Tutorials hergaben, war dann einfacher.


----------



## Alex Prak (19. Sep 2012)

Ja das Beispiel von Ralf Ebert hat gut geklappt. Aber hier habe ich jetzt keine Ahnung wo das Problem ist.

Auf jeden Fall stimmt irgendwas mit der org.eclipse.core.runtime jar nicht. Ich verstehe nicht warum er sie nicht findet (manueller fehler) bzw. warum sie nicht gestartet ist (jenkins fehler).


----------



## Gonzo17 (19. Sep 2012)

Hm, wie gesagt, werde erstmal mit den Tools vertraut. Ich kann dir ziemlich sicher sagen, dass Jenkins an dieser Stelle wenig mit deinem Problem zu tun hat. Jenkins ist im Prinzip nur der Sklave, der deine Befehle ausführt - entweder per Knopfdruck oder zeitgesteuert. Jenkins checkt das Zeug nur aus, bietet Tools und das wars. Dementsprechend ist das Problem entweder bei Buckminster (kann ich mir aber auch nicht vorstellen, wenn das Tutorial von Ralf Ebert bei dir klappt) oder in deinem Code. Und meistens trifft ja eher letzteres zu. Nicht nur bei dir.


----------



## Alex Prak (19. Sep 2012)

Habe jetzt einen Fehler gefunden. Meine erstelle p2.site hatte nicht alle benötigten Plugins drin. Jetzt sind exakt die drin, die auch drin sind wenn ich das Projekt aus der IDE mit dem Wizard exportiere.

Über die Konsole (director...) funktioniert es und er erstellt das Produkt (zwar keine exe etc. - aber es klappt schon mal). 
Jenkins schmeißt mir jedoch wieder exakt den selben Fehler...  

_Unable to acquire application service. Ensure that the org.eclipse.core.runtime bundle is resolved and started (see config.ini).
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:74)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1386)
_


Gibt es eigentlich eine gute Alternative um RCP Projekte zu erstellen und das am besten noch in Jenkins einzubinden?



Außerdem ist mir noch aufgefallen, dass Ralf Ebert in seinem Mail-Beispiel ein Feature-Projekt als Product hat. (also die Product Files sind in einem Feature-Project)
In meinem Fall ist mein Feature-Project ein plugin-project. Macht das was? Ich habe dann auch einfach ein Extra Projekt für Buckminster erstellt (feature-project).


----------



## Gonzo17 (19. Sep 2012)

Alex Prak hat gesagt.:


> Gibt es eigentlich eine gute Alternative um RCP Projekte zu erstellen und das am besten noch in Jenkins einzubinden?



Es gibt eine Alternative, ja. Wie gut die ist, kann ich schlecht beantworten, aber habe schon oft gelesen, dass es noch keine gute Alternative sein soll. Vielleicht wird das noch. Schau hier: Sonatype.org: Tycho




Alex Prak hat gesagt.:


> Außerdem ist mir noch aufgefallen, dass Ralf Ebert in seinem Mail-Beispiel ein Feature-Projekt als Product hat. (also die Product Files sind in einem Feature-Project)
> In meinem Fall ist mein Feature-Project ein plugin-project. Macht das was? Ich habe dann auch einfach ein Extra Projekt für Buckminster erstellt (feature-project).



Also das 
	
	
	
	





```
product
```
 liegt bei mir auch in einem Plugin, das sollte kein Problem sein. Mein 
	
	
	
	





```
product
```
 basiert auf Features und dementsprechend habe ich auch mehrere Features, die insgesamt alle meine Plugins enthalten. Features sind ja auch nichts weiter als Bündelungen von Plugins. Und ja, ich habe auch für das Buckminster-Zeug ein eigenes Feature. Habe also quasi für jedes vorhandene Feature ein weiteres Feature mit Buckminster-Dateien. Ich meine mich zu erinnern, dass das notwendig ist, weil Buckminster nur alle Abhängigkeiten auflöst, aber nicht das Feature selbst, in dem die Dateien sind und deshalb sind die alle in einem neuen Feature.


----------



## Alex Prak (20. Sep 2012)

Danke nochmal für die Hilfe! Kurz zu den Abhängigkeiten. Wenn ich mit dem Eclipse Export Wizard mein Produkt erfolgreich exportieren bzw. erstellen kann, dann müssten die Abhängigkeiten doch richtig sein bzw. passen?

Mein Projekt besteht aus 12 Plugins, die alle in einem Feature stecken. Dann habe ich noch ein zweites Feature, welches paar Eclipse-Plugins beinhaltet. Muss ich für dieses Feature auch ein extra Projekt erstellen, welches cspex, cquery und rmap beinhaltet? Findet dann Buckminster die Dateien automatisch oder gebe ich ihm beim Aufruf einfach ein zweites import cquery an?
Ich habe für mein Haupt-Feature ein .build Projekt erstellt, welches auch ein Feature ist (einfach nach Ralf Eberts Anleitung). Dieses Feature beinhaltet mein Hauptfeature als "included feature", welches wiederrum meine ganzen Plugins beinhaltet. Müsste doch passen oder?


----------

