Запуск исполняемого файла jar, построенного на основе проекта gradle

У меня есть отдельный проект, основанный на gradle. Когда я делаю gradle build, jar создается в файле build/libs. Как запустить эту исполняемую банку из командной строки? Я попытался: java -cp build/libs/foo.jar full.package.classname, но я получил noClassFoundException для импортированных классов. Как включить зависимые банки как часть пути к классам?

Ответ 1

Поскольку вопрос отмечен тегом gradle, я предполагаю, что вы хотите запустить jar из gradle build. Я также предполагаю, что вы используете плагин java для своей сборки gradle.

Добавьте следующие строки в gradle:

task runFinalJar(type: JavaExec) {
   classpath = files('build/libs/foo.jar')
   classpath += sourceSets.main.runtimeClasspath
   main = full.package.classname
}

Теперь вы можете включить свою задачу в процесс сборки:

build.dependsOn.add("runFinalJar")

Или просто запустите его в командной строке:

gradle build runFinalJar

ОБНОВЛЕНИЕ Чистое использование плагина приложения, как предложил Питер

Ответ 2

Либо используйте плагин приложения, чтобы создать архив, содержащий ваш код, его зависимости и сценарии запуска, или создать исполняемый файл Jar. Последнее не должно выполняться наивным образом, но с gradle-one-jar (или аналогичным) плагином.

Ответ 3

Я думаю, что ответы идут дальше того, что есть на самом деле. Вопрос, или может быть пересчитан как, как запустить JAR, который gradle строит.

Пользователь спрашивает, что они пробовали java -cp build/libs/foo.jar full.package.classname безрезультатно.

Правильный синтаксис java -jar build/libs/foo.jar, или если JAR находится прямо там, очевидно, что он просто java -jar foo.jar, как обычно.

Вопрос должен быть отредактирован для ясности, ИМХО.