2009-01-17 8 views
36

मैं ओएस प्रकार द्वारा अलग-अलग चींटी कार्य में एक संपत्ति सेट करना चाहता हूं।ओएस का पता लगाने और संपत्ति सेट करने के लिए चींटी का उपयोग

संपत्ति एक निर्देशिका है, विंडोज़ में मैं इसे "सी: \ फ्लैग" यूनिक्स/लिनक्स "/ ऑप्ट/फ्लैग" में रखना चाहता हूं।

मेरी वर्तमान स्क्रिप्ट केवल तभी काम करती है जब मैं इसे डिफ़ॉल्ट लक्ष्य के साथ चलाता हूं, लेकिन क्यों?

<target name="checksw_path" depends="if_windows, if_unix"/> 

<target name="checkos"> 
    <condition property="isWindows"> 
     <os family="windows" /> 
    </condition> 

    <condition property="isLinux"> 
     <os family="unix" /> 
    </condition> 
</target> 

<target name="if_windows" depends="checkos" if="isWindows"> 
    <property name="sw.root" value="c:\flag" /> 
    <echo message="${sw.root}"/> 
</target> 

<target name="if_unix" depends="checkos" if="isLinux"> 
    <property name="sw.root" value="/opt/flag" /> 
    <echo message="${sw.root}"/> 
</target> 

मेरे सारे चींटी लक्ष्य मैं एक जोड़ दिया है में "निर्भर करता है = checksw_path"।

यदि मैं विंडोज़ में डिफ़ॉल्ट लक्ष्य चलाता हूं तो मुझे सही ढंग से "सी: \ फ्लैग" मिल गया है, लेकिन यदि मैं एक गैर डिफ़ॉल्ट लक्ष्य चलाता हूं तो मुझे पता चला है कि डीबग if_windows में जाता है लेकिन निर्देश "" सेट नहीं होता है संपत्ति जो/ऑप्ट/फ्लैग बनी हुई है। मैं चींटी 1.7.1 का उपयोग कर रहा हूँ।

उत्तर

-3

मैं sw.root का उपयोग कर -Dsw.root = ग के लिए मूल्य के साथ चींटी कार्य को क्रियान्वित करने को हल किया।

वैसे भी धन्यवाद

20

<target /> से अपनी स्थिति को ले जाएं, क्योंकि आपका लक्ष्य संभवतः नहीं बुलाया गया है। \ ध्वज (विंडोज़ के लिए) या -Dsw.root =/opt/SuperWaba (linux के लिए):

<condition property="isWindows"> 
        <os family="windows" /> 
</condition> 

<condition property="isLinux"> 
        <os family="unix" /> 
</condition> 
1

अपने जावा कार्य में <sysproperty key="foobar" value="fowl"/> सेट करके देखें। फिर, अपने ऐप में, System.getProperty ("foobar") का उपयोग करें;

12

यदि स्थिति काम करने के लिए आपको संपत्ति के लिए मूल्य "सत्य" सेट करने की आवश्यकता है। नीचे दिए गए कोड देखें:

<condition property="IS_WINDOWS" value="true" else="false"> 
    <os family="windows"/> 
</condition> 

तो आप चाहते हैं:

<target name="checkos"> 
    <condition property="isWindows" value="true"> 
      <os family="windows" /> 
    </condition> 

    <condition property="isLinux" value="true"> 
      <os family="unix" /> 
    </condition> 
</target> 

HTH, हरि

0

सबसे पहले आप ऑपरेटिंग सिस्टम (ओएस) के आधार पर सही या गलत का एक चर सेट करना चाहते हैं चर का उपयोग कर अपने तर्क ट्रिगर करने के लिए। उसके लिए आपको जवाब यहाँ पा सकते हैं:

http://boulderapps.co/running-different-ant-tasks-depending-on-the-operating-system

2

मैं ऐसे स्क्रिप्ट का इस्तेमाल किया और मेरे लिए अच्छी तरह से काम:

<project name="dir" basedir="."> 

    <condition property="isWindows"> 
    <os family="windows" /> 
    </condition> 

    <condition property="isUnix"> 
    <os family="unix" /> 
    </condition> 

    <target name="setWindowsRoot" if="isWindows"> 
    <property name="root.dir" value="c:\tmp\" /> 
    </target> 

    <target name="setUnixRoot" if="isUnix"> 
    <property name="root.dir" value="/i0/" /> 
    </target> 

    <target name="test" depends="setWindowsRoot, setUnixRoot"> 
    <mkdir dir="${root.dir}" /> 
    </target> 

</project> 
2

हैं कि एकल ओएस के आधार पर संपत्ति सेट करना चाहते हैं, तो आप सेट कर सकते हैं यह सीधे रूप में अच्छी तरह के बिना बनाने कार्यों की जरूरत:

<condition property="sw.root" value="c:\flag"> 
    <os family="windows" /> 
</condition> 

<condition property="sw.root" value="/opt/flag"> 
     <os family="unix" /> 
</condition> 

<property name="sw.root" value="/os/unknown/"/> 
0

Ant Contrib का उपयोग कर आप elemen की मात्रा को कम करके अपने निर्माण फ़ाइल को आसान बनाने में कर सकते हैं तक टीएस आपको इन शर्तों को जोड़ने के क्रम में घोषित करने की आवश्यकता है।

<!--Tell Ant to define the Ant Contrib tasks from the jar--> 
<taskdef resource="net/sf/antcontrib/antcontrib.properties"> 
    <classpath> 
     <pathelement location="path/to/ant-contrib-0.6.jar"/> 
    </classpath> 
</taskdef> 

<!--Do your OS specific stuff--> 
<target name="checkos"> 
    <if> 
     <os family="unix"/> 
     <then> 
      <!--Do your Unix stuff--> 
     </then> 
     <elseif> 
      <os family="windows"/> 
      <then> 
       <!--Do your Windows stuff--> 
      </then> 
     </elseif> 
    </if> 
</target> 
संबंधित मुद्दे