Работает ли GraalVM с командной строкой собственного образа с пользовательским classpath? - PullRequest
0 голосов
/ 14 апреля 2020

Я работаю над проектом, который в настоящее время состоит из 26 банок (+6, если мы посчитаем баночки только для тестирования). Мы хотим объединить их все в один исполняемый файл по соображениям производительности. Это на машине windows, с graalVM-ce-java11-20.0.0. Мы используем IntelliJ и Gradle. В настоящее время я просто пытаюсь придумать командную строку, которая работает даже немного, прежде чем я попытаюсь воспроизвести ее в Gradle. Gradle еще нет на картинке, поэтому нет соответствующего тега.

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

В настоящее время у меня есть все банки в graalvm / Папка Это должно сделать это легко, верно? Не так уж много.

Я пытаюсь собрать jar D, используя классы из (среди других мест), jar A. foo.bar.AP - первый класс, который он не может найти, который выбрасывает его или к резервной сборке.

Я пробовал относительный путь к каталогу: native-image -cp ./ -jar D

Я пробовал полный путь к каталогу: native-image -cp c:/foo/bar/baz -jar D

Я испробовал полный путь к указанному банку: native-image -cp c:/graalvm/bin/A.jar -jar D

Я перепробовал все псевдонимы для пути к классу:

  • native-image -cp ... -jar D
  • native-image -classpath ... -jar D
  • native-image --class-path ... -jar D

Я даже пытался добавить classpath к MANIFEST.MF D.jar через gradle's jar { manifest { attributes: ( "Class-Path": "..." ) } }. Это прямо рядом с рабочим атрибутом "Main-Class": "foo.bar.D.baz" в том же месте.

Я только что попал в один каталог, который native-image автоматически игнорирует (это собственная папка bin?) Давайте узнаем! Нет, это тоже не помогло.

Обратите внимание, что я не пробовал все возможные комбинации / перестановки здесь. --class-path с X, Y, но не с Z.

Что мне не хватает? Если бы кто-то мог опубликовать заведомо исправную командную строку (в идеале для windows), я был бы очень признателен.

1 Ответ

2 голосов
/ 15 апреля 2020

Первое, что нужно попробовать - заставить командную строку работать без native-image, просто используя обычный java.

Подобно тому, что делает java пусковые установки, native-image не поддерживает смешивание -jar и -cp если вы передадите -jar, он переопределит classpath, а аргумент -cp будет проигнорирован.

Вы избегаете использования -jar и просто передаете имя основного класса :

native-image -cp ...;D foo.bar.D.baz

(здесь я предполагаю, что D - это полный путь к вашему банку)

Атрибут Class-Path в JAR должен работать (в этом случае вы не не нужно передавать -cp), но вы должны быть осторожны с тем, как разрешаются пути в этом атрибуте: они будут разрешены относительно местоположения банки, содержащей атрибут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...