Я использую довольно простое Java-приложение, которое получает входной файл, обрабатывает его и генерирует выходной файл. Я использую Picocli для аргументов приложения и Graalvm для создания собственного двоичного файла.
Сначала я создал artifact в intellij, включая библиотеки и указав класс, содержащий основной метод, затем я использовал параметр build artifact для создания файла jar. После этого я использовал следующую команду для создания двоичного файла
native-image -jar metadata-processor.jar
Баночка и бинарник создаются внутри проекта, так как projectName/out/artifacts/app_jar я могу запустить бинарник, используя
./binary -i abc -o xyz
Я могу запустить файл jar, используя
java -jar binary.jar -i abc -o xyz
Однако, когда я перемещаю каталог binary в ~Download и запускаю ту же команду, что и выше, я получаю сообщение об ошибке
./binary -i abc -o xyz
Error: Could not find or load main class Main
Баночка все еще работает, т.е.
java -jar binary.jar -i abc -o xyz
Если я создам простую программу hello world и создам двоичный файл, она будет работать нормально, даже если я перемещу ее в другую папку, так что это похоже на проблему с библиотекой или структуру проекта.
Пожалуйста, дайте мне знать, если в случае с библиотеками требуется какой-то особый шаг.
@zakkak да, это не удалось из-за какой-то ошибки типа Error: type is not available in this platform: org.graalvm.nativeimage.impl.ImageSingletonsSupport
Это из-за mac m1 max или какой-то другой проблемы?
Я не уверен, если честно. Лучше обновите проблему на github и предоставьте там больше информации (например, полную трассировку стека).




Хорошо, наконец, что сработало для меня, так это создать файл конфигурации. Это становится двухэтапным процессом
Шаг 1:
Сначала я создаю файл jar проекта, используя intellij, затем запускаю файл jar, чтобы создать файл конфигурации проекта в каталоге META_INF/native-image, используя -agentlib:native-image-agent т.е.
java -agentlib:native-image-agent=config-output-dir=/Users/mianahmad/goldeneye/json-processor/src/main/resources/META-INF/native-image -jar metadata-processor.jar -i /Users/mianahmad/goldeneye/json-processor/input/Claimant.json -o /Users/mianahmad/goldeneye/json-processor/output/Claimant_output.json
Шаг 2:
После этого я снова создал банку, а затем создал собственный образ.
native-image -jar app-1.0-SNAPSHOT-jar-with-dependencies.jar
После этого я переместил проект в другое место, используя
mv app-1.0-SNAPSHOT-jar-with-dependencies /Users/mianahmad/Desktop
Запустите бинарник и альт все еще работает
./app-1.0-SNAPSHOT-jar-with-dependencies
Похоже, что родной образ не может сгенерировать двоичный файл и возвращается в режим JVM. Попробуйте скомпилировать с помощью
--no-fallback, и сборка, скорее всего, не удастся.