سؤال

حصلت على نص النمل يعمل بشكل جيد داخل Eclipse ، إليك قطعة منه:

<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؟ هل هناك طريقة لتشغيلها خارج Eclipse؟ شكرا جزيلا لك على مساعدتك ! أنتوني

هل كانت مفيدة؟

المحلول

بالقراءة هذا الموضوع و ال وثائق الناشر P2, ، يجب أن يكون في org.eclipse.equinox.launcher_*.jar

مثال على مهمة P2 (وليس مهمة ANT هنا) فقط ل -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 هنا, ، وفي مساعدة الكسوف.


المرجع أنتوني 43 يضيف في التعليقات:

أريد فقط تشغيل هدف ANT مع P2 TaskDefs ، خارج Eclipse.
اكتشفت أنه يجب علي استخدام 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 Committer on PDE/Build ، P2 ، و Equinox Framework) يضيف:

ال يجب تشغيل مهام P2 داخل بيئة OSGI ولن تعمل في تشغيل النملة العادية.
لهذا السبب تحتاج إلى استخدام 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...> في حين أن.

نصائح أخرى

لقد أنشأت ماكرو صغيرًا صغيرًا لهذا الغرض بالضبط

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

تحتاج جميع مهام P2 إلى وقت تشغيل Eclipse (كما هو صريح في مساعدة Eclipse المذكورة أعلاه) ، لذلك تحتاج بالتأكيد إلى استخدام Eclipse.

الطريقة الوحيدة للحصول على جولة هو تحليل رمز Eclipse واستخراج ما هو مطلوب وإنشاء نظام الإنشاء الخاص بك به.

فقط لإكمال مثال Jarek Przygódzki هذا هو الحل الخاص بي ، باستخدام ملف النمل. أنا لست على دراية جيدة باستخدام ANT ، لذلك قد يكون هناك احتمال للتحسين. يتم استخدام هذا APOCT مقطوعة الرأس على خادم بدون واجهة المستخدم الرسومية ، ومع ذلك كان عليّ تثبيت Eclipse. لم يكن التثبيت باستخدام APT-GET يعمل ، لذلك من الأفضل تثبيت دليل (تنزيل و UNTAR).

  1. أول antfile يجمع الأسماء والإصدارات وما إلى ذلك ...
  2. يتم استدعاء Antfile الثاني من أول 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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top