Запуск задач P2 Ant вне Eclipse - PullRequest
10 голосов
/ 24 февраля 2010

У меня в Eclipse нормально работает ant-скрипт Вот часть этого:

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

Но я бы хотел, чтобы сервер Hudson CI мог его запускать, но, независимо от того, какие файлы я поместил в ANT_HOME / lib, я не могу запустить эту задачу в простой командной строке и ... Я застрял с этой ошибкой:

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.

Где определены задачи p2 ant? Есть ли способ запустить их вне Eclipse? Большое спасибо за помощь! Anthony

Ответы [ 4 ]

12 голосов
/ 24 февраля 2010

Читая эту ветку и документацию P2 Publisher , она должна быть в org.eclipse.equinox.launcher_*.jar

Пример задачи P2 (здесь не задача муравья) только для аргумента -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

Задачи P2 Ant описаны здесь , а в справке Eclipse .


ОП Anthony43 добавляет в комментариях:

Я просто хочу запустить цель ant с p2 taskdefs вне затмения.
Я обнаружил, что должен использовать antRunner, используя такую ​​командную строку:

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

Но Эндрю Нифер (коммиттер Eclipse в PDE / Build, p2 и Equinox Framework) добавляет:

Задачи p2 необходимо запускать в среде osgi, и они не будут работать при обычном запуске ant .
Вот почему вам нужно использовать приложение org.eclipse.ant.core.antRunner.
Начиная с "java -jar launcher.jar" - это просто альтернативный метод вызова исполняемого файла eclipse.


Мартин Якубик упоминает:

Мне бы хотелось увидеть команду, которую я мог бы вырезать и вставить, и которая все собрала вместе.
То, что я использовал, было:

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

Обратите внимание, что я не мог понять, что такое <targetProductFolder>, поэтому вместо него я использовал <eclipse-install...>.

2 голосов
/ 05 ноября 2013

Для этой цели я создал небольшой макрос Ant

<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>
1 голос
/ 20 марта 2018

Просто для завершения примера Jarek Przygódzki вот мое решение, используя его ant-файл Я не очень хорошо разбираюсь в использовании муравья, так что может быть потенциал для оптимизации. Этот подход используется без сервера на сервере без графического интерфейса, тем не менее мне пришлось установить Eclipse. Установка с помощью apt-get не работала, поэтому лучше установить руководство (скачать и распаковать).

  1. Первый antfile собирает имена, версии и т. Д. *
  2. Второй antfile вызывается из первого 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>   

Второй Antfile с именем 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>
1 голос
/ 29 апреля 2012

Всем задачам p2 НУЖНА среда выполнения eclipse (как явно указано в справке по eclipse, упомянутой выше), поэтому вам обязательно нужно использовать eclipse.

Единственный способ обойти это - проанализировать код затмения, извлечь то, что нужно, и создать с ним собственную систему сборки.

...