2011-07-13 14 views
21

में .properties फ़ाइल से पढ़ना मुझे चींटी की संपत्ति फ़ाइलों का उपयोग करने में कुछ मदद चाहिए।Ant build.xml

  1. एक build.properties फ़ाइल: मैं निम्नलिखित है। इस फ़ाइल में जानकारी का एक टुकड़ा है: on=1

  2. एक ant.xml फ़ाइल। इस फ़ाइल में मेरे निर्माण निर्देश शामिल हैं।

मैंने अपने गुण फ़ाइल और मैं अपने निर्माण फ़ाइल में एक कार्य निष्पादित करने के लिए चाहते हैं, तो मूल्य 1 है on विशेषता पढ़ना चाहते हैं। अन्यथा मैं इसे कुछ भी नहीं करना चाहता हूं। क्या कोई मुझे इस बात को पूरा करने के लिए मार्गदर्शन कर सकता है?

हालत काम पर
+0

आपका क्या मतलब है, आप कुछ करना चाहते हैं? मैं ant.xml के साथ कुछ मान रहा हूँ? – RMT

उत्तर

0

एक दृष्टिकोण है, कि मुश्किल लग रहा है लेकिन है, वास्तव में, बहुत आसान: एक कस्टम चींटी कार्य लिखना (एक साधारण जावा वर्ग, < कोड की 20 लाइनें)। कार्य

  1. गुण फ़ाइल दिखाया जाएगा (स्थान/नाम काम करने के लिए एक विशेषता के रूप में पारित किया जा सकता)
  2. एक चींटी संपत्ति

तो फिर तुम कि उपयोग कर सकते हैं करने के लिए on का मान असाइन आपके प्रवाह नियंत्रण के लिए चींटी संपत्ति।

public class MyOwnTask extends Task { 

    private String filename = "build.properties"; // some default value 

    public void setFilename(String filename) { 
    this.filename = filename; 
    } 

    public void execute() { // the "main" method 
    Properties p = new Properties(); 
    p.load(filename); 
    String onValue = p.get("on"); 
    getProject().setProperty("ON_PROPERTY", onValue); 
    } 
} 

तो आपको कुछ <taskdef> की आवश्यकता है और यही वह है।

+0

जब आप एंटी स्क्रिप्ट में गुण फ़ाइल आयात कर सकते हैं तो आपको ऐसा करने की आवश्यकता क्यों होगी? – Perception

+1

@ धारणा - आप इस मूल्यवान जानकारी से जवाब क्यों नहीं देते? कस्टम चींटी कार्य निश्चित रूप से अधिक मजेदार है :) –

+0

इसके जावा एपीआई का उपयोग करते हुए भी चींटी के लिए अपनी खुद की निर्माण दोहन लिख रही है। मैंने नम्रतापूर्वक अनुरोध किया है :-) – Perception

20

यह तुम सब करने की जरूरत है होना चाहिए:

1.Grab ant-contrib जार के नवीनतम संस्करण को और जगह lib में अपने चींटी स्थापना की फ़ोल्डर।

2.Include अपने निर्माण स्क्रिप्ट

<property file="build.properties"/> 

3.Add अपने निर्माण स्क्रिप्ट के लिए निम्न taskdef प्रविष्टि में अपनी संपत्ति

<taskdef resource="net/sf/antcontrib/antcontrib.properties"/> 

4.And तो अंत में, एक अगर काम की तरह इतना परिभाषित :

<if> 
<equals arg1="${on}" arg2="1" /> 
<then> 
    <echo message="I am going to do something here" /> 
</then> 
<else> 
    <echo message="I am going to do nothing" /> 
</else> 
</if> 

ध्यान दें कि आप संपत्ति से आयात करने वाले गुणों के लिए पहचानकर्ता प्रीपेड कर सकते हैं Iles। उदाहरण के लिए यदि आप ऐसा तरह अपने आयात कर सकता है:

<property file="build.properties" prefix="uniqueprefix"/> 

और फिर 'चालू' बस के बजाय, अपनी फ़ाइल, 'uniqueprefix.on' में संदर्भ होगा।

<equals arg1="${uniqueprefix.on}" arg2="1" /> 

आप उपयोग कर सकते हैं में निर्मित चींटी से सशर्त काम है, लेकिन मुझे लगता है कि अगर आप इसे की जरूरत है आप अतिरिक्त कार्यों कि चींटी-योगदान तालिका में लाता है के साथ बेहतर होते हैं। साथ ही, ध्यान दें कि आपकी बिल्ड फ़ाइल को 'build.xml' के रूप में नामित करने के लिए मानक है, और 'ant.xml' नहीं है। जैसा कि है, एंट आपके द्वारा उपयोग किए गए नाम के अनुसार स्वचालित रूप से इसे ढूंढने में सक्षम नहीं होगा। सौभाग्य।

+0

+1 और मैं इसे स्वीकार करूंगा, हालांकि - इस समाधान के साथ हमें सावधान रहना होगा कि उन बाहरी गुणों के लिए एक विशेष नामस्थान चुनना चाहिए - अन्यथा हम मौजूदा गुणों को ओवरराइट कर सकते हैं गलती से। बस कल्पना करें, 'build.xml' में भी संपत्ति' पर परिभाषित किया गया था ... –

+1

@Andreas_D, वास्तव में संपत्ति फ़ाइल के माध्यम से शामिल सभी गुणों के लिए एक अद्वितीय पहचानकर्ता को जोड़ना संभव है। मैं इस जानकारी को शामिल करने के लिए अपना उत्तर अपडेट करूंगा। – Perception

3

मुझे लगता है कि आप नीचे दिए गए कार्य की तरह कुछ लागू करना चाहते हैं।

<property file="build.properties" /> 



<target name="default" description="Homeworks"> 
    <condition property="on"> 
     <equals arg1="{on}" arg2="1" /> 
    </condition> 
    <antcall target="taska" /> 
    <antcall target="taskb" /> 
</target> 

<target name="taska" if="on"> 
    <echo message="Testing task one" /> 
</target> 
<target name="taskb" unless="on"> 
    <echo message="Testing task two" /> 
</target> 

मुझे पता है अगर आप एक स्पष्टीकरण चाहते हैं, विवरण में करते हैं।

mybuild.properties:

on=on 

उपयोग

+0

thx बहुत अधिक। लेकिन मुझे अभी भी समस्या है। सामान्य रूप से संपत्तियों से मूल्य "पर" ध्यान में नहीं लिया जाता है। अगर मैं चींटी कॉल टास्कब को "चालू" से "बंद" करता हूं, लेकिन यदि मैं किसी भी संख्या-"टारका" को हमेशा "चालू" करने के लिए निर्दिष्ट करता हूं। – user842650

3

आप अपने खुद के चींटी कार्य लिख सकते हैं या अन्य libs, बस "क्लीन" चींटी का उपयोग नहीं करना चाहते हैं, यह एक पर एक नजर है पर या सच या ऐसा कुछ, 1 काम नहीं करेगा।

build.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<project name="project" default="default"> 
    <property file="mybuild.properties"/>  

    <target name="default" depends="on, off" description="description"> 
     <echo>default</echo> 
    </target> 

    <target name="on" if="${on}"> 
     <echo>on</echo> 
    </target> 

    <target name="off" unless="${on}"> 
     <echo>off</echo> 
    </target> 
</project> 
+0

सभी को धन्यवाद :)) यह काम कर रहा है। मैं अपनी परियोजना के साथ आगे बढ़ रहा हूँ! : * – user842650

संबंधित मुद्दे