سؤال

هل هناك طريقة راسخة للمشاركة النمل أهداف بين المشاريع؟ لدي حل حاليا، لكنه غير مقصود قليلا. إليك ما أفعله حتى الآن.

لقد حصلت على ملف يسمى ivy-tasks.xml استضافت على خادم على شبكتنا. يحتوي هذا الملف، من بين أهداف أخرى، مهام غليحة لإدارة تبعيات المشروع لبلاب. وبعد علي سبيل المثال:

<project name="ant-ivy-tasks" default="init-ivy"
         xmlns:ivy="antlib:org.apache.ivy.ant">
  ...
  <target name="ivy-download" unless="skip.ivy.download">
    <mkdir dir="${ivy.jar.dir}"/>
    <echo message="Installing ivy..."/>
    <get src="http://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar"
         dest="${ivy.jar.file}" usetimestamp="true"/>
  </target>

  <target name="ivy-init" depends="ivy-download"
          description="-> Defines ivy tasks and loads global settings">
    <path id="ivy.lib.path">
      <fileset dir="${ivy.jar.dir}" includes="*.jar"/>
    </path>
    <taskdef resource="org/apache/ivy/ant/antlib.xml"
             uri="antlib:org.apache.ivy.ant"
             classpathref="ivy.lib.path"/>
    <ivy:settings url="http://myserver/ivy/settings/ivysettings-user.xml"/>
  </target>
  ...
</project>

السبب في أن هذا الملف مستضاف هو أنني لا اريد ان:

  • تحقق من الملف في كل مشروع يحتاجه - سيؤدي ذلك إلى ازدواجية، مما يجعل الحفاظ على الأهداف أكثر صعوبة.
  • احصل على Build.xml تعتمد على التحقق من مشروع من التحكم في المصدر - وهذا سيجعل البناء يحتوي على XML أكثر في المستوى الأعلى فقط للوصول إلى الملف.

ما أقوم به مع هذا الملف في مباني مشاريعي "xmls هو على غرار:

<property name="download.dir" location="download"/>
<mkdir dir="${download.dir}"/>
<echo message="Downloading import files to ${download.dir}"/>

<get src="http://myserver/ivy/ivy-tasks.xml" dest="${download.dir}/ivy-tasks.xml" usetimestamp="true"/>
<import file="${download.dir}/ivy-tasks.xml"/>

الجزء "القذر" حول هذا هو أنني يجب أن أقوم بالخطوات المذكورة أعلاه خارج الهدف, ، بسبب ال استيراد المهمة يجب أن يكون في المستوى الأعلى. بالإضافة إلى ذلك، لا يزال يتعين علي تضمين XML هذا في جميع ملفات Build.xml التي تحتاج إليها (أي لا يزال هناك كمية من الازدواجية).

علاوة على ذلك، قد تكون هناك حالات إضافية حيث قد يكون لدي مهام مشتركة (غير اللبلندية) التي أردت المستوردة. إذا كنت أقدم هذه المهام باستخدام إدارة التبعية لبلدي، فإنها ما زلت أمتلك مشكلات، نظرا لأن الوقت الذي قمت بحل هذه التبعيات، يجب أن أكون داخل هدف في Build.xml، وغير قادر على الاستيراد (المستحقة إلى القيد المذكور أعلاه).

هل هناك حل أفضل لما أحاول إنجازه؟

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

المحلول

إذا كنت تستخدم نملة 1.8+، فيمكنك فقط استيراد Build.xml مباشرة من الموقع المستضاف.

http://ant.apache.org/manual/tasks/import.html.

منذ النمل 1.8.0 يمكن للمهمة أيضا استيراد الموارد من موارد URL أو ClassPath (وهي عناوين URL، حقا). إذا كنت بحاجة إلى معرفة ما إذا كان مصدر ملف Build الحالي هو ملف أو عنوان URL، فيمكنك استشارة الخاصية Ant.File.Type.ProjectName (باستخدام نفس المثال كما فوق ant.file.type.builddocs) والتي لديها إما القيمة "ملف" أو "URL".

<!-- importing.xml -->
<project name="importing" basedir="." default="...">
  <import file="http://myserver/ivy/ivy-tasks.xml"/>
</project>

نصائح أخرى

كما ترى Antlibs. يمكنك حزمة لهم جميعا داخل ملف جرة. ثم ببساطة نسخ هذا الملف في ${ANT_HOME}/lib دليل لاستخدامها.

بعد بعض عمليات البحث الإضافية، سيكون الحل المحتمل هو استخدامه svn externals. للتحقق من الملفات المطلوبة المحددة التي قد تكون هناك حاجة إليها بواسطة Build.xml.

ومع ذلك، فإن هذا لن يعمل فقط للمستخدمين الذين يستخدمون التخريب كتحكم مصدر. من الممكن أن يكون من الجيد أن يكون لديك حل متعدد الأذرع للمستخدمين الذين لا يستخدمون التخريب أو SCM آخر يدعم وظيفة مماثلة.

ما قمت به هو إنشاء مشروع يسمى "Bootstrap" يحتوي على ملفات XML المختلفة اللازمة للمشاريع الأخرى في مكتبنا. إذن إعداد بيئة التطوير الخاصة بك تقوم بتشغيل Build.xml في Bootstrap الذي نسخ ملفات XML (مثل الأشياء اللبلندية، والأهداف الأخرى) إلى موقع معروف، ثم تتضمن ملفات البناء هذه مثل هذا:

<import file="${ant.bootstrap.dir}/ant-commons.xml" />
<import file="${ant.bootstrap.dir}/ant-commons-ear.xml" />

لدينا bootstrap build.xml يحتوي على هذا:

<target name="install">
        <fail unless="ant.bootstrap.dir" message="ant.bootstrap.dir ${missing.property.message}"/>
        <copy todir = "${ant.bootstrap.dir}">
            <fileset dir = "src/xml"/>
        </copy>
</target>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top