मैं एक त्वरित एकीकरण परीक्षण के भाग के रूप में ग्रैडल के माध्यम से एक कमांड-लाइन जावा ऐप चलाने की कोशिश कर रहा हूं। मैं मावेन से अपनी बिल्ड स्क्रिप्ट को पोर्ट कर रहा हूं, जहां यह आसानी से हो गया था exec-maven-plugin
। मेरी दो बड़ी आवश्यकताएं हैं:
- निष्पादन योग्य जावा कोड में सिस्टम गुण पास करने में सक्षम होने के नाते
- कमांड-लाइन को पास करने में सक्षम होने के कारण निष्पादन योग्य जावा कोड
कृपया ध्यान दें कि मैं इन गुणों को बिल्ड स्क्रिप्ट में पढ़ने की कोशिश नहीं कर रहा हूं, मैं उन्हें जावा प्रोग्राम में पढ़ने की कोशिश कर रहा हूं जो स्क्रिप्ट बनाता है और निष्पादित करता है।
मुझे दो अन्य एसओ पोस्ट मिले हैं जो ग्रैड के माध्यम से जावा प्रोग्राम निष्पादन को संबोधित करते हैं: एक उत्तर के साथ जो apply plugin: "application"
बिल्ड फ़ाइल में और gradle run
कमांड लाइन पर उपयोग करने की वकालत करता हैtask execute(type:JavaExec)
gradle execute
, और दूसरा उत्तर उस दृष्टिकोण की वकालत करने के साथ-साथ बिल्ड फ़ाइल में और उपयोग करने पर कमांड लाइन । मैंने दोनों तरीकों की कोशिश की है और सफल नहीं हुआ हूं।
मुझे दो समस्याएं हैं:
(1) मुझे सिस्टम के गुणों को पढ़ने के लिए जावा निष्पादन योग्य नहीं मिल सकता है
चाहे मैं यह करूँ:
build.gradle :
apply plugin: 'application'
mainClassName = "com.mycompany.MyMain"
कमांड लाइन :
gradle run -Dmyproperty=myvalue
या यह:
build.gradle :
task execute (type:JavaExec) {
main = "com.mycompany.MyMain"
classpath = sourceSets.main.runtimeClasspath
}
कमांड लाइन :
gradle execute -Dmyproperty=myvalue
किसी भी मामले में, के myproperty
माध्यम से नहीं करता है। जिस कोड से चलना शुरू होता MyMain.main (...)
है, वह myproperty
सिस्टम प्रॉपर्टी को अशक्त / लापता के रूप में पढ़ता है।
(2) मैं कमांड लाइन तर्क पारित नहीं कर सकता
यह संभवतः पहली समस्या से संबंधित है। में exec-maven-plugin
, उदाहरण के लिए, कमांड लाइन आर्ग खुद को एक प्रणाली के माध्यम से संपत्ति में पारित किया गया। क्या ग्रैडल के साथ मामला है, या कमांड लाइन तर्कों को पारित करने का एक और तरीका है?
मैं इन चर को कैसे प्राप्त करूं? इसके अलावा, क्या इसका उपयोग करना बेहतर है apply plugin: 'application'
या task execute (type:JavaExec)
?