मावेन: कमांड लाइन पासिंग तर्कों से .java फ़ाइल कैसे चलाएं


88

मुझे निम्न समस्या है। मैं mvnएक Main.javaफ़ाइल के लिए कमांड लाइन से चलना चाहूंगा । Main.javaएक पैरामीटर स्वीकार करता है। मैं कमांड लाइन से कैसे करूँ?

मैंने एक उदाहरण खोजने की कोशिश की लेकिन मैं सफल नहीं रहा। क्या कोई मुझे इसका उदाहरण देकर मेरी मदद कर सकता है?

मैंने यहां देखा लेकिन मुझे यह समझ में नहीं आया कि मुझे क्या करना चाहिए।

इसके अलावा, मैं Main.java फ़ोल्डर की तुलना में किसी अन्य फ़ोल्डर से उस कमांड को कैसे निष्पादित करूं?

उदाहरण के लिए Main.javaमें स्थित है my/java/program/Main.java। मुझे क्या करना चाहिए

mvn exec:java -Dexec.mainClass="what to put here?" -Dexec.args="arg0 arg1 arg2"

4
लिंक किए गए ट्यूटोरियल से वास्तव में आपको क्या समझ नहीं आया? इसका सुंदर सीधा-आगे है। कृपया अपने प्रश्न में जोड़ें, जो कोड आपने अब तक आज़माया है।
परसेंटेज

मूल रूप से मैं जो करने की कोशिश कर रहा हूं वह एक जावा क्लास को दूसरे जावा क्लास से कॉल करना है। आम तौर पर मैं उस वर्ग को ग्रहण से चलाता हूं। मैं Runtime.getRuntime () का उपयोग कर रहा हूं। निष्पादन (""); किसी अन्य जावा प्रोग्राम से उस कक्षा को निष्पादित करने के लिए। लेकिन Main.class को चलाने के लिए mvan की जरूरत है। (मैंने प्रश्न संपादित किया)
phedon rousou

जवाबों:


151

आप दौड़ सकते हैं mvn exec:exec -Dexec.args="arg1":।

यह आपके प्रोग्राम के लिए तर्क arg1 पास करेगा ।

आपको मुख्य वर्ग को पूरी तरह से योग्य होना चाहिए, उदाहरण के लिए, एक Main.java जो पैकेज टेस्ट में होता है

mvn exec:java  -Dexec.mainClass=test.Main

-fपैरामीटर का उपयोग करके , जैसा कि यहां बताया गया है , आप इसे अन्य निर्देशिकाओं से भी चला सकते हैं।

mvn exec:java -Dexec.mainClass=test.Main -f folder/pom.xm

कई तर्कों के लिए, बस उन्हें कमांड लाइन में एक स्थान के साथ अलग करें।

mvn exec:java -Dexec.mainClass=test.Main -Dexec.args="arg1 arg2 arg3"

अ के साथ अलग किए गए तर्कों के लिए space, आप 'argument separated with space' उद्धरण चिह्नों के अंदर समूह बना सकते हैं ।

mvn exec:java -Dexec.mainClass=test.Main -Dexec.args="'argument separated with space' 'another one'"

1
हाँ, लेकिन यह कैसे पता चलता है कि main.java फ़ाइल कहाँ स्थित है?
15:23 बजे phedon rousou

क्या होगा अगर मेरे पास pom.xml नहीं है। मुझे निम्न त्रुटि मिलती है: मोजो को निष्पादित नहीं कर सकता: जावा। इसके लिए मौजूदा pom.xml के साथ एक प्रोजेक्ट की आवश्यकता होती है, लेकिन बिल्ड एक का उपयोग नहीं कर रहा है।
फ़ेडन रूसो

एक मावेन परियोजना के लिए एक pom.xml की आवश्यकता होती है, इस फ़ाइल के बिना, मावेन का उपयोग करने से थोड़ा समझ में आता है। तो, शायद आप पहले एक मावेन प्रोजेक्ट बनाना चाहते हैं? तो अन्य सभी समाधान ठीक काम करना चाहिए।
बीह

क्योंकि मैं मावेन प्लगइन के साथ एक्लिप्स का उपयोग करता हूं, मुझे लगा कि यह स्वचालित रूप से उत्पन्न हुआ था लेकिन जाहिर तौर पर मैं गलत था। मैं इस पर एक नज़र
डालूंगा

रिक्त स्थान पास करने के लिए तर्क कैसे दें?
वानुआन

6

इसके साथ चलाने के अलावा mvn exec:java, आप इसे साथ भी चला सकते हैंmvn exec:exec

mvn exec:exec -Dexec.executable="java" -Dexec.args="-classpath %classpath your.package.MainClass"

मैं इस मामले में Xmx तर्क कहां रखूंगा?
फेबिक

1
इसे डालने की कोशिश करें -Dexec.args:mvn exec:exec -Dexec.executable="java" -Dexec.args="-Xmx4g -classpath %classpath your.package.MainClass"
बेनेडिकट कोप्पेल

मैं यह नहीं देखता कि यह (IMO) निष्पादन के सीधे आगे के दृष्टिकोण से बेहतर कहां होगा: जावा
नियोब्रैज

5

एक शेल स्क्रिप्ट जोड़ना जैसे run.shइसे और अधिक आसान बनाता है:

#!/usr/bin/env bash
export JAVA_PROGRAM_ARGS=`echo "$@"`
mvn exec:java -Dexec.mainClass="test.Main" -Dexec.args="$JAVA_PROGRAM_ARGS"

फिर आप निष्पादित करने में सक्षम हैं:

./run.sh arg1 arg2 arg3

यह महान काम करता है! क्या आप बता सकते हैं कि ऐसा क्यों नहीं होता है: -Dexec.args = "$ @"
baumato

1
$@उद्धरणों में लिपटे स्ट्रिंग की सूची में सभी तर्कों को संग्रहीत करता है। यदि आप इसे सीधे उपयोग करना चाहते हैं तो आप उपयोग कर सकते हैं $*- सभी तर्क एक ही स्ट्रिंग के रूप में। क्या आपने यह कोशिश की?
टॉमी 1005
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.