Domanda

Ho script ant funzionare benissimo all'interno di Eclipse Ecco un pezzo di esso:

<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>

Ma vorrei server di Hudson CI per essere in grado di farlo funzionare, ma, non importa tutti i vasetti ho messo in ANT_HOME / lib non posso ottenere questo compito per l'esecuzione in una semplice riga di comando ant ... Mi sono bloccato con questo errore:

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.

Dove sono definiti i compiti formica p2? Esiste un modo per farli funzionare al di fuori di Eclipse? La ringrazio molto per voi aiuto! Anthony

È stato utile?

Soluzione

Leggendo questa filo e la P2 documentazione Editore , che dovrebbe essere in org.eclipse.equinox.launcher_*.jar

Esempio di un'attività P2 (non è un compito formica qui) solo per l'argomento -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

Il P2 attività Ant sono descritte qui , e nella Eclipse aiuto .


Il Anthony43 aggiunge nei commenti:

  

Voglio solo eseguire un un obiettivo formica con taskdefs p2, al di fuori di Eclipse.
  Ho scoperto che dovrei usare antRunner, utilizzando una tale linea di 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 

Andrew Niefer (Eclipse committer sul PDE / Genera, p2, e Equinox quadro) aggiunge:

  

Il p2 compiti hanno bisogno di essere eseguito all'interno di un ambiente OSGi e non funzionerà in un normale ant run .
  Ecco perché è necessario utilizzare l'applicazione org.eclipse.ant.core.antRunner.
  A partire da "java-jar launcher.jar" è solo un metodo alternativo per invocare l'eseguibile eclisse.


Martin Jakubik menzioni:

  

Mi sarebbe piaciuto vedere un comando che ho potuto tagliare e incollare e che mettere tutto insieme.
  Quello che ho usato è stato:

java -jar <eclipse-install-directory>\eclipse\plugins\org.eclipse.equinox.launcher_*.jar -application org.eclipse.ant.core.antRunner. 
  

Si noti che non riuscivo a capire cosa fosse <targetProductFolder>, così ho usato <eclipse-install...> invece.

Altri suggerimenti

ho creato un piccolo macro formica a tale scopo esatto

<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>

Tutte le attività p2 necessario il runtime Eclipse (come esplicitamente indicato nella guida in eclissi di cui sopra), quindi è sicuramente bisogno di usare Eclipse.

L'unico modo per aggirare di esso sarebbe quello di analizzare il codice eclissi, estrarre ciò che è necessario e creare il proprio sistema di compilazione con esso.

Solo per completare l'esempio di Jarek Przygodzki ecco la mia soluzione, usando la sua Ant- file. Io non sono esperto nell'uso di formica, quindi ci potrebbe essere potenziale di ottimizzazione. Questo aproach viene utilizzato senza testa su un server senza interfaccia grafica, tuttavia, ho dovuto installare Eclipse. Installazione con apt-get non funzionava, quindi è meglio installare manuale (scaricare ed estrarre).

  1. Prima antfile assembla i nomi, le versioni, ecc ...
  2. Secondo antfile viene chiamato dalla prima antfile e crea archivi compositi.

Per prima 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>   

Secondo Antfile, chiamato 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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top