Ant Ant p2 Tasks

G

Gonzo17

Gast
Servus,

bin grade etwas hilflos. Ich möchte die Ant p2 Tasks verwenden (zB hier oder da beschrieben), allerdings krieg ich die Tasks einfach nicht in mein Ant eingebunden.

Also eins nach dem andern. Bin totaler Anfänger im Bezug auf Ant und daher könnte die Fehlerquelle auch 40cm vor dem Bildschirm sitzen. ;) Jeder Hinweis würde mir denke ich schon helfen.

Ich habe also versucht die Ant p2 Tasks einzubinden. Aus Eclipse heraus kann ich meine build.xml problemlos laufen lassen und es funktioniert auch wie gewollt. Zu beachten war allerdings dieser Hinweis, damit es auch in Eclipse funktioniert.

Anschließend wollte ich auch direkt über Ant (eigentlich aus Hudson heraus, aber zuerst einmal über die Kommandozeile) den Aufruf starten und die build.xml ausführen. Da kommt bei mir aber immer ein Fehler dieser Art (hab ich jetzt ausm Hudson Log):

[...]\build.xml:4: Problem: failed to create task or type p2.mirror
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any <presetdef>/<macrodef> declarations have taken place.

Hier auch mal die build.xml, falls es daran liegen sollte:

Code:
<?xml version="1.0" encoding="utf-8" ?>
<project name="Repo Build" default="p2.add">
	<target name="p2.add" description="Adds new repo to old repo">
		<p2.mirror>
			<repository location="file:///E:/test/p2" name="A new repository" />
			<source>
				<repository
					location="file:///E:/repoLocation" />
			</source>
		</p2.mirror>
	</target>
</project>


Ich habe in den Weiten des Internets gesucht und wenige Ansätze gefunden, eine angebliche Lösung hat bei mir aber nicht funktioniert, obwohl sie eigentlich genau mein Problem beschreibt: klick

Habs, wie es bei Apache Ant beschrieben versucht einzubinden, indem ich die jar einfach ins lib-Verzeichnis abgelegt habe. Zuerst versuchte ich es mir der jar, die in der Lösung angegeben wurde, dann mit anderen jars, aber kein positives Ergebnis.

Mit einem Aufruf wie diesem hier klappt es auch:
Code:
c:\path\to\eclipsec.exe -nosplash --launcher.suppressErrors -application
org.eclipse.ant.core.antRunner -buildfile build.xml

Allerdings will ich nicht über die "Krücke" Eclipse gehen, um Ant ausführen zu können. ???:L

Kennt sich da jemand aus? Irgendwelche Ideen woran es scheitert?

Gruß
 

Wildcard

Top Contributor
Allerdings will ich nicht über die "Krücke" Eclipse gehen, um Ant ausführen zu können.
Dann wirst du Pech haben, die p2 Ant Task müssen in einem OSGi Container mit all ihren Abhängigkeiten laufen.
Entweder du startest den AntRunner von Ant aus, oder du verwendest den p2 Director, oder du verwendest Buckminster um den Ant Task zu triggern.
 
G

Gonzo17

Gast
Danke für deine Antwort!

Entweder du startest den AntRunner von Ant aus,

Das hatte ich ja eigentlich auch vor. Aber nach wie vor fehlt mir da irgendwie der Ansatz, wie ich das machen soll. Weisst du welche Abhängigkeiten benötigt werden, um es aus Ant zu starten oder wie ich es herausfinden kann?

oder du verwendest den p2 Director,

Was genau meinst du damit?

oder du verwendest Buckminster um den Ant Task zu triggern.


Ja, das wäre sozusagen die Alternative. Hab ich auch schon getestet, das funktioniert. Trotzdem würde es mich interessieren wie es aus Ant heraus funktioniert.
Edit: Muss mich leider korrigieren, es funktioniert nicht. Habe Buckminster 3.6 als Hudson Plug-In und wenn ich die eclipsec.exe von dort verwende, kommt der gleiche Fehler wie oben. ???:L
Edit2: Auch mit einem frischen Headless Buckminster 3.6 nicht. Folgende Fehlermeldung:

Framework arguments: -application org.eclipse.ant.core.antRunner -buildfile com.example.common.releng/build.xml
Command-line arguments: -os win32 -ws win32 -arch x86_64 -application org.eclipse.ant.core.antRunner -buildfile com.example.common.releng/build.xml

!ENTRY org.eclipse.osgi 4 0 2011-02-07 11:10:22.784
!MESSAGE Application error
!STACK 1
java.lang.RuntimeException: Application "org.eclipse.ant.core.antRunner" could not be found in the registry. The applications available are: [...]
 
Zuletzt bearbeitet von einem Moderator:

Wildcard

Top Contributor
Das hatte ich ja eigentlich auch vor. Aber nach wie vor fehlt mir da irgendwie der Ansatz, wie ich das machen soll. Weisst du welche Abhängigkeiten benötigt werden, um es aus Ant zu starten oder wie ich es herausfinden kann?
Da gibt es keine Abhängigkeiten, du musst per java Task Eclipse starten
Edit: Muss mich leider korrigieren, es funktioniert nicht. Habe Buckminster 3.6 als Hudson Plug-In und wenn ich die eclipsec.exe von dort verwende, kommt der gleiche Fehler wie oben.
Ich meinte in dem du das Script als Action in Buckminster per cspec oder cspex einbindest.
Edit2: Auch mit einem frischen Headless Buckminster 3.6 nicht. Folgende Fehlermeldung:
Wenn du ein Headless Eclipse mit Ant Runner starten willst, dann muss dort der Ant Runner auch installiert sein. Du musst nachschauen welches Bundle diese Application bereitstellt und es in dein Eclipse installieren.
 
G

Gonzo17

Gast
Da gibt es keine Abhängigkeiten, du musst per java Task Eclipse starten

Das ist doch jetzt aber auch wieder ins eigene Bein geschossen. Bevor ich Eclipse aus Ant heraus starte, kann ich doch gleich (wie oben in dem Aufruf) Ant aus Eclipse heraus starten. Denn wenn man ohnehin ein "ganzes Eclipse" benötigt, auch wenn man es aus Ant starten will, dann bringts mir ja nix, wenn ich da jetzt noch irgendwie mühsam versuche Eclipse von dort aus zu starten, oder? ???:L
 

Wildcard

Top Contributor
Natürlich bringt es etwas Eclipse aus Ant heraus zu starten. Du baust deine Software ja normalerweise auf einem CI oder Build Server und da läuft nunmal nicht die Eclipse IDE.
Das Eclipse das du als Compiler verwendest ist übrigens normalerweise nicht das gleiche Eclipse mit dem du arbeitest. Auf dem Server verwendet man eine kleinere Headless Variante mit nur dem Nötigsten installiert (kein SWT und so weiter).
 
G

Gonzo17

Gast
Das Eclipse das du als Compiler verwendest ist übrigens normalerweise nicht das gleiche Eclipse mit dem du arbeitest. Auf dem Server verwendet man eine kleinere Headless Variante mit nur dem Nötigsten installiert (kein SWT und so weiter).

Das macht durchaus Sinn. Wo findet man so ein "kleines Eclipse"? Oder kann man sich das irgendwie zusammenstellen? Ein Eclipse herunterzuladen und alle möglichen Features/Plugins zu deinstallieren stelle ich mir dann eher schwierig vor.

Natürlich bringt es etwas Eclipse aus Ant heraus zu starten. Du baust deine Software ja normalerweise auf einem CI oder Build Server und da läuft nunmal nicht die Eclipse IDE.

Ja, das stimmt schon. Ich glaube da hast du mich missverstanden. Aber macht es einen Unterschied Eclipse aus Ant heraus zu starten oder einen Aufruf wie diesen einzuleiten?

Code:
c:\path\to\eclipsec.exe -nosplash --launcher.suppressErrors -application
org.eclipse.ant.core.antRunner -buildfile build.xml

Funktioniert ja wie gesagt auch. Und den Vorteil, Eclipse aus Ant heraus zu starten, sehe ich noch nicht (vielleicht eben weil ich als Anfänger noch total verblendet bin und zu wenig in der Materie ;) ), deswegen hab ich es erstmal mit eben diesem Aufruf gelöst.
 

Wildcard

Top Contributor
Das macht durchaus Sinn. Wo findet man so ein "kleines Eclipse"? Oder kann man sich das irgendwie zusammenstellen? Ein Eclipse herunterzuladen und alle möglichen Features/Plugins zu deinstallieren stelle ich mir dann eher schwierig vor.
Headless Buckminster ist ein Beispiel dafür. Du kannst jede Art von Eclipse Anwendung mit dem p2 Director on the fly (zB in einem Build Script) zusammen bauen.

Ja, das stimmt schon. Ich glaube da hast du mich missverstanden. Aber macht es einen Unterschied Eclipse aus Ant heraus zu starten oder einen Aufruf wie diesen einzuleiten?
Die beiden sind äquivalent. In einem Ant Script macht man oft deshalb weil man noch weitere Dinge tut (wie oben genannt ein Eclipse on the fly zusammen bauen, Build Ergebnisse kopieren, Properties auswerten, Unit Tests ausführen,...).
Ausserdem hat Ant den Vorteil das es von so ziemlich jedem Build Server unterstüzt wird und plattformunabhängig ist.
Davon abgesehen funktionieren beide Varianten gleich.
 
G

Gonzo17

Gast
Ich meinte in dem du das Script als Action in Buckminster per cspec oder cspex einbindest.

Das habe ich nun versucht. Ich habe die cspex mit dieser Action erweitert:

Code:
<actions>
	<public name="p2.add" actor="ant">
		<actorProperties>
			<property key="buildFile" value="build.xml" />
			<property key="targets" value="start.p2" />
		</actorProperties>
	</public>
</actions>

Damit war die Action verfügbar und ich konnte sie aufrufen. Allerdings bekomme ich weiterhin den gleichen Fehler:

ERROR: org.eclipse.core.runtime.CoreException: E:\.hudson\jobs\common\workspace\features\com.example.common.releng\build.xml:5: Problem: failed to create task or type p2.mirror
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any <presetdef>/<macrodef> declarations have taken place.

Außerdem hab ich noch einmal nachgeschaut. Der antRunner ist explizit im Buckminster 3.6 enthalten und somit kann natürlich dann auch mein Ant-Skript gestartet werden, aber weshalb er diesen Task weiterhin nicht kennt verstehe ich nicht. Scheinbar ist der Task in einem jar definiert, das in einem Entwickler-Eclipse vorhanden ist, nicht aber in Buckminster. Dass die Application org.eclipse.ant.core.antRunner im Headless Buckminster nicht gefunden wurde liegt wohl daran, dass mein Buckminster als Plug-In für Hudson Ant einfach beinhaltet im Gegensatz zum Headless.
 

Wildcard

Top Contributor
Außerdem hab ich noch einmal nachgeschaut. Der antRunner ist explizit im Buckminster 3.6 enthalten und somit kann natürlich dann auch mein Ant-Skript gestartet werden, aber weshalb er diesen Task weiterhin nicht kennt verstehe ich nicht. Scheinbar ist der Task in einem jar definiert, das in einem Entwickler-Eclipse vorhanden ist, nicht aber in Buckminster.
Denke ich auch, das müsstest du dann nachinstallieren. Dafür musst du in Hudson nur die JSON Datei ändern aus der der Tool Installer die Liste an zu installierenden Features erhält.
Wie das geht steht hier:
Buckminster PlugIn - hudson - Hudson Wiki

Dass die Application org.eclipse.ant.core.antRunner im Headless Buckminster nicht gefunden wurde liegt wohl daran, dass mein Buckminster als Plug-In für Hudson Ant einfach beinhaltet im Gegensatz zum Headless.
Hängt davon ab was du alles in dein Headless Buckminster installiert hast, denn initial ist es nutzlos.
Das Hudson Plugin installiert per Default alle Buckminster Features ausser Team Project Set und Subversive (Subclipse und Subversive können nicht zusammen installiert werden).
 

Ähnliche Java Themen

Neue Themen


Oben