# RCP Build mit Buckminster (headless) - unresolved node



## hiemm (11. Mai 2011)

Hallo zusammen,
Ich hab das Tutorial von Ralf Ebert (Headless Eclipse RCP builds with Buckminster and Hudson ) durchgemacht. 

Mein Ergebnis:
Ich schaffe es innerhalb von Eclipse mit Buckminster (per site.p2 und  create.product) ein funktionstüchtiges Produkt zu erstellen.

ABER: Der automatisierte Headless-Build per Hudson geht jedoch noch nicht.

Target Platform anziehen, import cquery und der Java-Build funktioneren (bzw. werfen keine Fehler) in Hudson.
(wobei fälschlicherweise eine Circular Dependency während des Builds gemeldet wurde, die ich per advisorNode unterdrückt habe)

bei dem Schritt "perform site.p2" bricht Hudson/Buckminster jedoch ab.



Die letzten Atemzüge des Builds:

```
...
org.eclipse.jface.text:osgi.bundle/[3.5.0,4.0.0): Using search path galileo
org.eclipse.jface.text:osgi.bundle/[3.5.0,4.0.0): Trying provider p2(http://download.eclipse.org/releases/galileo?importType=binary[http://download.eclipse.org/releases/galileo?importType=binary])
org.eclipse.jface.text:osgi.bundle/[3.5.0,4.0.0): Found match 3.5.2.r352_v20091118-0800
org.eclipse.core.expressions:osgi.bundle/[3.4.101.R35x_v20100209,3.4.101.R35x_v20100209]: Found match org.eclipse.core.expressions:osgi.bundle$3.4.101.R35x_v20100209
org.eclipse.jface.text:osgi.bundle/[3.5.0,4.0.0): Using provider p2(http://download.eclipse.org/releases/galileo?importType=binary[http://download.eclipse.org/releases/galileo?importType=binary])
org.eclipse.core.runtime.compatibility.registry:osgi.bundle: Found match 3.2.200.v20090429-1800
org.eclipse.core.runtime.compatibility.registry:osgi.bundle: Using provider p2(http://download.eclipse.org/releases/galileo?importType=binary[http://download.eclipse.org/releases/galileo?importType=binary])
ERROR: Attempt to use an unresolved node. Request is com.gigatronik.otx.build.site:eclipse.feature
org.eclipse.buckminster.core.metadata.model.UnresolvedNodeException: Attempt to use an unresolved node. Request is com.gigatronik.otx.build.site:eclipse.feature
	at org.eclipse.buckminster.core.metadata.model.UnresolvedNode.addMaterializationCandidates(UnresolvedNode.java:91)
	at org.eclipse.buckminster.core.metadata.model.BillOfMaterials.addMaterializationCandidates(BillOfMaterials.java:345)
	at org.eclipse.buckminster.core.metadata.model.BillOfMaterials.findMaterializationCandidates(BillOfMaterials.java:184)
	at org.eclipse.buckminster.core.materializer.MaterializationJob.prepareJobs(MaterializationJob.java:166)
	at org.eclipse.buckminster.core.materializer.MaterializationJob.internalRun(MaterializationJob.java:142)
	at org.eclipse.buckminster.core.materializer.MaterializationJob.run(MaterializationJob.java:125)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
INFO:  Import complete.
Doing full workspace refresh
Waiting for jobs to end
build
Doing full workspace refresh
Waiting for jobs to end
perform '-D' 'target.os=*' '-D' 'target.ws=*' '-D' 'target.arch=*' 'com.gigatonik.otx.build.site#site.p2'
No component named com.gigatonik.otx.build.site is known to Buckminster
org.eclipse.buckminster.core.metadata.MissingComponentException: No component named com.gigatonik.otx.build.site is known to Buckminster
	at org.eclipse.buckminster.core.metadata.WorkspaceInfo.resolveLocal(WorkspaceInfo.java:613)
	at org.eclipse.buckminster.core.metadata.WorkspaceInfo.getResolution(WorkspaceInfo.java:465)
	at org.eclipse.buckminster.core.metadata.WorkspaceInfo.getResolution(WorkspaceInfo.java:412)
	at org.eclipse.buckminster.core.commands.Perform.handleUnparsed(Perform.java:97)
	at org.eclipse.buckminster.cmdline.AbstractCommand.parseOptions(AbstractCommand.java:220)
	at org.eclipse.buckminster.cmdline.AbstractCommand.basicRun(AbstractCommand.java:182)
	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)
No component named com.gigatonik.otx.build.site is known to Buckminster
Finished: FAILURE
```


Wer weiß woran es liegen könnte, dass mein build.site als „unresolved node“ bezeichnet wird bzw. meinem Buckminster komplett unbekannt zu sein scheint?


----------



## Wildcard (11. Mai 2011)

Von wo soll com.gigatronik.otx.build.site denn geladen werden und wie sieht die Advisor Node aus (und was war die falsche zirkuläre Abhängigkeit?)?


----------



## hiemm (11. Mai 2011)

Hallo Wildcard,

schon mal danke für die flotte Rückmeldung!


Ich dachte "com.gigatronik.otx.build.site" wäre Buckminster aus der site.cquery bekannt.
In der auch die advisorNode definiert wird.

Die site.cquery sieht so aus:

```
<?xml version="1.0" encoding="UTF-8"?>
<cq:componentQuery xmlns:cq="http://www.eclipse.org/buckminster/CQuery-1.0" resourceMap="site.rmap">
    <cq:rootRequest name="com.gigatronik.otx.build.site" componentType="eclipse.feature"/>
    <cq:advisorNode namePattern=".*" componentType="eclipse.feature" allowCircularDependency="true"/>
</cq:componentQuery>
```

Oder muss ich die beiden noch an einer weiteren Stelle bekannt machen?
Oder liegt es an dem falsch definierten advisorNode?


Die zirkuläre Abhängigkeit ist mir ehrlich gesagt ein kleines Rätsel. Immerhin habe ich in den Abhängigkeiten der Plugins keinerlei Zyklus gefunden und Buckminster innerhalb von Eclipse hat schließlich auch nicht für zirkuläre Abhängigkeiten gemeckert.


----------



## Wildcard (11. Mai 2011)

Hmm, das sieht erstmal alles OK aus. Nimm mal bitte die Advisor Node aus dem Query, du solltest jetzt auf der Konsole eine Fehlermeldung wegen der zirkulären Abhängigkeit bekommen. Poste die Fehlermeldung, vielleicht kommen wir dann dem Rätsel auf die Spur.


----------



## hiemm (11. Mai 2011)

Hi,

leider komm ich erst wieder am Dienstag an die Quelltexte ran. 
Werde mich dann am Dienstag gleich dran machen und deinen Vorschlag mal testen.


----------



## hiemm (17. Mai 2011)

So,
ich habe jetzt das advisorNode entfernt. Und wie erwartet tritt die Fehlermeldung über eine zirkuläre abhängigkeit auf:

```
Doing full workspace refresh
Waiting for jobs to end
Circular component dependency detected. Chain is com.gigatronik.otx.build.site -> com.gigatronik.otx.gui.otxNavigator -> com.gigatronik.otx.gui.perspective -> com.gigatronik.otx.gui.otxNavigator
Finished: FAILURE
```

Und grade eben hab ich nochmal das Projekt durchforsten. Buckminster hat recht! Es gibt tatsächlich eine Abhängigkeit über die Extensions des Perspective-Plugins.
Nutze ich Buckminster in Eclipse ignoriert es diese Abhängigkeit jedoch und baut brav das Produkt korrekt zusammen.


Die zirkuläre Abhängigkeit muss raus, das ist klar. Aber leider ist es zeitlich grade nicht drin diese Abhängigkeit zu korrigieren.
Ist nun der automatisierte Build unmöglich, bis diese Architektur-Schlappe behoben ist?


----------



## Wildcard (17. Mai 2011)

In Eclipse kann das evtl. schon funktionieren weil zB noch Kompilate vorhanden waren bevor die zirkuläre Abhängigkeit eingebaut wurde. Anders gesagt, ich kann nicht versprechen ob alles funktioniert wenn die zirkuläre Abhängigkeit entfernt wurde, aber IMO macht es wenig Sinn weiter nach der Ursache zu forschen solange ein Elefant im Raum steht.


----------



## hiemm (17. Mai 2011)

Ich verstehe was du meinst, und sehe das gleich - auch wenn es erst mal weh tut die Automatisierung vorerst auf Eis legen zu müssen.

Sollte es Neuigkeiten geben, werd ich mich wieder melden. 

Ich dank Dir für die Hilfe bis hier hin!


----------

