سؤال

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

لقد حصلت على الخاصية التالية التي تم تعيينها عالميا في مشروعي:

<property name="lib.dir" location="lib"/>

ثم سأحاول إضافة بعض الملفات من هذا الدليل إلى ملف جرة عبر مجموعة الملفات (أكثر من مورد واحد):

<fileset dir="${basedir}" includes="lib/*filename*"/>

يجب أن يكون هناك (وتوجد) 3 مكتبات مختلفة ، والتي تتم مطابقتها بهذه الطريقة.ومع ذلك ، إذا حاولت استخدام ما يلي ، فإنه لا يعمل ويتم تضمين أية ملفات:

<fileset dir="${basedir}" includes="${lib.dir}/*filename*"/>

لاحظ أن الاختلافات الوحيدة تكمن في استخدام الخاصية العالمية.الآن السؤال البسيط:لماذا يعمل الإصدار الأول كما هو معلن, لكن الثاني لا?

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

المحلول

يرجى التحقق من القيمة الفعلية لـ " ليب.دير "قبل وربما بعد المهمة التي تستخدم تعبير" مجموعة الملفات".فقط للتأكد من أنه لم يتم تغييره عن طريق الخطأ بعد تعيينه على مستوى العالم.ال <echo/> المهمة يمكن أن تساعد.


ربما حصلت على الحل.وصف locationالسمة هي:

تعيين الخاصية إلى اسم الملف المطلق للملف المحدد.إذا كانت قيمة هذه السمة عبارة عن مسار مطلق ، فسيتم تركها دون تغيير (مع / و / أحرف تم تحويلها إلى اصطلاحات الأنظمة الأساسية الحالية).وإلا فإنه يؤخذ كمسار نسبة إلى باسيدير المشروع وتوسيعها.

ببساطة استخدام value السمة بدلا من location.وهنا النصي اختبار لإظهار الفرق:

<project name="test">

    <property name="test1" location="lib"></property>
    <property name="test2" value="lib"></property>

    <target name="target" description="description">
       <echo>${test1}</echo>
       <echo>${test2}</echo>
    </target>

</project>

الإخراج على نظام بلدي هو كما يلي:

Buildfile: D:\Develop\workspace-jabber\scrapbook\build.xml
target:
     [echo] D:\Develop\workspace-jabber\scrapbook\lib
     [echo] lib
BUILD SUCCESSFUL
Total time: 307 milliseconds

نصائح أخرى

لقد وجدت فكرة عن الإجابة ، ولكن ليس كل شيء حتى الآن.

لقد قمت بتشغيل كلا الإصدارين من مجموعة الملفات مع تصحيح الأخطاء وإليك ما يحدث.

في إصدار العمل الذي لا يستخدم خاصية ، أحصل على الإخراج التالي:

fileset: Setup scanner in dir [pathToDir] with patternSet{ includes: [lib/*filename*] excludes: [] }

بينما في النسخة التي يجب أن تعمل ولكن لا أحصل عليها:

fileset: Setup scanner in dir [pathToDir] with patternSet{ includes: [ [pathToDir]/lib/*filename*] excludes: [] }

كما ترون ، إضافة النمل هو [باتودير] في التعبير العادي ، وبالتالي البحث عن

[pathToDir]/[pathToDir]/lib/*filename*

التي من الواضح أنها غير موجودة.المشكلة الآن:كيف لا بد لي من تعديل الإصدار الخاص بي لأنها قد تعمل بشكل صحيح?

عند إنشاء الخاصية (يتم ذلك العالمية أو في الهدف?) ، هل الدليل lib موجود?إذا لم يكن كذلك ، فإن location السمة لا تعمل-استخدام value السمة بدلا من ذلك أو تحديد الخاصية بشكل أفضل بعد إنشاء الدليل.

كما هو موضح أعلاه، كانت المشكلة هي أن $ {lib.dir} تحتوي أيضا على المسار بالكامل، وبالتالي البحث عن [Pathtodir] / [Pathtodir] / [Libtodir] / LIB / FileName .

.

لأقسم بعيدا عن [Pathtodir] غير المرغوب فيه في الممتلكات $ {lib.dir}، استخدمت الآن المهمة.حصلت الآن على ما يلي، ولكن IMHO ليس حل لطيفة للغاية:

giveacodicetagpre.

p .s.: في الشكل الثاني، وجدت أن Andrias_D وجد أيضا السبب الصحيح واقتراح جيد أمس، الذي يجب أن أكون قد أغفلت: - /

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top