Running P2 Ant tasks outside Eclipse

前端 未结 4 709
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-28 09:25

I got ant script running fine inside Eclipse Here is a piece of it :


            

        
相关标签:
4条回答
  • 2020-12-28 09:48

    All the p2 tasks NEED the eclipse runtime (as explicitly stated in the eclipse help mentioned above), so you definitely need to use eclipse.

    The only way to get round of it would be to analyze the eclipse code, extract what is needed and create your own build system with it.

    0 讨论(0)
  • 2020-12-28 09:53

    Just to complete the example of Jarek Przygódzki here is my solution, using his ant-file. I'm not well versed in using ant, so there might be potential for optimisation. This aproach is used headless on a server without GUI, nevertheless I had to install eclipse. Installation with apt-get wasn't working, so it's better to install manual (download and untar).

    1. First antfile assembles names, versions, etc...
    2. Second antfile is called from first antfile and creates composite repositories.

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

    Second Antfile, named 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>
    
    0 讨论(0)
  • 2020-12-28 10:09

    I created a small Ant macro for that exact purpose

    <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>
    
    0 讨论(0)
  • 2020-12-28 10:12

    By reading this thread and the P2 Publisher documentation, it should be in org.eclipse.equinox.launcher_*.jar

    Example of a P2 task (not an ant task here) just for the -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
    

    The P2 Ant tasks are described here, and in the Eclipse help.


    The OP Anthony43 adds in the comments:

    I just want to run an an ant target with p2 taskdefs, outside of eclipse.
    I found out that I should use antRunner, using such a command line :

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

    But Andrew Niefer (Eclipse committer on PDE/Build, p2, & Equinox Framework) adds:

    The p2 tasks need to be run inside an osgi environment and won't work in a normal ant run.
    That is why you need to use the org.eclipse.ant.core.antRunner application.
    Starting with "java -jar launcher.jar" is just an alternate method to invoking the eclipse executable.


    martin jakubik mentions:

    I would have liked to see a command that I could cut&paste and that put everything together.
    What I used was:

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

    Note that I could not figure out what <targetProductFolder> was, so I used <eclipse-install...> instead.

    0 讨论(0)
提交回复
热议问题