ant ants - अगर अन्य शर्त लागू करने के लिए शुद्ध चींटी का उपयोग करें(कमांड लाइन इनपुट की जांच करें)




cartoon in (3)

मैं चींटी में एक नौसिखिया हूं मेरी चींटी स्क्रिप्ट को कमांड लाइन से " env " नामक एक उपयोगकर्ता इनपुट चर प्राप्त होता है:

जैसे कि ant doIt -Denv=test

उपयोगकर्ता इनपुट वैल्यू " टेस्ट ", " देव " या " प्रॉड " हो सकती है।

मेरे पास " doIt " लक्ष्य भी है:

<target name="doIt">
  //What to do here?
</target>

मेरे लक्ष्य में, मैं अपनी चींटी स्क्रिप्ट के लिए अगर अन्य शर्त का पालन करना चाहूंगा:

if(env == "test")
  echo "test"
else if(env == "prod")
  echo "prod"
else if(env == "dev")
  echo "dev"
else
  echo "You have to input env"

यह जांचने के लिए कि उपयोगकर्ता द्वारा कमांड लाइन से कौन सा मूल्य दिया गया है, उसके बाद, एक संदेश प्रिंट करें

मैं चींटी-प्रतिबंधा के साथ जानता हूं, मैं <if> <else> साथ चींटी स्क्रिप्ट लिख सकता हूँ लेकिन मेरी परियोजना के लिए, मैं अगर अन्य स्थिति लागू करने के लिए शुद्ध चींटी का उपयोग करना चाहता हूं। शायद, मुझे <condition> उपयोग करना चाहिए ?? लेकिन मुझे यकीन नहीं है कि कैसे मेरे तर्क के लिए <condition> का उपयोग करें। क्या कोई कृपया मेरी यह मदद कर सकता है?


Answers

आप कुछ लक्ष्यों को बना सकते हैं और उपयोग कर सकते हैं / unless टैग्स नहीं।

<project name="if.test" default="doIt">

    <target name="doIt" depends="-doIt.init, -test, -prod, -dev, -else"></target>

    <target name="-doIt.init">
        <condition property="do.test">
            <equals arg1="${env}" arg2="test" />
        </condition>
        <condition property="do.prod">
            <equals arg1="${env}" arg2="prod" />
        </condition>
        <condition property="do.dev">
            <equals arg1="${env}" arg2="dev" />
        </condition>
        <condition property="do.else">
            <not>
                <or>
                <equals arg1="${env}" arg2="test" />
                <equals arg1="${env}" arg2="prod" />
                <equals arg1="${env}" arg2="dev" />
                </or>
            </not>
        </condition>
    </target>

    <target name="-test" if="do.test">
        <echo>this target will be called only when property $${do.test} is set</echo>
    </target>

    <target name="-prod" if="do.prod">
        <echo>this target will be called only when property $${do.prod} is set</echo>
    </target>

    <target name="-dev" if="do.dev">
        <echo>this target will be called only when property $${do.dev} is set</echo>
    </target>

    <target name="-else" if="do.else">
        <echo>this target will be called only when property $${env} does not equal test/prod/dev</echo>
    </target>

</project>

साथ लक्ष्य - उपसर्ग निजी है इसलिए उपयोगकर्ता उन्हें कमांड लाइन से चलाने में सक्षम नहीं होंगे।


अगर आप में से किसी को सादे की आवश्यकता होती है तो / else शर्त (बिना किसी अन्य के ); तो नीचे का प्रयोग करें:

यहाँ मैं एक env चर DMAPM_BUILD_VER पर निर्भर हूँ, लेकिन ऐसा हो सकता है कि यह चर env में सेट नहीं है। इसलिए मुझे एक स्थानीय मान को डिफ़ॉल्ट करने के लिए तंत्र की आवश्यकता है।

    <!-- Read build.version value from env variable DMAPM_BUILD_VER. If it is not set, take default.build.version. -->
    <property name="default.build.version" value="0.1.0.0" />
    <condition property="build.version" value="${env.DMAPM_BUILD_VER}" else="${default.build.version}">
        <isset property="env.DMAPM_BUILD_VER"/>
    </condition>

मैं पिछले उत्तरों में मामूली संशोधन का सुझाव दूंगा।

किसी उपयोगकर्ता को कॉन्फ़िगर करने के लिए प्रबंधक-gui और प्रबंधक-स्क्रिप्ट भूमिकाएं टॉमकैट 7 दस्तावेज़ 1 में दृढ़ता से निराश होती हैं। यह आपकी साइट को सीएसआरएफ हमलों के लिए खुला छोड़ सकता है।

प्रत्येक भूमिका के लिए अलग-अलग पासवर्ड के साथ अलग-अलग उपयोगकर्ताओं को परिभाषित करना सुरक्षित होगा:

<role rolename="manager-"/>
<role rolename="manager-script"/>
<user username="admin-gui" password="s3cret1" roles="manager-gui"/>
<user username="admin-script" password="s3cret2" roles="manager-script"/>

आम तौर पर, आपको केवल GUI उपयोगकर्ता के लिए उपयोगकर्ता नाम और पासवर्ड याद रखना होगा, इसलिए सुरक्षित कॉन्फ़िगरेशन होने का कोई बोझ नहीं है।