Maven: Komut satırından argümanları ileten bir .java dosyası nasıl çalıştırılır


88

Aşağıdaki problemim var. mvnBir Main.javadosya için komut satırından çalıştırmak istiyorum . Main.javabir parametre kabul eder. Bunu komut satırından nasıl yaparım?

Bir örnek bulmaya çalıştım ama başarılı olamadım. Birisi bana bunun bir örneğini vererek yardımcı olabilir mi?

Baktım burada ama oldukça ne yapmam gerektiğini anlayamadım.

Ayrıca, bu komutu Main.java klasöründen farklı bir klasörden nasıl çalıştırabilirim?

örneğin Main.java, yer almaktadır my/java/program/Main.java. Ne koymalıyım

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

4
Bağlantılı öğreticiden tam olarak ne anlamadınız? Oldukça yalındır. Lütfen şu ana kadar denediğiniz kodu sorunuza ekleyin.
Algı

Temelde yapmaya çalıştığım şey başka bir java sınıfından bir java sınıfı aramak. Normalde bu sınıfı Eclipse'den çalıştırırım. Runtime.getRuntime (). Exec ("") kullanıyorum; o sınıfı başka bir java programından çalıştırmak için. Ancak Main.class'ın çalışması için mvn'ye ihtiyacı var. (Soruyu düzenledim)
rousou

Yanıtlar:


152

Sen çalıştırabilir: mvn exec:exec -Dexec.args="arg1".

Bu arg1 argümanını programınıza iletecektir .

Tam nitelikli ana sınıfı belirtmelisiniz, örneğin, paket testinde bulunan bir Main.java

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

-fParametreyi burada açıklandığı gibi kullanarak, onu diğer dizinlerden de çalıştırabilirsiniz.

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

Birden çok argüman için, bunları komut satırında yaptığınız gibi bir boşlukla ayırmanız yeterlidir.

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

A ile ayrılmış argümanlar için space, 'argument separated with space' tırnak işaretlerini kullanarak gruplayabilirsiniz .

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

1
evet, ama main.java dosyasının nerede olduğunu nasıl biliyor?
phedon rousou

pom.xml bende değilse ne olur? Şu hatayı alıyorum mojo yürütülemiyor: java. Mevcut bir pom.xml ile bir proje gerektirir, ancak yapı bir tane kullanmıyor.
telefonla rousou

Bir maven projesi, bu dosya olmadan bir pom.xml gerektirir, maven kullanmak çok az anlam ifade eder. Öyleyse, belki önce bir maven projesi oluşturmak istersiniz? O zaman diğer tüm çözümler iyi çalışmalı.
Behe

Eclipse'i maven eklentisiyle kullandığım için otomatik olarak oluşturulduğunu düşündüm ama görünüşe göre yanılmışım. Bir göz
atacağım

Boşluk içeren argümanlar nasıl iletilir?
Vanuan

6

İle çalıştırmanın yanı sıra, şununla mvn exec:javada çalıştırabilirsiniz:mvn exec:exec

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

Bu durumda Xmx argümanını nereye koymalıyım?
Fabich

1
Şuna koymayı deneyin -Dexec.args:mvn exec:exec -Dexec.executable="java" -Dexec.args="-Xmx4g -classpath %classpath your.package.MainClass"
Benedikt Köppel

Bunun nerede (IMO) basit
yürütme

6

Örneğin bir kabuk komut dosyası eklemek run.sh, bunu çok daha kolay hale getirir:

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

Ardından şunları yapabilirsiniz:

./run.sh arg1 arg2 arg3

Bu harika çalışıyor! Bunun neden olmadığını açıklayabilir misiniz: -Dexec.args = "$ @"
baumato

1
$@tüm argümanları tırnak içine alınmış bir dizge listesinde depolar. Doğrudan kullanmak istiyorsanız $*- tüm argümanları tek bir dizge olarak kullanabilirsiniz . Bunu denedin mi
Tommy1005
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.