Я не могу запустить вывод сценария с помощью сборки gradle: «Не удалось найти или загрузить основной класс»

У меня есть файл build.gradle, например:

plugins {
    id 'application'
    ...
}

compileJava {
    options.compilerArgs += ["-Aproject=${project.group}/${project.name}"]
}

application {
    mainClass = 'com.anentropic.myproj.MyProj'
    applicationName = "myproj"  // shell script wrapper name
}

jar {
    archiveBaseName = "myproj"  // jar name
}

Он отлично компилируется, когда я запускаю gradle build.

В app/build/scripts/myproj есть вывод артефакта, который представляет собой сценарий оболочки, который оборачивает вызов java в мой файл jar.

Когда я запускаю его, я получаю:

Error: Could not find or load main class com.anentropic.myproj.MyProj
Caused by: java.lang.ClassNotFoundException: com.anentropic.myproj.MyProj

Так что это не очень полезно. Как это исправить?

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

Ответы 1

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

это не будет работать из папки build/scripts; правильный способ - разархивировать дистрибутив (.zip или .tar) из 'build/distributions/' в новую папку (создает папки bin и lib), а затем запустить скрипт из 'bin'

причина - скрипт (по умолчанию) ожидает структуру bin and lib для разрешения путей.

Значит, сценарий — бесполезный артефакт?

Anentropic 22.12.2022 03:25

он не создан для того, как вы пытаетесь его использовать. соглашение о распространении (по крайней мере, шаблон gradle по умолчанию) устанавливает его для использования в другом месте (в любом месте с bin и lib). вы можете написать свой собственный сценарий.

PrasadU 22.12.2022 03:39

Спасибо, я разархивировал пакет, который находился в стадии сборки/дистрибутива, и он извлек папки bin и lib, там было bin/myproj, с которым я могу нормально работать. Не уверен, что цель неработающего скрипта build/scripts/myproj, может быть, gradle run использует это? 🤷‍♂️

Anentropic 22.12.2022 05:02

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