পিঁপড়া কাজ একটি পিঁপড়া লক্ষ্য চালানোর জন্য শুধুমাত্র একটি ফাইল বিদ্যমান?


153

এখানে কোনও এএনটি টাস্ক রয়েছে যা কেবলমাত্র একটি প্রদত্ত ফাইল উপস্থিত থাকলেই একটি ব্লক কার্যকর করবে? আমার সমস্যা আছে যে আমার কাছে একটি জেনেরিক পিঁপড়ের স্ক্রিপ্ট রয়েছে যা কিছু বিশেষ প্রসেসিং করা উচিত তবে কেবলমাত্র একটি নির্দিষ্ট কনফিগারেশন ফাইল উপস্থিত থাকলে।


উত্তর:


200

উপলব্ধ এবং শর্ত

<target name="check-abc">
    <available file="abc.txt" property="abc.present"/>
</target>

<target name="do-if-abc" depends="check-abc" if="abc.present">
    ...
</target> 

8
এটি যা করে তার জন্য উপলভ্য হ'ল একটি সুস্পষ্ট নাম। আমি আরও বিভ্রান্ত হয়ে পড়েছি যে গুগল লোকেরা তাদের নিজস্ব ট্যাগ লিখতে দেখায়
মারিও অর্টেগন

এটি কার্যকর হতে পারে তবে আপনার যদি প্রচুর সংখ্যক ফাইলে আবেদন করার প্রয়োজন হয় তবে এটি কোনও ভাল সমাধানের মতো বলে মনে হচ্ছে না
cmcginty

4
যদি কেউ বিস্মিত হন, ifএবং unlessবৈশিষ্ট্যগুলি কেবলমাত্র তার সাথে যুক্ত হওয়া লক্ষ্যটিকে সক্ষম বা অক্ষম করে, অর্থাত্ লক্ষ্যটির নির্ভরতা সর্বদা সম্পাদিত হয়। অন্যথায় এটি এমন কোনও টার্গেটের উপর নির্ভর করে কাজ করবে না যা আপনি যে সম্পত্তি যাচাই করছেন সেট করে।
স্কুবার্থ

দেখে মনে <Available>হচ্ছে অবচিত হ'ল। : আমি এই ব্যবহার করেছি <target name="do-if-abc" if="${file::exists('abc.txt')}"> ... </target> : চেক nant.sourceforge.net/release/0.85/help/functions/...
Loïc

1
@ Loïc 1: যেখানে বলা হয়েছে যে হ্রাস <available>করা হয়েছে? 2: ${file::existst...} মনে হচ্ছে পিঁপড়ার সাথে কাজ করছে না (অ্যাপাচি এএনটি 1.9.7)
ব্যবহারকারী 85421

123

কোডিং দৃষ্টিকোণ থেকে এটি আরও কিছুটা অর্থ বোধ করতে পারে (পিঁপড়া-অবদানের সাথে উপলভ্য: http://ant-contrib.sourceforge.net/ ):

<target name="someTarget">
    <if>
        <available file="abc.txt"/>
        <then>
            ...
        </then>
        <else>
            ...
        </else>
    </if>
</target>

36
আমার মনে হয় এটি কেবল পিঁপড়ের অবদানের মধ্যেই উপলব্ধ।
রিচার্ড কুক

26

পিঁপড়া 1.8.0 যেহেতু স্পষ্টতই রিসোর্সকেস্টও রয়েছে

Http://ant.apache.org/manual/Tasks/conditions.html থেকে

অস্তিত্বের জন্য একটি সংস্থান পরীক্ষা করে। পিপীলিকা 1.8.0 থেকে

পরীক্ষার আসল সংস্থানটি নেস্টেড উপাদান হিসাবে নির্দিষ্ট করা হয়েছে।

একটি উদাহরণ:

<resourceexists>
  <file file="${file}"/>
</resourceexists>

আমি এই প্রশ্নের উপরোক্ত উত্তরের উত্তর থেকে উদাহরণটি পুনরায় কাজ করতে এসেছি এবং তারপরে আমি এটি খুঁজে পেয়েছি

পিঁপড়া 1.8.0 হিসাবে, আপনি পরিবর্তে সম্পত্তি সম্প্রসারণ ব্যবহার করতে পারেন; সত্য (বা চালু বা হ্যাঁ) এর মানটি আইটেমটিকে সক্ষম করবে, যখন মিথ্যা (বা বন্ধ বা না) এটিকে অক্ষম করে দেবে। অন্যান্য মানগুলি এখনও সম্পত্তির নাম হিসাবে ধরে নেওয়া হয় এবং তাই আইটেমটি কেবলমাত্র নামযুক্ত সম্পত্তি সংজ্ঞায়িত হলেই সক্ষম হয়।

পুরানো শৈলীর তুলনায়, এটি আপনাকে অতিরিক্ত নমনীয়তা দেয় কারণ আপনি কমান্ড লাইন বা পিতামহীন স্ক্রিপ্টগুলি থেকে শর্তটি ওভাররাইড করতে পারেন:

<target name="-check-use-file" unless="file.exists">
    <available property="file.exists" file="some-file"/>
</target>
<target name="use-file" depends="-check-use-file" if="${file.exists}">
    <!-- do something requiring that file... -->
</target>
<target name="lots-of-stuff" depends="use-file,other-unconditional-stuff"/>

http://ant.apache.org/manual/properties.html#if+unless এ পিপীলিকা ম্যানুয়াল থেকে

আশা করি এই উদাহরণটি কারও কারও কাজে লাগবে। তারা রিসোর্সএক্সিস্ট ব্যবহার করছে না, তবে সম্ভবত আপনি পারতেন? .....


2
নোট যে হিসাবে হিসাবে if="${file.exists}"প্রতিস্থাপন করা উচিত এবং নাম হিসাবে সম্পত্তি শুধুমাত্র অস্তিত্ব চেক, এটি মান না। if="file.exists"ifunless
ভাদজিম

1
@ ভ্যাডজিম উত্তর হিসাবে উল্লিখিত হয়েছে, এটি কেবল পিঁপড়া 1.8 এ কাজ করে এবং 1.8 সম্পত্তি বিস্তারে সমর্থন করে। ant.apache.org/manual/properties.html#if+lessless
ড্যানিয়েল ইয়ানকোভস্কি

12

আমি মনে করি এটি অনুরূপ উত্তরটি উল্লেখ করার উপযুক্ত: https://stackoverflow.com/a/5288804/64313

এখানে আরও একটি দ্রুত সমাধান রয়েছে। <available>ট্যাগ ব্যবহার করে এটিতে আরও বিভিন্ন প্রকারের সম্ভাবনা রয়েছে :

# exit with failure if no files are found
<property name="file" value="${some.path}/some.txt" />
<fail message="FILE NOT FOUND: ${file}">
    <condition><not>
        <available file="${file}" />
    </not></condition>
</fail>

3

ফাইলের মতো ফিল্টার ব্যবহার করে চেক করুন DB_*/**/*.sql

যদি ওয়াইল্ডকার্ড ফিল্টারের সাথে সংশ্লিষ্ট এক বা একাধিক ফাইল উপস্থিত থাকে তবে একটি ক্রিয়া সম্পাদনের জন্য এখানে একটি প্রকরণ রয়েছে। অর্থাৎ, আপনি ফাইলটির সঠিক নাম জানেন না।

এখানে, আমরা "খুঁজছেন * .sql " কোনো একটি উপ-ডিরেক্টরির নামক ফাইল " DB_ * ," যাও recursively। আপনি আপনার প্রয়োজনের সাথে ফিল্টারটি সামঞ্জস্য করতে পারেন।

এনবি: অ্যাপাচি পিঁপড়া 1.7 এবং উচ্চতর!

এখানে ফাইল মিল থাকলে সম্পত্তি নির্ধারণের লক্ষ্য রয়েছে:

<target name="check_for_sql_files">
    <condition property="sql_to_deploy">
        <resourcecount when="greater" count="0">
            <fileset dir="." includes="DB_*/**/*.sql"/>
        </resourcecount>
    </condition>
</target>

এখানে একটি "শর্তসাপেক্ষ" লক্ষ্যমাত্রা উপস্থিত রয়েছে যা কেবলমাত্র ফাইলগুলি উপস্থিত থাকলে চালিত হয়:

<target name="do_stuff" depends="check_for_sql_files" if="sql_to_deploy">
    <!-- Do stuff here -->
</target>

0

আপনার প্রয়োজনীয় নাম (গুলি) এর সমান নামের ফাইলগুলির তালিকা দিয়ে অপারেশন করার আদেশ দিয়ে আপনি এটি করতে পারেন। এটি একটি বিশেষ লক্ষ্য তৈরি করার চেয়ে অনেক সহজ এবং সরাসরি। এবং আপনার কোনও অতিরিক্ত সরঞ্জামের দরকার নেই, খাঁটি পিপিলি।

<delete>
    <fileset includes="name or names of file or files you need to delete"/>
</delete>

দেখুন: ফাইলসেট

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.