Eigene Ant-Tasks in Buckminster

felix1772

Mitglied
Hallo :)

Ich versuche mit Buckminster und Hudson einen Build zu automatisieren. Dabei sollen aus einem ecore-Modell die entsprechenden EMF-Projekte generiert werden (über den entsprechenden Ant-Task, den habe ich als Action in der cspex-Datei). Mein Problem ist nun, dass der import von site.cquery diese Projekte bereits nicht finden kann. Aber wenn ich diese Prozedur vor dem Import anstoßen möchte, ist das site-Plugin Buckminster noch nicht bekannt. Wie kann ich dieses Problem am besten angehen? Muss ich vielleicht in der cspex-Datei etwas bei generators angeben? Oder alterArtifacts? ???:L
Vielen Dank für Eure Hilfe.
 

Wildcard

Top Contributor
Generator ist das richtige Stichwort. Du gibst damit an, diese Component erzeugt (generiert) weitere Components. Wenn also deine Component X die EMF Projekte Y und Z erzeugen soll, muss X mit einer cspex angereichert werden die Buckminster darüber informiert das X die beiden Y und Z on the fly erstellen kann.
Wenn also irgendwo eine Dependency auf Y deklariert wurde ist klar das zuerst X angezogen werden muss, der Generator ausgeführt werden und dann ist Y verfügbar.
Das ist allerdings eines der fortgeschrittenen Themen, du solltest mal im Bucky Book nachschauen.
 

felix1772

Mitglied
Werde ich machen, vielen Dank schon mal für den Wink mit dem Zaunpfahl :)

Bisher habe ich mich an dieses Tutorial gehalten. Dazu sind mir noch zwei Fragen unklar:

1. Wenn der Schritt "p2.site" abgeschlossen ist und "create.product" aufgerufen wird, erhalte ich diesen Fehler:
!ENTRY org.eclipse.equinox.p2.artifact.repository 4 1000 2010-03-03 23:04:07.685
!MESSAGE No repository found at file:/.../workspace/buckminster.output/...feature/site.p2/.

!ENTRY org.eclipse.equinox.p2.core 4 0 2010-03-03 23:04:07.686
!MESSAGE Unable to load repositories.
Kann mir jemand einen Tipp geben, woran das liegen könnte?

2. Kann es sein, dass diese Alternative etwas "sauberer" aufgebaut ist? Insbesondere was die Konfiguration des Cross-Plattform Builds angeht, und dass das alles überhaupt mit mspec läuft.

Viele Grüße
Felix
 

Wildcard

Top Contributor
Steht der Pfad wirklich genau so da?
Code:
!MESSAGE No repository found at file:/.../workspace/buckminster.output/...feature/site.p2/.
Sieht etwas seltsam aus, wo kommen die ... her?
2. Kann es sein, dass diese Alternative etwas "sauberer" aufgebaut ist? Insbesondere was die Konfiguration des Cross-Plattform Builds angeht, und dass das alles überhaupt mit mspec läuft.
Ich weiß nicht wie objektiv meine Antwort zu diesem Thema sein könnte, da die 'Alternative' von mir stammt ;)
Grundsätzlich gilt, viele Wege führen nach Rom. Überleg dir was am besten zu deinen Anforderungen passt.
 

felix1772

Mitglied
Ich habe zwischenzeitlich mit den "generator"-Angaben in der CSPEX-Datei experimentiert.

Kurz zum Aufbau:
(1) com.example.emf.model/model enthält die EMF ecore- und genmodel-Dateien
(2) com.example.build enthält die Buckminster-Dateien

Das EMF SDK ist in der Target Plattform vorhanden. Wenn ich das edit-Plugin per SVN bereitstelle, funktioniert der Build auch komplett.

Im Build-Plugin habe ich in der Datei build/additions.ant die folgenden Angaben:
[XML]
<project>
<target name="create.emf.bundles">
<emf.Ecore2Java
model="${modelProjectPath}/model/structure.ecore"
genModel="${modelProjectPath}/model/structure.genmodel"

reconcileGenModel="reload"
modelProject="${modelProject}"
modelProjectFragmentPath="src"
modelPluginID="${modelProject}"
generateJavaCode="true"
generateModelProject="true"
generateEditProject="true"
generateEditorProject="true">
<arg line="-editProject ${modelProject}.edit src"/>
<arg line="-editorProject ${modelProject}.editor src"/>
<arg line="-testsProject ${modelProject}.tests src"/>
<arg line="-validateModel true"/>
</emf.Ecore2Java>
</target>
</project>
[/XML]

In der Datei buckminster.cspex steht folgende Action:
[XML]
<public name="create.emf.bundles" actor="ant">
<actorProperties>
<property key="buildFile" value="build/additions.ant" />
<property key="targets" value="create.emf.bundles" />
</actorProperties>
<properties>
<property key="modelProject" value="com.example.emf.model" />
<property key="modelProjectPath" value="../${modelProject}" />
</properties>
<products alias="destination" base="${buckminster.output}">
<path path="AAA_emftest/" />
</products>
</public>
[/XML]
Wie man sieht, ist die Angabe des Ausgabepfades (AAA_emftest/) noch zum Testen.

Ich kann diese Action mit Buckminster > Invoke Action auch ausführen. Ich habe sie dann als Generator registriert:
[XML]
<generator
attribute="create.emf.bundles"
generates="com.example.emf.model.edit"
/>
<generator
attribute="create.emf.bundles"
generates="com.example.emf.model.editor"
/>
<generator
attribute="create.emf.bundles"
generates="com.example.emf.model.tests"
/>
[/XML]
Edit: das component-Attribut habe ich weggelassen, weil die Action ja im build-Plugin hinterlegt ist.

Das Ergebnis war, dass Buckminster im Build das edit-Plugin nach wie vor über die RMAP auflösen wollte. Daher habe ich dann die entsprechenden Components in den Dependencies eingetragen:
[XML]
<dependency name="com.example.emf.model" componentType="osgi.bundle"/>
<dependency name="com.example.emf.model.edit" componentType="osgi.bundle"/>
[/XML]

Dies hat jedoch nichts bewirkt in der Auflösung.

Ich habe dann in Hudson bei dem Build-Step (Buckminster-Plugin) einmal vor dem Auflösen der site.cquery-Datei bereits die Action aufgerufen mit
Code:
perform com.example.build#create.emf.bundles
Diese wurde dann auch aufgerufen, aber der Ant-Task von EMF kann nicht gefunden werden. Die folgende Meldung erscheint:

Actions to perform (in order)
com.example.build:eclipse.feature$1.0.0.qualifier#create.emf.bundles
Action com.example.build:eclipse.feature$1.0.0.qualifier#create.emf.bundles using 'up to date' policy DEFAULT: Rebuild needed: Product has folders
init actor: ant[com.example.build:eclipse.feature$1.0.0.qualifier#create.emf.bundles]
buildFile=build/modelutils.ant
targets=create.emf.bundles
INFO: [start com.example.build:eclipse.feature$1.0.0.qualifier#create.emf.bundles]
Product alias = destination
Product base = ${buckminster.output}/
buckminster.component=com.example.build
workspace.root=/var/lib/hudson/jobs/Build_Product
buckminster.temp=/var/lib/hudson/jobs/Build_Product/buckminster.temp/com.example.build_1.0.0-eclipse.feature/temp
buckminster.home=/var/lib/hudson/jobs/Build_Product/com.example.build/
buckminster.output=/var/lib/hudson/jobs/Build_Product/buckminster.output/com.example.build_1.0.0-eclipse.feature
localhost=guite.info
generator.buildTimestamp.format=2010-03-07T22:10:59.667+0000
buckminster.component.type=eclipse.feature
buckminster.version=1.0.0.qualifier
target.nl=en_US
modelProject=com.example.emf.model
eclipse.home=/var/internal/eclipseTargetMachine/buckminster-headless
modelProjectPath=../com.example.emf.model
target.location=/var/lib/hudson/jobs/Build_Target_Platform/builds/2010-03-07_20-30-36/archive/targetPlatform
ERROR: org.eclipse.core.runtime.CoreException: /var/lib/hudson/jobs/Build_Product/com.example.build/build/modelutils.ant:20: Problem: failed to create task or type emf.Ecore2Java
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any / declarations have taken place.

org.eclipse.core.runtime.CoreException: /var/lib/hudson/jobs/Build_Product/com.example.build/build/modelutils.ant:20: Problem: failed to create task or type emf.Ecore2Java
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any / declarations have taken place.

at org.eclipse.buckminster.ant.AntRunner.handleInvocationTargetException(AntRunner.java:189)
at org.eclipse.buckminster.ant.AntRunner.run(AntRunner.java:352)
at org.eclipse.buckminster.ant.actor.AntActor.internalPerform(AntActor.java:281)
at org.eclipse.buckminster.core.actor.AbstractActor.perform(AbstractActor.java:201)
at org.eclipse.buckminster.core.internal.actor.PerformManager$DirectActionInvocation.execute(PerformManager.java:151)
at org.eclipse.buckminster.core.internal.actor.PerformManager.internalPerform(PerformManager.java:507)
at org.eclipse.buckminster.core.internal.actor.PerformManager.perform(PerformManager.java:335)
at org.eclipse.buckminster.core.internal.actor.PerformManager.perform(PerformManager.java:350)
at org.eclipse.buckminster.core.commands.Perform.internalRun(Perform.java:118)
at org.eclipse.buckminster.core.commands.WorkspaceCommand.run(WorkspaceCommand.java:191)
at org.eclipse.buckminster.cmdline.AbstractCommand.basicRun(AbstractCommand.java:155)
at org.eclipse.buckminster.cmdline.Headless.run(Headless.java:341)
at org.eclipse.buckminster.cmdline.Headless.run(Headless.java:135)
at org.eclipse.buckminster.cmdline.Headless.start(Headless.java:189)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194)
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:368)
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:559)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514)
at org.eclipse.equinox.launcher.Main.run(Main.java:1311)
at org.eclipse.equinox.launcher.Main.main(Main.java:1287)
Caused by: /var/lib/hudson/jobs/Build_Product/com.example.build/build/modelutils.ant:20: Problem: failed to create task or type emf.Ecore2Java
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any / declarations have taken place.

at org.apache.tools.ant.UnknownElement.getNotFoundException(UnknownElement.java:484)
at org.apache.tools.ant.UnknownElement.makeObject(UnknownElement.java:416)
at org.apache.tools.ant.UnknownElement.maybeConfigure(UnknownElement.java:160)
at org.apache.tools.ant.Task.perform(Task.java:347)
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.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.buckminster.ant.AntRunner.run(AntRunner.java:344)
... 25 more


Naja, das Ziel ist es ja eigentlich, dass Buckminster das selbstständig antriggert und ich gar nicht erst mit einem zusätzlichen Kommando arbeite.
Habe ich bei der Generator-Definition etwas falsch gemacht? Wie kann ich das debuggen? Bin um jede Hilfe dankbar.
 
Zuletzt bearbeitet:

Wildcard

Top Contributor
Zum generator resolution Problem kann ich dir erstmal nichts sagen, da ich noch keine Generator verwendet habe. Frag mal in der Newsgroup nach wenn im Bucky Book nichts steht.
Das Problem mit dem Ant-Task ist ein Classpath Problem. Wie schaut denn dein Taskdef im Ant-Script aus?
Am besten wird es sein das EMF Jar das den Ant-Task bereitstellt als extra Dependency in der CSPEX einzutragen und dann im Build Script zu verwenden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
slawaweis Ant Trennstrich in Attributen für eigene Ant Tasks Tools - Maven, Gradle, Ant & mehr 2
yakazuqi Maven Eigene API mit Maven einbinden Tools - Maven, Gradle, Ant & mehr 1
G eigene Bibliothek benutzen Tools - Maven, Gradle, Ant & mehr 2
G Eigene p2 Repositorys aufbauen/verwalten Tools - Maven, Gradle, Ant & mehr 12
L Eigene Schriftart im Applet Tools - Maven, Gradle, Ant & mehr 2
A Eigene Hilfsklassen im applet verwenden (Netbeans) Tools - Maven, Gradle, Ant & mehr 24
G Ant Ant p2 Tasks Tools - Maven, Gradle, Ant & mehr 9
H Maven Ant Tasks und Maven Properties Tools - Maven, Gradle, Ant & mehr 3
A Buckminster hilfe Tools - Maven, Gradle, Ant & mehr 18
A Hudson/Buckminster: Verschiedene Fragen Tools - Maven, Gradle, Ant & mehr 12
A Hudson-Buckminster wirft Exception nach SVN Checkout Tools - Maven, Gradle, Ant & mehr 3
C Buckminster: Versionen einzelner Jars aus der Targetplatform Tools - Maven, Gradle, Ant & mehr 5
C Buckminster: Cannot satisfy dependency: Tools - Maven, Gradle, Ant & mehr 4
C Buckminster + plugin tests Tools - Maven, Gradle, Ant & mehr 3
H RCP Build mit Buckminster (headless) - unresolved node Tools - Maven, Gradle, Ant & mehr 7
tfa frisch installierter Buckminster kann nichts? Tools - Maven, Gradle, Ant & mehr 3
B Buckminster: Plugin Version in Java source File einfügen Tools - Maven, Gradle, Ant & mehr 4
O Webstart Mit Buckminster JNLP erzeugen Tools - Maven, Gradle, Ant & mehr 5
O Buckminster: Circular dependency detected Tools - Maven, Gradle, Ant & mehr 2
@ [Buckminster] Missing requirement Tools - Maven, Gradle, Ant & mehr 2
T Buckminster Build JRE mitliefern Tools - Maven, Gradle, Ant & mehr 2
T Buckminster + SVN support Tools - Maven, Gradle, Ant & mehr 5
E Probleme mit Buckminster unter eclipse 3.4 Tools - Maven, Gradle, Ant & mehr 11
T Buckminster-Hudson RCP-Build "CSpec source required" Tools - Maven, Gradle, Ant & mehr 9

Ähnliche Java Themen


Oben