Ejecutar tareas P2 Ant fuera de Eclipse
(3)
Tengo un script de hormiga funcionando bien dentro de Eclipse. Aquí hay un fragmento:
<p2.composite.repository failOnExists="true">
<repository location="file:/${basedir}/compRepo" name="Repository description goes here" />
<add>
<repository location="http://url/Eclipse/repo/Galileo-3.5.1/" />
<repository location="http://another-url/Java/repo/4.0/" />
<repository location="${diag.location}" />
</add>
</p2.composite.repository>
Pero me gustaría que el servidor de Hudson CI pueda ejecutarlo, pero, sin importar todos los archivos jar que puse en ANT_HOME / lib, no puedo ejecutar esta tarea en una línea de comando simple y ... Me quedé atascado con esto error:
C:/workspaces/workspace/project/junit.script/createCompRepo.xml:10: Problem: failed to create task or type p2.composite.repository
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.
¿Dónde se definen las tareas de la hormiga p2? ¿Hay alguna forma de ejecutarlos fuera de Eclipse? Muchas gracias por su ayuda ! Antonio
Todas las tareas p2 NECESITAN el tiempo de ejecución del eclipse (tal como se establece explícitamente en la ayuda de eclipse mencionada anteriormente), por lo que definitivamente necesita usar eclipse.
La única forma de evitarlo sería analizar el código del eclipse, extraer lo que se necesita y crear su propio sistema de compilación con él.
Creé una pequeña macro Ant para ese propósito exacto
<path id="equinox.launcher.path">
<fileset dir="${eclipse.home}/plugins">
<include name="org.eclipse.equinox.launcher_*.jar" />
</fileset>
</path>
<macrodef name="antRunner">
<!-- Ant script location -->
<attribute name="antFile" />
<!-- the arguments for the script that is executed -->
<attribute name="args" default=""/>
<sequential>
<java
classname="org.eclipse.equinox.launcher.Main"
fork="true"
failonerror="true">
<arg line="-application org.eclipse.ant.core.antRunner" />
<arg line="-f @{antFile}" />
<arg line="@{args}"/>
<classpath refid="equinox.launcher.path" />
</java>
</sequential>
</macrodef>
Al leer este hilo y la documentación de P2 Publisher , debe estar en org.eclipse.equinox.launcher_*.jar
Ejemplo de una tarea P2 (no una tarea ant aquí) solo para el argumento -jar
:
java -jar <targetProductFolder>/plugins/org.eclipse.equinox.launcher_*.jar
-application org.eclipse.equinox.p2.publisher.UpdateSitePublisher
-metadataRepository file:/<some location>/repository
-artifactRepository file:/<some location>/repository
-source /<location with a site.xml>
-configs gtk.linux.x86
-compress
-publishArtifacts
Las tareas P2 Ant se describen aquí , y en la ayuda de Eclipse .
El OP Anthony43 agrega en los comentarios:
Solo quiero ejecutar un objetivo ant y con taskdefs p2, fuera de eclipse.
Descubrí que debería usarantRunner
, usando dicha línea de comando:
./eclipse -vm /opt/sun-java2-6.0/bin/java -nosplash /
-data ${java.io.tmpdir}/workspace -consolelog /
-application org.eclipse.ant.core.antRunner /
-f /path/to/scripts/partialMirrorFromRepo.xml
Pero Andrew Niefer (Eclipse committer en PDE / Build, p2, y Equinox Framework) agrega:
Las tareas p2 deben ejecutarse dentro de un entorno osgi y no funcionarán en una ejecución normal de hormigas .
Es por eso que necesita utilizar la aplicaciónorg.eclipse.ant.core.antRunner
.
Comenzar con "java -jar launcher.jar" es solo un método alternativo para invocar el ejecutable eclipse.
martin jakubik menciona:
Me hubiera gustado ver un comando que pudiera cortar y pegar, y que pusiera todo junto.
Lo que utilicé fue:
java -jar <eclipse-install-directory>/eclipse/plugins/org.eclipse.equinox.launcher_*.jar -application org.eclipse.ant.core.antRunner.
Tenga en cuenta que no pude averiguar qué era
<targetProductFolder>
, así que usé<eclipse-install...>
lugar.