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
Что именно вы не поняли из связанного руководства? Это довольно просто. Пожалуйста, добавьте к своему вопросу код, который вы уже пробовали.
— Perception

В основном я пытаюсь вызвать класс 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"

Аргументы, разделенные знаком 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, я думал, что он сгенерирован автоматически, но, видимо, я ошибался. Я посмотрю на это
— phedon rousou

Как передавать аргументы, содержащие пробелы?
— Vanuan 01

6

Помимо запуска с помощью mvn exec:java, вы также можете запустить его с помощьюmvn exec:exec

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

Куда бы я поместил аргумент Xmx в этом случае?
— Fabich 08

1
Попробуйте -Dexec.argsmvn exec:exec -Dexec.executable="java" -Dexec.args="-Xmx4g -classpath %classpath your.package.MainClass"
— Бенедикт Кёппель

Я не вижу, где это будет лучше, чем (IMO) прямой подход exec: java
— Neowizard

6

Например, добавление сценария оболочки 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.