В моем проекте 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 изменится, мне придется заменить его в нескольких местах.
Вы можете использовать mainClassName (из плагина application) в конфигурации задачи jar (т. е. 'Main-Class': mainClassName).




Ваша основная проблема, вероятно, заключается в том, что ваши зависимости не были перенесены в ваш исполняемый файл 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
В качестве небольшого примечания, вы можете упростить
it.getName()доit.nameи все это доconfigurations.compile*.name.join(' ').