2012-08-14 16 views
6

में चींटी कार्य चलाएं हमारा एंटी बिल्ड जावा 1.7.0 के लिए जावा 1.HOME के ​​लिए चलाया जाता है। इस तरह जावैक और अन्य सभी जावा निर्भर लक्ष्य डिफ़ॉल्ट रूप से सही जावा का उपयोग करते हैं।विभिन्न जेवीएम

लेकिन बाहरी सप्लायर से 1 चींटी लक्ष्य जावा 1.7.0 का उपयोग करके समर्थन नहीं करता है (या बल्कि एक बग है)। और उदा। जावैक या फोर्कड जूनिट, यह लक्ष्य जेवीएम स्विच करने के लिए पैरामीटर का समर्थन नहीं करता है।

क्या एक अलग जेवीएम में एक विशिष्ट चींटी लक्ष्य चलाने के लिए संभव है?

+0

क्या आप कुछ कोड स्निपेट प्रदान कर सकते हैं? –

उत्तर

3

आप पैरामीटर के रूप में चलाने के लिए निर्धारित लक्ष्य के साथ बिल्ड फ़ाइल चलाने के लिए निष्पादन कार्य का उपयोग कर सकते हैं। यह एक अलग JVM में चल रहा है क्योंकि आप उस निष्पादन कॉल में JVM पास कर सकते हैं।

ध्यान दें कि आपको गुणों को सेट करने के बजाय संचार के लिए फ़ाइलों पर भरोसा करने के लिए लक्ष्य को दोबारा करना होगा। चूंकि यह एक अलग जेवीएम में होगा, यह स्पष्ट रूप से स्मृति पर भरोसा नहीं कर सकता है।

17

exec चींटी कार्य ठोस का उपयोग करने का सुझाव Jeanne Boyarsky's बनाने के लिए, निम्न उदाहरण विभिन्न JVMs साथ बुला लक्ष्य आसान बनाने के लिए एक मैक्रो में exec कार्य गिर्द घूमती है। ध्यान दें कि JVM को एंटी पर्यावरण चर JAVACMD का उपयोग करके सेट किया गया है।

उदाहरण परियोजना

<?xml version="1.0" encoding="UTF-8"?> 
<project name="run-target-with-specified-java-version" default="test"> 

    <macrodef name="exec-target"> 
    <attribute name="antfile" default="${ant.file}" /> 
    <attribute name="target" /> 
    <attribute name="jvm" default="${java.home}/bin/java" /> 
    <sequential> 
     <exec executable="ant"> 
     <env key="JAVACMD" value="@{jvm}" /> 
     <arg line='-f "@{antfile}"' /> 
     <arg line="@{target}" /> 
     </exec> 
    </sequential> 
    </macrodef> 


    <target name="echo-java-version"> 
    <echo message="Java version: ${java.version}" /> 
    </target> 


    <target name="test"> 
    <exec-target target="echo-java-version" /> 

    <property name="java1.6" 
     location="/usr/lib/jvm/jdk1.6/bin/java" /> 
    <exec-target target="echo-java-version" jvm="${java1.6}" /> 
    </target> 
</project> 

आउटपुट

test: 
    [exec] Buildfile: /home/your/project/build.xml 
    [exec] 
    [exec] echo-java-version: 
    [exec]  [echo] Java version: 1.7.0 
    [exec] 
    [exec] BUILD SUCCESSFUL 
    [exec] Total time: 0 seconds 
    [exec] Buildfile: /home/your/project/build.xml 
    [exec] 
    [exec] echo-java-version: 
    [exec]  [echo] Java version: 1.6.0 
    [exec] 
    [exec] BUILD SUCCESSFUL 
    [exec] Total time: 0 seconds 

BUILD SUCCESSFUL 
Total time: 2 seconds 
+1

विंडोज़ (जेडीके के पथ को बदलने के बाद), उपरोक्त चींटी को निष्पादित करने से अपवाद फेंक सकता है, "निष्पादित विफल: java.io.IOException: प्रोग्राम" एंट "नहीं चला सकता: CreateProcess error = 2, सिस्टम निर्दिष्ट फ़ाइल नहीं ढूंढ सकता "। इसे हल करने के लिए "" को पंक्ति में बदलें। – Santhanam

3

आप एक अलग JVM (हम इसे हर समय करते हैं) में एक लक्ष्य चला सकते हैं। तुम बस कांटा उपयोग करने की आवश्यकता:

<javac srcdir="${src}" 
     destdir="${build}" 
     fork="yes" 
    /> 

लेकिन मैं समझ तो आप इस के बारे में पता कर रहे हैं, तो कैसे बाहरी चींटी कार्य चल रहा के रूप में यह है, और उनमें से बाकी के बारे में (कहते हैं कि तुम 3 अधिक javac कार्यों देता है) में आप चाहते हैं कि जेवीएम। यह एक संपत्ति फ़ाइल सेट करके हासिल किया जा सकता है। javac task

विभिन्न कंपाइलरों का उपयोग करना संभव है। इसे वैश्विक build.compiler प्रॉपर्टी को सेट करके निर्दिष्ट किया जा सकता है, जो

तो यह संपत्ति आपके 3 कार्यों को प्रभावित करेगी और आपके द्वारा निर्दिष्ट JVM में चलाएगी (कहें 1.7) और आप आपके बाहरी लाइब्रेरी कार्य को जो कुछ भी चाहिए, उसे डिफ़ॉल्ट JAVA_HOME सेट कर सकते हैं।

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