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.