Question

Je suis arrivé script ant fonctionne bien dans Eclipse Voici un morceau:

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

Mais je voudrais serveur Hudson CI pour pouvoir l'exécuter, mais, peu importe tous les pots que je mets dans ANT_HOME / lib Je ne peux pas cette tâche à exécuter dans une fourmi simple ligne de commande ... Je suis coincé avec cette erreur:

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.

Où sont définis les tâches de fourmi p2? Y at-il un moyen de les exécuter en dehors Eclipse? Merci beaucoup pour votre aide ! Anthony

Était-ce utile?

La solution

En lisant ce fil et P2 documentation Publisher , il devrait être dans org.eclipse.equinox.launcher_*.jar

Exemple d'une tâche P2 (pas une tâche fourmi ici) juste pour l'argument -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

Le P2 tâches Ant sont décrites ici , et dans la section Eclipse aide .


Le Anthony43 ajoute dans les commentaires:

  

Je veux juste lancer une une cible fourmi avec p2 taskdefs, en dehors de l'éclipse.
  J'ai découvert que je devrais utiliser antRunner, en utilisant une telle ligne de commande:

./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 de (Eclipse sur le committers PDE / Construire, p2, & cadre Equinox) ajoute:

  

Les tâches p2 doivent être exécutés dans un environnement OSGi et ne fonctionnera pas dans une course normale fourmi .
  C'est pourquoi vous devez utiliser l'application org.eclipse.ant.core.antRunner.
  A partir de « java -jar launcher.jar » est juste une autre méthode pour appeler l'exécutable éclipse.


martin Jakubik mentionne:

  

J'aurais aimé voir une commande que je pouvais couper et coller et tout mettre ensemble.
  Ce que j'était:

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

Notez que je ne pouvais pas comprendre ce que <targetProductFolder> était, donc je <eclipse-install...> à la place.

Autres conseils

Je créé une petite macro Ant à cette fin exacte

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

Toutes les tâches p2 ont besoin de l'exécution d'éclipse (comme explicitement indiqué dans l'aide d'éclipse mentionnée ci-dessus), vous devez donc certainement utiliser Eclipse.

La seule façon de contourner cela serait d'analyser le code Eclipse, extraire ce qui est nécessaire et de créer votre propre système de construction avec elle.

Juste pour compléter l'exemple de Jarek Przygodzki voici ma solution, en utilisant son Ant- fichier. Je suis peu familiarisés avec l'utilisation de fourmis, donc il pourrait y avoir un potentiel d'optimisation. Cette aproche est utilisé sans tête sur un serveur sans interface graphique, cependant je devais installer Eclipse. Installation avec apt-get ne fonctionnait pas, il est donc préférable d'installer manuelle (téléchargement et décompressez).

  1. Première antfile assemble les noms, versions, etc ...
  2. Deuxième antfile est appelé de la première antfile et crée des dépôts composites.

Première 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>   

Deuxième Antfile, du nom 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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top