Ejecución de tareas Ant P2 fuera de Eclipse
Pregunta
Tengo script Ant funcionando bien dentro de Eclipse Aquí es un pedazo de él:
<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 servidor Hudson CI para poder ejecutarlo, pero, sin importar todos los frascos que puse en ANT_HOME / lib no puedo conseguir esta tarea se ejecute en un simple hormiga línea de comandos ... Me quedé atrapado con este 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.
Cuando se definen las tareas p2 hormiga? ¿Hay una manera de ejecutarlas fuera de Eclipse? Muchas gracias por su ayuda ! Anthony
Solución
Al leer este hilo y la P2 Editorial documentación , que debe estar en org.eclipse.equinox.launcher_*.jar
Ejemplo de una tarea P2 (no es una tarea ant aquí) sólo por 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
Se describen las P2 Ant aquí , y en el Eclipse ayuda .
El PO Anthony43 añade en los comentarios:
Sólo quiero ejecutar una tarea ant con un taskdefs P2, fuera de Eclipse.
Descubrí que debo utilizarantRunner
, usando por ejemplo una línea de comandos:
./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
Andrew Niefer (Eclipse confirmador de la PDE / Generar, p2, y Marco Equinox) añade:
La p2 tareas necesitan para ejecutar dentro de un entorno OSGi y no va a funcionar en un plazo de hormigas normales .
Por eso es necesario utilizar la aplicaciónorg.eclipse.ant.core.antRunner
.
Comenzando con "java-jar launcher.jar" es sólo un método alternativo para invocar el ejecutable de Eclipse.
martin Jakubik menciona:
Me hubiera gustado ver un comando que podía cortar y pegar y que poner todo junto.
Lo que hacía era:
java -jar <eclipse-install-directory>\eclipse\plugins\org.eclipse.equinox.launcher_*.jar -application org.eclipse.ant.core.antRunner.
Tenga en cuenta que yo no podía entender lo que estaba
<targetProductFolder>
, por lo que utiliza<eclipse-install...>
lugar.
Otros consejos
He creado una pequeña hormiga macro 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>
Todas las tareas p2 NECESITAN el eclipse tiempo de ejecución (como se indicó explícitamente en la ayuda del eclipse se mencionó anteriormente), por lo que definitivamente necesita utilizar Eclipse.
La única manera de recibir todo el año de la misma sería analizar el código eclipse, extracto de lo que se necesita y crear su propio sistema de construcción con ella.
Sólo para completar el ejemplo de Jarek Przygodzki aquí está mi solución, usando su hormiguero archivo. No estoy muy versado en el uso de las hormigas, por lo que podría haber posibilidades de optimización. Este abordaje se utiliza sin cabeza en un servidor sin GUI, sin embargo, tuve que instalar eclipse. Instalación con apt-get no funcionaba, así que es mejor instalar el manual (descargar y desempaquetar).
- Los nombres de pila monta antfile, versiones, etc ...
- Segundo antfile se llama desde primera antfile y crea depósitos de material compuesto.
En primer lugar antfile:
<project name="project">
<!-- ....do some other stuff...-->
<target name="p2.composite.add">
<!--Call macro for child repo-->
<antRunner
name="${site.composite.name}"
location="${composite.repository.directory}"
child="${child.repository}"
/>
<!--Call macro for main repo-->
<antRunner
name="${main.site.composite.name}"
location="${main.composite.repository.directory}"
child="${majorMinorVersion}"
/>
</target>
<!--Eclipse installation path-->
<path id="equinox.launcher.path">
<fileset dir="/usr/share/eclipse/plugins">
<include name="org.eclipse.equinox.launcher_1.3.201.v20161025-1711.jar" />
</fileset>
</path>
<macrodef name="antRunner">
<attribute name="name"/>
<attribute name="location"/>
<attribute name="child"/>
<sequential>
<java
classname="org.eclipse.equinox.launcher.Main"
fork="true"
failonerror="true">
<arg line="-application org.eclipse.ant.core.antRunner" />
<arg line="-f addCompositeInternal.ant run" />
<arg line="-Dcomposite.name=@{name}"/>
<arg line="-Dcomposite.location=@{location}"/>
<arg line="-Dcomposite.child=@{child}"/>
<classpath refid="equinox.launcher.path" />
</java>
</sequential>
</macrodef>
</project>
En segundo lugar Antfile, llamado addCompositeInternal.ant
<project name="composite">
<target name="run">
<add.composite.repository.internal
composite.repository.location="${composite.location}"
composite.repository.name="${composite.name}"
composite.repository.child="${composite.child}"
/>
</target>
<!-- = = = = = = = = = = = = = = = = =
macrodef: add.composite.repository.internal
= = = = = = = = = = = = = = = = = -->
<macrodef name="add.composite.repository.internal">
<attribute name="composite.repository.location" />
<attribute name="composite.repository.name" />
<attribute name="composite.repository.child" />
<sequential>
<echo message=" " />
<echo message="Composite repository : @{composite.repository.location}" />
<echo message="Composite name : @{composite.repository.name}" />
<echo message="Adding child repository : @{composite.repository.child}" />
<p2.composite.repository>
<repository compressed="false" location="@{composite.repository.location}" name="@{composite.repository.name}" />
<add>
<repository location="@{composite.repository.child}" />
</add>
</p2.composite.repository>
<echo file="@{composite.repository.location}/p2.index">version=1
metadata.repository.factory.order=compositeContent.xml,\!
artifact.repository.factory.order=compositeArtifacts.xml,\!
</echo>
</sequential>
</macrodef>
</project>