`gradle run` без градации

В моем проекте Java я использую gradle для управления зависимостями. У меня есть основной класс org.myorg.MainClass, и я могу заставить его работать с gradle run.

Однако, когда я использую gradle assembly для создания jar, я не могу заставить его работать без градиента.

java -jar assembly.jar заканчивается сразу безрезультатно.

Я даже добавил:

jar {
    manifest {
        attributes(
                'Class-Path': configurations.compile.collect { it.getName() }.join(' '),
                'Main-Class': 'org.myorg.MainClass'
        )
    }
}

Что помогло с основным файлом класса, но это не помогло.

Мне также не нравится тот факт, что MainClass повторяется в разных частях файла gradle — это означает, что если MainClass изменится, мне придется заменить его в нескольких местах.

В качестве небольшого примечания, вы можете упростить it.getName() до it.name и все это до configurations.compile*.name.join(' ').

chrylis -cautiouslyoptimistic- 27.04.2019 00:26

Вы можете использовать mainClassName (из плагина application) в конфигурации задачи jar (т. е. 'Main-Class': mainClassName).

Slaw 27.04.2019 04:50
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
504
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

Если я прав, то я думаю, что сейчас вам лучше всего использовать плагин Shadow Jar (https://imperceptiblethoughts.com/shadow/introduction/)

Shadow is a Gradle plugin for combining dependency classes and resources with a project's into a single output Jar. The combined Jar is often referred to a fat-jar or uber-jar. Shadow utilizes JarInputStream and JarOutputStream to efficiently process dependent libraries into the output jar without incurring the I/O overhead of expanding the jars to disk.

Запустите не выходную "банку", а "толстую банку". java -jar assembly-fat.jar

Другие вопросы по теме