У меня есть файл 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
Так что это не очень полезно. Как это исправить?
это не будет работать из папки build/scripts
; правильный способ - разархивировать дистрибутив (.zip или .tar) из 'build/distributions/' в новую папку (создает папки bin и lib), а затем запустить скрипт из 'bin'
причина - скрипт (по умолчанию) ожидает структуру bin and lib
для разрешения путей.
он не создан для того, как вы пытаетесь его использовать. соглашение о распространении (по крайней мере, шаблон gradle по умолчанию) устанавливает его для использования в другом месте (в любом месте с bin и lib). вы можете написать свой собственный сценарий.
Спасибо, я разархивировал пакет, который находился в стадии сборки/дистрибутива, и он извлек папки bin и lib, там было bin/myproj
, с которым я могу нормально работать. Не уверен, что цель неработающего скрипта build/scripts/myproj
, может быть, gradle run
использует это? 🤷♂️
Значит, сценарий — бесполезный артефакт?