# Buckminster-Hudson RCP-Build "CSpec source required"



## thomet (17. Nov 2009)

hy,
ich hab ein buildserver (hudson) aufgesetzt und mir dort das buckminster plugin installiert und soweit alles eingerichtet.
nun möchte ich meine anwendung über buckminster bauen lassen. Bei dem einstellungen für buckminster hab ich mich an dieses tutorial gehalten (Building Eclipse RCP applications using Buckminster and Hudson).

Wenn ich nun aus eclipse heraus mein create.product starte.. wird mir auch meine anwendung erstellt. Dort ist mir jedoch aufgefallen das es außer meinen launcher (MyApp.exe) noch eine "launcher.exe" und eine "eclipsec.exe" im product-export befindent.

Also meine erste Frage: Warum ist dort eine "launcher.exe" und eine "eclipsec.exe" vorhanden und wie kann man dies unterbinden.

Dies hab ich erstma ignoriert, da die eigentlich anwendung lauffähig erstellt wurde. Als nächsten schritt wollte ich diese auf meinem buildserver bauen lassen (hudson). dazu hab ich alle plugins und features aus dem svn ausgecheckt und buckminster mit folgenden parametern gestartet:


```
import ${WORKSPACE}/com.my.app.create/site.cquery
perform MyApp.product-feature#create.product.zip
```

zusätzlich habe ich buckminster noch meine targetplatform übergeben.

Wenn ich nun dieses projekt starte, zeigt mir hudson folgenden fehler auf der console:


```
ERROR   No suitable provider for component com.my.app.platform:eclipse.feature was found in resourceMap file:/home/hudson/jobs/MyApp/workspace/arch/x86/os/macosx/ws/cocoa/com.my.app.create/resources.rmap
  ERROR   No suitable provider for component com.my.app.platform:eclipse.feature was found in searchPath resources
    ERROR   Resolution attempt ended with exception: Provider local(file:////home/hudson/jobs/MyApp/workspace/arch/x86/os/macosx/ws/cocoa/com.my.app.platform/): Missing CSpec source required by component type eclipse.feature
      ERROR   Provider local(file:////home/hudson/jobs/MyApp/workspace/arch/x86/os/macosx/ws/cocoa/com.my.app.platform/): Missing CSpec source required by component type eclipse.feature
```

anbei meine configurationen für buckminster

resources.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="resources">
        <provider readerType="local"
        	componentTypes="osgi.bundle,eclipse.feature,buckminster"
            mutable="true" source="true">
            <uri format="file:///{0}/{1}/">
                <bc:propertyRef key="workspace.root" />
                <bc:propertyRef key="buckminster.component" />
            </uri>
        </provider>
    </searchPath>
    
    <locator searchPathRef="resources" failOnError="false" />

</rmap>
```


site.cquery

```
<?xml version="1.0" encoding="UTF-8"?>
<cq:componentQuery xmlns:cq="http://www.eclipse.org/buckminster/CQuery-1.0" resourceMap="resources.rmap">
    <cq:rootRequest name="MyApp.product-feature" componentType="eclipse.feature"/>
</cq:componentQuery>
```


MyApp.product-feature

```
<?xml version="1.0" encoding="UTF-8"?>
<feature
      id="MyApp.product-feature"
      label="Basic MyApp Platform"
      version="1.0.0.qualifier"
      provider-name="MyApp">

   <includes
         id="com.my.app.platform"
         version="0.0.0"/>

   <includes
         id="com.my.app.prerequisites"
         version="0.0.0"/>

</feature>
```


com.my.app.platform -> feature include my app-plugins
com.my.app.prerequisites -> feature include my prerequisites (org.eclipse.rcp ....)

ich hoffe ich finde hier jemanden der sich mit buckminster auskennt und mir bei meinen problem helfen kann. ich beschäftige mich erst seit kurzen mit buckminster und hab noch nicht so viel erfahrung damit sammeln könnne.

mfg und danke
thomet


----------



## Wildcard (17. Nov 2009)

> ich hoffe ich finde hier jemanden der sich mit buckminster auskennt und mir bei meinen problem helfen kann. ich beschäftige mich erst seit kurzen mit buckminster und hab noch nicht so viel erfahrung damit sammeln könnne.


Du hast Glück, zufällig bin ich Commiter bei Buckminster und von mir ist auch das Hudson Plugin 



> Wenn ich nun aus eclipse heraus mein create.product starte.. wird mir auch meine anwendung erstellt. Dort ist mir jedoch aufgefallen das es außer meinen launcher (MyApp.exe) noch eine "launcher.exe" und eine "eclipsec.exe" im product-export befindent.


Die eclipsec.exe ist auch bei den Eclipse Downloads dabei, das ist AFAIK normal.
Die launcher.exe ist ein anderes Thema. Für ältere Buckminster Versionen war es notwendig das equinox.executable Feature ins Product mit aufzunehmen damit ein Launcher erzeugt wird. equinox.executable definiert aber ein root file "launcher", was dazu führt das du deinen Speziellen Launcher erhälst und zusätzlich noch den 'rohen' Equinox Launcher der fürs Branding verwendet wird.
Wenn du eine aktuelle Buckminster Version hast, entferne einfach das equinox.executable Feature aus deiner Product Configuration (lass es aber in der Target Platform).

```
file:////home/hudson/jobs/MyApp/workspace/arch/x86/os/macosx/ws/cocoa/com.my.app.platform/
```
Genau dort wird nach einer feature.xml gesucht. Der Pfad komplett wäre also 

```
file:////home/hudson/jobs/MyApp/workspace/arch/x86/os/macosx/ws/cocoa/com.my.app.platform/feature.xml
```
Passt das in deinem Workspace so? Warum so viele ////?
Wird der checkout von Hudson oder Buckminster übernommen?


----------



## thomet (19. Nov 2009)

hy Wildcard,

danke für deine antwort. ich hab mir das eben ma nochma genauer angeschaut und durch deinen hinweiß ist mir der fehler aufgefallen.

Buckminster hat nach dem feature "com.my.app" gesucht..... jedoch heißt das feature "com.my.app-feature" .... die id die jedoch in der feature.xml eingetragen ist lautet "com.my.app".
Buckminster geht anscheind davon auß das featurename und id gleich sind. ich hab dieses nun angepasst und nun werden die features auch gefungen.

Nun zu meine nächsten problem  ....

Ich hab mein build vor buckminster mit Ant und den PDE Tools erstellt. Dazu hatte ich mir eine TargetPlatform zusammengebaut, welche alle benötigten plugins beinhaltet. Nun möchte ich nicht das Buckminster sich die plugins alle neu runter läd usw .. sonder einfach diese TP nutzen. Dazu dachte ich brauch ich einfach nur ein Projekt erstellen in Hudson was meine TP aus mein SVN auschekt und dals TP anbietet.
Dies hab ich dann einfach in meinen Buckminsterbuild als TP angegeben.

Nun scheind Buckminster die plugins jedoch nicht zu finden die in der TP entahlten sind. Meine vermutung ziehe ich aus dieser Meldung die ich nun zu sehen bekomme:


```
ERROR   No suitable provider for component org.eclipse.gmf.runtime.diagram.ui.resources.editor:osgi.bundle/1.2.0 was found in resourceMap file:/home/hudson/jobs/MyApp/workspace/arch/x86/os/macosx/ws/cocoa/com.my.app.create/resources.rmap
  ERROR   No suitable provider for component org.eclipse.gmf.runtime.diagram.ui.resources.editor:osgi.bundle/1.2.0 was found in searchPath resources
    ERROR   Resolution attempt ended with exception: Provider local(file:////home/hudson/jobs/MyApp/workspace/arch/x86/os/macosx/ws/cocoa/org.eclipse.gmf.runtime.diagram.ui.resources.editor/): Missing CSpec source required by component type osgi.bundle
      ERROR   Provider local(file:////home/hudson/jobs/MyApp/workspace/arch/x86/os/macosx/ws/cocoa/org.eclipse.gmf.runtime.diagram.ui.resources.editor/): Missing CSpec source required by component type osgi.bundle
ERROR   No suitable provider for component org.eclipse.core.runtime:osgi.bundle/3.4.0 was found in resourceMap file:/home/hudson/jobs/MyApp/workspace/arch/x86/os/macosx/ws/cocoa/com.my.app.create/resources.rmap
  ERROR   No suitable provider for component org.eclipse.core.runtime:osgi.bundle/3.4.0 was found in searchPath resources
    ERROR   Resolution attempt ended with exception: Provider local(file:////home/hudson/jobs/MyApp/workspace/arch/x86/os/macosx/ws/cocoa/org.eclipse.core.runtime/): Missing CSpec source required by component type osgi.bundle
      ERROR   Provider local(file:////home/hudson/jobs/MyApp/workspace/arch/x86/os/macosx/ws/cocoa/org.eclipse.core.runtime/): Missing CSpec source required by component type osgi.bundle
```

Wie man sieht sucht der im Workspace des aktuellen Projektes und nicht in der TP (welches ja ein eigenen Workspace besitzt).

Kannst du mir da eventuell auch auf die sprünge helfen?

Danke schonma

EDIT:

hier noch antworten zu deinen fragen: Hudson check alles aus dem SVN aus, die vielen /// hab ich aus nen tut übernommen.. sind jedoch net zwingend erforderlich .. verursachen aber anscheind auch net den fehler .. mit und ohne /// das gleich


----------



## thomet (19. Nov 2009)

jetzt hab ich ma zum teste ne TP mit buckminster erstellt... und alles runterladen lassen... wenn jetzt mein build danach startet kommt folgende meldung


```
The project cannot be built until its prerequisite org.eclipse.ui is built. Cleaning and building all projects is recommended
```


----------



## Wildcard (19. Nov 2009)

> Buckminster hat nach dem feature "com.my.app" gesucht..... jedoch heißt das feature "com.my.app-feature" .... die id die jedoch in der feature.xml eingetragen ist lautet "com.my.app".
> Buckminster geht anscheind davon auß das featurename und id gleich sind. ich hab dieses nun angepasst und nun werden die features auch gefungen.


Nein, du hast es selbst in deiner rmap so definiert mit WORKSPACE/$buckminster.component. Buckminster Component ist der Name, die ID der Component. Wenn deine Features zB einen Suffix haben, kannst du auch unterschiedliche Provider für PlugIns und Features verwenden:

[XML]    <searchPath name="resources">
        <provider readerType="local"
        	componentTypes="osgi.bundle,buckminster"
            mutable="true" source="true">
            <uri format="file:///{0}/{1}/">
                <bcropertyRef key="workspace.root" />
                <bcropertyRef key="buckminster.component" />
            </uri>
        </provider>
        <provider readerType="local"
        	componentTypes="eclipse.feature"
            mutable="true" source="true">
            <uri format="file:///{0}/{1}-feature/">
                <bcropertyRef key="workspace.root" />
                <bcropertyRef key="buckminster.component" />
            </uri>
        </provider>
    </searchPath>[/XML]


> Nun scheind Buckminster die plugins jedoch nicht zu finden die in der TP entahlten sind. Meine vermutung ziehe ich aus dieser Meldung die ich nun zu sehen bekomme:


Du musst die Target Platform dem Build bekannt machen. Das geht entweder über eine Eclipse Target Definition, oder mit setPref targetPlatformPath=/abolute/path/to/TP



> jetzt hab ich ma zum teste ne TP mit buckminster erstellt... und alles runterladen lassen... wenn jetzt mein build danach startet kommt folgende meldung


Beim erstellen einer Target Platform willst du eigentlich nicht bauen (da kein Source involviert ist), sondern nur materialisieren. Dein Query bleibt identisch, allerdings sollen die Components nicht in den Workspace, sondern als Target Platform materialisiert werden. Dazu verwendest du eine MSPEC die angibt wo und wie materialisiert werden soll.
Wie man sowas in Hudson macht findest du hier:
Building an RCP application with hudson (Buckminster - Eclipsepedia)


----------



## thomet (19. Nov 2009)

Wildcard hat gesagt.:


> Du musst die Target Platform dem Build bekannt machen. Das geht entweder über eine Eclipse Target Definition, oder mit setPref targetPlatformPath=/abolute/path/to/TP


ich hab meinem projekt die erstellt TP über die buckminsteroption in hudson mitgegeben, er müßte sie eigentlich nutzen



Wildcard hat gesagt.:


> Beim erstellen einer Target Platform willst du eigentlich nicht bauen (da kein Source involviert ist), sondern nur materialisieren. Dein Query bleibt identisch, allerdings sollen die Components nicht in den Workspace, sondern als Target Platform materialisiert werden. Dazu verwendest du eine MSPEC die angibt wo und wie materialisiert werden soll.


die TP hab ich ja materialisieren lassen.. ist auch erfolgreich ... alle plugins etc sind dort vorhanden. ich meinte wenn ich danach mein Projekt bauen lasse (welches ich die TP mitgebe) das dort der fehler auftritt.

mfg


----------



## Wildcard (19. Nov 2009)

1. Entweder du hast die benötigten Plugins nicht in der Target Platform, oder (und das ist wahrscheinlicher)
2. Der Pfad dem du dem Target Platform Publisher mitgibst ist nicht korrekt. Er sollte auf ein Verzeichnis zeigen in dem direkt ein plugins und ein features Verzeichnis liegt.


----------



## quiddix (23. Nov 2009)

Hallo thomet und Wildcard,

auch ich habe ein ähnliches Problem.
Ich habe ebenfalls das Tutorial http://www.ralfebert.de/blog/eclipsercp/rcp_builds/ gemacht und sämtliche Schritte befolgt. Danach habe ich hudson installiert und konfiguriert.

In Hudson habe ich in der Konfiguration im Punkt "Buckminster" beim Unterpunkt "Eclipse Home Verzeichnis":C:/Buckminsterheadless angegeben.

Dort liegt mein headless Buckminster, das ich mir mit dem Director und den Internetadressen (wie im Tutorial beschreiben) geholt habe.

In meinem Job selbst habe ich bei "build Verfahren" bei Kommandos: import D:/workspaces/buckminster/com.example.target/target.mspec stehen

und bei Advanced Options und JVM Argumente steht: -DtargetPlatformPath=C:/buckminsterTargetPlatform

Ebenfalls habe ich bei "Pfad zur Target-Plattform":C:\buckminsterTargetPlatform angegeben

Eigentlich müsste ja alles passen jedoch erhalten ich die selben Fehler wie thomet.

Koneole:

```
Gestartet durch Benutzer anonymous
Commandline: 
java -Dbuckminster.output.root=/C:/hudson/jobs/rcp_target/workspace//buckminster.output -Dbuckminster.temp.root=/C:/hudson/jobs/rcp_target/workspace//buckminster.temp -DtargetPlatformPath=C:/buckminsterTargetPlatform -jar plugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar -application org.eclipse.buckminster.cmdline.headless -data /C:/hudson/jobs/rcp_target/workspace/ --loglevel info -S C:\hudson\jobs\rcp_target\builds\2009-11-23_10-46-44/commands.txt INFO:  import 'D:/workspaces/buckminster/com.example.target/target.mspec'
ERROR   [0001] : No suitable provider for component com.example.target:eclipse.feature was found in resourceMap file:/D:/workspaces/buckminster/com.example.target/target-resources.rmap
  ERROR   [0001] : No suitable provider for component com.example.target:eclipse.feature was found in searchPath resources
    ERROR   [0001] : Resolution attempt ended with exception: Provider local(file:///C:/hudson/jobs/rcp_target/workspace/com.example.target/): Missing CSpec source required by component type eclipse.feature
      ERROR   Provider local(file:///C:/hudson/jobs/rcp_target/workspace/com.example.target/): Missing CSpec source required by component type eclipse.feature
    ERROR   [0001] : Rejecting provider eclipse.import(http://download.eclipse.org/releases/galileo): No component match was found
INFO:  TAG-ID 0001 = Query for com.example.target:eclipse.feature

Archiviere Artefakte
Finished: FAILURE
```


Meine target-resources.rmap sieht folgendermaßen aus:

```
<?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="resources">
		<provider readerType="local" componentTypes="osgi.bundle,eclipse.feature" mutable="true" source="true">
			<uri format="file:///{0}/{1}/">
				<bc:propertyRef key="workspace.root" />
				<bc:propertyRef key="buckminster.component" />
			</uri>
		</provider>
		<provider readerType="eclipse.import" componentTypes="osgi.bundle,eclipse.feature" mutable="false" source="true">
			<uri format="http://download.eclipse.org/releases/galileo"/>
		</provider>
	</searchPath>

	<locator searchPathRef="resources"/>

</rmap>
```
Wäre über Hilfe sehr dankbar, da ich nichtmehr weiter komme.

Danke


----------



## Wildcard (23. Nov 2009)

Hmm, ich vermute ich habe dir Bereits in der Buckminster Mailingliste geantwortet.
Lag ich mit der Vermuting richtig das es sich im Prinzip um das gleiche Problem wie bei thomet handelt (falscher Pfad)?


----------



## quiddix (24. Nov 2009)

Ja ich habe den Beitrag auch dort eingestellt.
Ich werde das Problem nun analysieren und prüfen ob du Recht hattest. Ich denke es reicht wenn ich die Antwort in die Mailingliste poste.

Für alle interessierten, der Beitrag der Mailingliste findet sich hier: Eclipse Community Forums


----------

