Maven: Як запустити файл .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
Що саме ви не зрозуміли з підручника? Це досить прямо. Будь ласка, додайте до свого запитання код, який ви спробували до цього часу.
Сприйняття

В основному те, що я намагаюся зробити, це викликати клас Java з іншого класу Java. Зазвичай я запускаю цей клас з Eclipse. Я використовую Runtime.getRuntime (). Exec (""); для виконання цього класу з іншої програми Java. Але Main.class потребує mvn для запуску. (Я відредагував запитання)
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"

Для аргументів, розділених символом a space, можна згрупувати, використовуючи 'argument separated with space' всередині лапок.

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

1
так, але звідки він знає, де знаходиться файл main.java?
phedon rousou

що якщо у мене немає pom.xml. Я отримую таку помилку Не вдається виконати mojo: java. Для цього потрібен проект із наявним pom.xml, але збірка не використовує його.
phedon rousou

Для проекту maven потрібен pom.xml, без цього файлу використання maven мало сенсу. То, можливо, ви хочете спочатку створити проект maven? Тоді всі інші рішення повинні працювати нормально.
Behe

Оскільки я використовую Eclipse з плагіном maven, я думав, що він генерується автоматично, але, мабуть, я помилився. Я його
подивлюсь

Як передавати аргументи, що містять пробіли?
Вануан

6

На додаток до запуску з mvn exec:java, ви також можете запустити його за допомогоюmvn exec:exec

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

Куди б я поставив аргумент Xmx у цьому випадку?
Fabich

1
Спробуйте ввести це -Dexec.args:mvn exec:exec -Dexec.executable="java" -Dexec.args="-Xmx4g -classpath %classpath your.package.MainClass"
Benedikt Köppel

Я не бачу, де це буде краще, ніж (IMO) прямий підхід exec: java
Neowizard

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
$@зберігає всі аргументи у списку рядка, загорнутого в лапки. Якщо ви хочете використовувати його безпосередньо, ви можете використовувати $*- всі аргументи як єдиний рядок. Ви спробували це?
Tommy1005
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.