سؤال
لدي نملة السيناريو الذي ينفذ عملية النسخ باستخدام 'نسخ' المهمة.كان مكتوب ويندوز, وقد ضمنية C:\ path كما todir حجة.أرى 'exec' المهمة OS الحجة, هل هناك طريقة مشابهة فرع نسخة على أساس OS ؟
المحلول
أنصح وضع المسار في الممتلكات ، ثم إعداد الخاصية مشروط استنادا إلى نظام التشغيل الحالي.
<condition property="foo.path" value="C:\Foo\Dir">
<os family="windows"/>
</condition>
<condition property="foo.path" value="/home/foo/dir">
<os family="unix"/>
</condition>
<fail unless="foo.path">No foo.path set for this OS!</fail>
ومن الفوائد الجانبية مرة واحدة هو في خاصية يمكنك تجاوز ذلك دون تحرير النمل النصي.
نصائح أخرى
وقد نشرت سابقا اقتراحات من نظام التشغيل متغير محدد ، ولكن مرات عديدة يمكنك ببساطة حذف "C:" بادئة تستخدم الخطوط المائلة للأمام (Unix نمط) مسارات الملفات و أنه سوف يعمل على كل من ويندوز و أنظمة Unix.
لذلك, إذا كنت ترغب في نسخ الملفات "C:/tmp" على ويندوز "/tmp" على Unix, هل يمكن استخدام شيء من هذا القبيل:
<copy todir="/tmp" overwrite="true" >
<fileset dir="${lib.dir}">
<include name="*.jar" />
</fileset>
</copy>
إذا كنت لا تريد/تحتاج إلى تعيين المشروط المسار على أساس نظام التشغيل ، فإنه يمكن تبسيط النحو:
<condition property="root.drive" value="C:/" else="/">
<os family="windows" />
</condition>
<copy todir="${root.drive}tmp" overwrite="true" >
<fileset dir="${lib.dir}">
<include name="*.jar" />
</fileset>
</copy>
هل يمكن استخدام حالة المهمة إلى فرع مختلف نسخ المهام...من النمل دليل:
<condition property="isMacOsButNotMacOsX">
<and>
<os family="mac"/>
<not>
<os family="unix"/>
</not>
</and>
تعريف متغير هذا هو المجلد الجذر من العملية الخاصة بك.بادئة المجلدات الخاصة بك مع هذا المتغير ، بما في ذلك في نسخ المهمة.
تعيين متغير يستند إلى نظام التشغيل باستخدام المشروط أو تمر عليه كحجة النمل النصي.
لا يمكنك استخدام متغير تعيين اعتمادا على نوع ؟ هل يمكن وضعه في build.properties
الملف.أو هل يمكن تعيين باستخدام الشرط.
النمل-contrib لديه <osfamily /> المهمة.هذا وسوف تعرض عائلة نظام التشغيل إلى خاصية (تحديد اسم).هذا يمكن أن يكون مفيدا.