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

¿Fue útil?

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 utilizar antRunner, 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ón org.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).

  1. Los nombres de pila monta antfile, versiones, etc ...
  2. 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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top