2010-07-06 28 views
5

हम एप्लिकेशन युद्ध के हिस्से के रूप में कुछ सहायक स्क्रिप्ट (खोल स्क्रिप्ट) को शिप करना चाहते हैं। दुर्भाग्यवश ऐसा लगता है कि हमारी बिल्ड सिस्टम (मेवेन) सभी फ़ाइलों पर अनुमतियों को छोड़ देता है और स्क्रिप्ट निष्पादन योग्य बिट सेट के बिना समाप्त होती है।युद्ध फ़ाइल में निष्पादन योग्य

क्या ऐसा करना भी संभव है? क्या .war प्रारूप निष्पादन योग्य फ़ाइलों का समर्थन करता है? यदि हां: अनुमति में रखने के लिए मैवेन को कैसे अनुमति दे सकती है/प्रक्रिया में उन्हें कहीं ठीक कर सकते हैं?

+0

क्या मैं सिर्फ पूछ सकता हूं कि इन सहायक स्क्रिप्ट का उपयोग कैसे किया जा रहा है (और किसके द्वारा)? –

+0

एप्लिकेशन द्वारा ही :), मुझे पता है, यह 'जेई 22' तरीका नहीं है, लेकिन हमें कुछ परिणाम फ़ाइलों को एसपीपी और एफटीपी का उपयोग करके विभिन्न होस्टों में स्थानांतरित करना होगा। इसे एक साधारण खोल स्क्रिप्ट के साथ करना (जो परिणाम फ़ाइल को तर्क के रूप में प्राप्त करता है) एक ब्रेनर है। हम सादा-जावा के साथ ऐसा नहीं करना चाहते हैं। – reto

उत्तर

4

समस्या यह है कि इन बिट्स अंतर्निहित ज़िप प्रारूप में समर्थित नहीं हैं।

निष्पादन बिट को सेट करने की आवश्यकता नहीं है, अगर आप स्पष्ट रूप से स्क्रिप्ट नाम के साथ/bin/sh निष्पादित करते हैं।

यह भी ध्यान रखें कि आपका प्रोग्राम - जो स्क्रिप्ट के स्थान को जानता है - लॉन्च करने से पहले "chmod + x script.sh" का आह्वान कर सकता है।

0

युद्ध के बाहर निष्पादन योग्य आपूर्ति करें। उन्हें युद्ध के भीतर से बुलाओ।

+0

यह एक समाधान है लेकिन यह अन्य समस्याओं को लाता है (रखरखाव मेरे दिमाग में आने वाला पहला व्यक्ति है)। मुझे यकीन नहीं है कि यह एक सर्वोत्तम अभ्यास होना चाहिए। –

+0

वैकल्पिक समाधान: WAR के अंदर निष्पादन योग्य आपूर्ति करें, और प्रत्येक रन पर, प्रोग्रामेटिक रूप से निष्पादन योग्य को उसी निर्देशिका में निकालें और उसे वहां कॉल करें। – mcandre

+0

मैंने इस समाधान की कोशिश की है लेकिन यह काम नहीं कर सका। किसी कारण से, क्लास लोडर को मेरे स्क्रिप्ट संसाधन नहीं मिल सका। मैं एक और घंटे खर्च करूँगा या इस पर काम कर रहा हूं, और यदि यह विफल हो जाता है, तो यह एक नए प्रश्न का अवसर होगा :) –

1

AFAIK, वहाँ एक युद्ध/जार के अंदर फाइल अनुमति सेट करने के लिए कोई रास्ता नहीं है (यह तथापि संभव है जब Maven विधानसभा प्लगइन अपनी परियोजना के एक द्विआधारी वितरण संग्रह बनाने के लिए उपयोग कर रहा है, लेकिन इस एक और कहानी है)।

तो, मैं करूंगा या तो:

  • (एक द्विआधारी वितरण के रूप में) उद्धार और webapp बाहर इन स्क्रिप्ट चलाने ~ या ~
  • classpath से फाइल पढ़ें, उन्हें java.io.tmpdir निर्देशिका के लिए लिखते हैं, निष्पादन बिट सेट करें और फिर उन्हें वहां से निष्पादित करें ~ या ~
  • @ थोरबोजर्न समाधान का उपयोग करें (कोशिश नहीं की लेकिन मुझे लगता है कि यह काम करेगा); मैं बस सोच रहा हूं कि आप इन स्क्रिप्ट को निष्पादित करते हैं।
+0

लाइनों, युद्ध के बीच पढ़ना विस्फोट हुआ है, इसलिए स्क्रिप्ट वास्तविक फाइलें हैं जिन्हें बुलाया जा सकता है। अन्यथा यूनिक्स के तहत stdin पर स्क्रिप्ट प्रदान की जा सकती हैं। –

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