Как выполнить основной класс в банке из gradle с помощью команды "java"
У меня есть эти файлы в папке <project_root>
:
./build.gradle
./build/libs/vh-1.0-SNAPSHOT.jar
./libs/groovy-all-2.1.7.jar
./src/main/groovy/vh/Main.groovy
В файле build.gradle
у меня есть эта задача:
task vh( type:Exec ) {
commandLine 'java -cp libs/groovy-all-2.1.7.jar:build/libs/' +
project.name + '-' + version + '.jar vh.Main'
}
Файл Main.groovy
прост:
package vh
class Main {
static void main( String[] args ) {
println 'Hello, World!'
}
}
После ввода строковых значений в командной строке:
java -cp libs/groovy-all-2.1.7.jar:build/libs/vh-1.0-SNAPSHOT.jar vh.Main
Если я запускаю команду непосредственно из оболочки, я получаю правильный вывод. Однако, если я запустил gradle vh
, он потерпит неудачу. Итак, как мне заставить его работать? Большое вам спасибо.
Ответы
Ответ 1
Exec.commandLine
ожидает список значений: одно значение для исполняемого файла и другое значение для каждого аргумента. Чтобы выполнить код Java, лучше использовать задачу JavaExec
:
task vh(type: JavaExec) {
main = "vh.Main"
classpath = files("libs/groovy-all-2.1.7.jar", "build/libs/${project.name}-${version}.jar")
}
Как правило, вам не нужно жестко указывать путь класса. Например, если вы используете плагин groovy
, а groovy-all
уже объявлен как зависимость compile
(и зная, что второй Jar создан из источников main
), вы бы скорее сделали:
classpath = sourceSets.main.runtimeClasspath
Чтобы узнать больше о типах задач Exec
и JavaExec
, обратитесь к Gradle Справочник по языку сборки.