Frage

Ich habe Ant-Skript läuft gut in Eclipse Hier ist ein Stück davon:

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

Aber ich mag Hudson CI Server in der Lage sein, es zu laufen, aber, ganz gleich, alle Gläser ich in ANT_HOME setzen / lib ich diese Aufgabe nicht in einer einfachen Befehlszeile Ameise laufen bekommen ... Ich habe mit diesem Fehler fest:

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.

Wo sind die p2 ant Aufgaben definiert? Gibt es eine Möglichkeit, sie außerhalb von Eclipse zu laufen? Vielen Dank für Sie Hilfe! Anthony

War es hilfreich?

Lösung

Durch das Lesen dieses Themas und die P2 Verlag Dokumentation , sollte es in org.eclipse.equinox.launcher_*.jar

Beispiel einer P2-Task (nicht eine Ameise Aufgabe hier) nur für das -jar Argument:

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

Die P2 Ant Aufgaben werden hier beschrieben, und in der Eclipse-Hilfe .


Die OP Anthony43 fügt in den Kommentaren:

  

Ich will nur ein eine Ameise Ziel mit p2 taskdefs, außerhalb von Eclipse laufen.
  Ich fand heraus, dass ich antRunner verwenden sollte, eine solche Befehlszeile:

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

Aber Andrew Niefer (Eclipse-Committer auf PDE / Bauen, p2, & Equinox Framework) fügt hinzu:

  

Die p2 Aufgaben müssen innerhalb einer OSGi-Umgebung ausgeführt werden und wird nicht funktionieren, in einem normalen ant run .
  Deshalb müssen Sie die org.eclipse.ant.core.antRunner Anwendung verwenden.
  Beginnend mit „java -jar launcher.jar“ ist nur eine alternative Methode, um die Sonnenfinsternis ausführbar aufrufen.


martin Jakubik erwähnt:

  

ich hätte gern einen Befehl, um zu sehen, dass ich cut & paste und dass put alles zusammen.
  Was ich verwendet wurde:

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

Beachten Sie, dass ich nicht herausfinden konnte, was <targetProductFolder> war, so habe ich <eclipse-install...> statt.

Andere Tipps

habe ich eine kleine Ameise Makro für diesen genauen Zweck

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

Alle p2 Aufgaben benötigen, um die Eclipse Runtime (wie ausdrücklich erwähnt in der Eclipse-Hilfe oben erwähnt), so dass Sie auf jeden Fall Gebrauch Eclipse benötigen.

Die einzige Möglichkeit, rund um davon zu bekommen wäre, den Eclipse-Code zu analysieren, zu extrahieren, was notwendig ist und die eigene Build-System erstellen mit.

Gerade das Beispiel Jarek Przygodzki abzuschließen hier ist meine Lösung, seine Ameise mit Datei. Ich bin nicht gut im Umgang mit ant versiert, so könnte es für Optimierungspotenzial sein. Dieser aproach ohne Kopf auf einem Server ohne GUI verwendet wird, dennoch hatte ich Eclipse zu installieren. Installation mit apt-get funktioniert nicht, so dass es besser ist, Handbuch (Download und entpacken) zu installieren.

  1. Erste antfile zusammenbaut Namen, Versionen etc ...
  2. Second antfile aus dem ersten antfile genannt und schafft Composite-Repositorys.

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

Zweite Antfile namens 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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top