Пакет сборки Java Cloud Foundry - java: команда не найдена

Новинка в облачной индустрии, использующая пакет сборки java для распространения zip-архива приложения java. Он правильно определяет сценарий запуска, но когда сценарий запуска доходит до точки, в которой необходимо запустить jvm, я получаю эту ошибку:

bash: java: команда не найдена

Очевидно, «java» отсутствует на пути оболочки во время выполнения скрипта, и я нигде не нахожу определения JAVA_HOME.

Какой путь использовать для запуска приложений Java? Где это задокументировано?

ЛОЖНАЯ ТРЕВОГА

Большое спасибо @DanielMikusa за то, что он указал, что JAVA_HOME действительно установлен, даже в довольно старой версии пакета сборки, который использовался. Здесь нечего смотреть.

ИЗМЕНИТЬ №1

Мне удалось выяснить, что при запуске стартового скрипта jre находится в $PWD/.buildpack-java/oracle_jre. Но это не может быть тем, что я должен использовать для указания пути к JAVA_HOME, не так ли? Похоже, что это местоположение полностью зависит от текущей реализации пакета сборки Java. Похоже, что либо папка bin jre должна находиться в пути процесса запуска сценария, либо перед запуском сценария запуска должна быть установлена ​​переменная среды или другая конфигурация, чтобы я мог использовать это значение для поиска исполняемого файла java.

ИЗМЕНИТЬ №2

Ниже приведен вывод во время операции cf push:

PS E:\dev\hoobajoob\myproject\build\distributions> cf push -p .\my-service-1.0.0.zip my-service
Using manifest file E:\dev\hoobajoob\myproject\build\distributions\manifest.yml

Creating app my-service in org DEV / space dev as [email protected]...
OK

Creating route my-service.cflab.dctmlabs.com...
OK

Binding my-service.cflab.dctmlabs.com to my-service...
OK

Uploading my-service...
Uploading app files from: C:\Users\hoobajoob\AppData\Local\Temp\unzipped-app384867239
Uploading 9.7M, 9390 files
Done uploading
OK

Starting app my-service in org DEV / space dev as [email protected]...
Downloading oracle_buildpack_151...
Downloading binary_buildpack...
Downloading go_buildpack...
Downloading python_buildpack...
Downloading java-buildpack-offline-v3-19-2...
Downloaded java-buildpack-offline-v3-19-2
Downloading java-buildpack-offline-4-7...
...<more downloads>

Creating container
Successfully created container
Downloading app package...
Downloaded app package (53.1M)
Staging...
-----> Java Buildpack Version: v3.5.1 (offline) | https://github.com/cloudfoundry/java-buildpack.git#3abc3db
-----> Downloading Oracle JRE 1.8.0_112 from http://127.0.0.1/oracle-jre/trusty/x86_64/jre-8u112-linux-x64.tar.gz (found
 in cache)
       Expanding Oracle JRE to .java-buildpack/oracle_jre (2.3s)
-----> Downloading Open JDK Like Memory Calculator 2.0.1_RELEASE from https://download.run.pivotal.io/memory-calculator/
trusty/x86_64/memory-calculator-2.0.1_RELEASE.tar.gz (found in cache)
       Memory Settings: -Xms2304M -XX:MetaspaceSize=314572K -Xss1M -Xmx2304M -XX:MaxMetaspaceSize=314572K
-----> Downloading Spring Auto Reconfiguration 1.10.0_RELEASE from https://download.run.pivotal.io/auto-reconfiguration/
auto-reconfiguration-1.10.0_RELEASE.jar (found in cache)
Exit status 0
Staging complete
Uploading droplet, build artifacts cache...
Uploading droplet...
Uploading build artifacts cache...
Uploaded build artifacts cache (108B)
Uploaded droplet (120.5M)
Uploading complete
Destroying container
Successfully destroyed container

0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
1 of 1 instances running

App started


OK
App my-service was started using this command `CALCULATED_MEMORY=$($PWD/.java-buildpack/oracle_jre/bin/java-buildpack-memory-calculator-2.0.1_RELEASE -memorySizes=metaspace:64m.. -memoryWeights=heap:75,metaspace:10,native:10,stack:5 -memoryInitials=heap:100%,metaspace:100% -totMemory=$MEMORY_LIMIT) &&  JAVA_HOME=$PWD/.java-buildpack/oracle_jre JAVA_OPTS="-Djava.io.tmpdir=$TMPDIR -XX:OnOutOfMemoryError=$PWD/.java-buildpack/oracle_jre/bin/killjava.sh $CALCULATED_MEMORY" exec $PWD/my-service-1.0.0/bin/launch`

person Hoobajoob    schedule 09.01.2018    source источник
comment
Приложения Java должны быть упакованы в виде jar-архивов или архивов war и отправлены в облачный цех. Не в виде zip-архива.   -  person K.AJ    schedule 10.01.2018
comment
Это не единственный способ упаковки Java-приложений. См .: github.com/cloudfoundry/java-buildpack/ blob / master / docs /   -  person Hoobajoob    schedule 10.01.2018
comment
using the java buildpack to push a zip distribution of a java app Вы развертываете пакет сборки Java или приложение Java?   -  person K.AJ    schedule 10.01.2018
comment
Если вы хотите загрузить / заменить пакет сборки, выполните следующие действия - docs.cloudfoundry.org/adminguide/buildpacks .html   -  person K.AJ    schedule 10.01.2018
comment
Просто посмотрите spring-music или pcf-articulate. Это хорошие приложения для начинающих, и они дадут вам хорошее представление о том, как правильно упаковать и развернуть Java-приложение.   -  person K.AJ    schedule 10.01.2018
comment
Я использую пакет сборки java для отправки приложения Java. Приложение java не является приложением для весенней загрузки. Он соответствует требованиям для контейнера dist zip, но в документации ничего не говорится о том, где находится jre, который необходим для запуска приложения.   -  person Hoobajoob    schedule 10.01.2018
comment
Эти примеры проектов не помогают ответить на вопрос. Это развертывания с одним jar-файлом, которые не включают сценарии запуска, используемые с zip-дистрибутивами, и не иллюстрируют, как найти jre в контейнере приложения.   -  person Hoobajoob    schedule 10.01.2018
comment
Я думаю, вы путаете понятия. Java-приложение не обязательно должно быть приложением с весенней загрузкой для работы в облачной среде. If it has a main() method, then it can be run as self executable jar. Это означает, что если вы можете запускать локально как java -jar <jarname>, вы можете отправить архив в pcf и запустить его там. Ознакомьтесь с советами. Если это не веб-доступ, подавите создание маршрута.   -  person K.AJ    schedule 10.01.2018
comment
Позвольте нам продолжить это обсуждение в чате.   -  person K.AJ    schedule 10.01.2018
comment
Нет путаницы. Речь идет о сценариях запуска в dist zips, а не о других поддерживаемых типах приложений.   -  person Hoobajoob    schedule 10.01.2018
comment
Можете ли вы включить в свое приложение вывод постановки? Было бы полезно, если бы мы могли видеть, что делает JBP, когда ваше приложение проходит этапы. Спасибо!   -  person Daniel Mikusa    schedule 11.01.2018
comment
Хорошо, я отвечу на вопрос   -  person Hoobajoob    schedule 11.01.2018
comment
@DanielMikusa: добавлен промежуточный вывод из команды cf push   -  person Hoobajoob    schedule 11.01.2018
comment
@Hoobajoob - Какая команда запуска генерируется пакетом сборки? Вы его обрезаете прямо перед тем, как это будет нормально отображаться. Вы также используете чрезвычайно старую версию пакета сборки Java, вам следует попробовать использовать более новую. Я вижу, что на основе промежуточного вывода установлены последние, вам может просто нужно выбрать один из них с cf push -b <buildpack-name> вместо того, чтобы полагаться на автоматическое обнаружение, либо это, либо переключите порядок ваших сборочных пакетов, чтобы более свежий был выше в списке.   -  person Daniel Mikusa    schedule 12.01.2018
comment
@DanielMikusa - добавлена ​​команда запуска, которая, похоже, подтверждает то, что я нахожу. Итак, если я использую более поздний пакет сборки, будет ли java на пути, или JAVA_HOME будет определен после запуска сценария запуска?   -  person Hoobajoob    schedule 12.01.2018
comment
@Hoobajoob - Не уверен, что следую за тобой здесь. Я вижу, что JAVA_HOME устанавливается в команде: JAVA_HOME=$PWD/.java-buildpack/oracle_jre. Или вы вручную выставили команду запуска?   -  person Daniel Mikusa    schedule 12.01.2018
comment
Даже с 3.5.1 похоже, что сгенерированная команда запуска должна иметь установленный JAVA_HOME - ›github.com/cloudfoundry/java-buildpack/blob/v3.5.1/lib/   -  person Daniel Mikusa    schedule 12.01.2018
comment
@DanielMikusa: да! Ты совершенно прав. Должно быть, я внес неправильные изменения в сценарий запуска в неподходящее время после того, как посмотрел неправильные вещи в cf CLI. Спасибо!!   -  person Hoobajoob    schedule 12.01.2018


Ответы (1)


Написание комментариев выше на случай, если кто-то еще столкнется с этим вопросом.

  1. Мы рассмотрели полный вывод промежуточной подготовки и команды запуска, сгенерированные пакетом сборки Java.
  2. Мы могли видеть из команды запуска, сгенерированной пакетом сборки Java, что это ответственность команд запуска за установку JAVA_HOME.
  3. Если вы полагаетесь на пакет сборки Java для создания команды запуска для своих приложений в стиле dist-zip, он будет «делать правильные вещи» и добавьте переменную среды JAVA_HOME с правильным путем к команде запуска.
  4. Если вам нужно создать собственную команду запуска, вы обязаны правильно установить JAVA_HOME.
  5. Если вы cf ssh находитесь в приложении, запущенном пакетом сборки Java, вы обязаны установить JAVA_HOME.
person Daniel Mikusa    schedule 16.01.2018
comment
Как мне понять, что такое JAVA_HOME, учитывая, что github.com/cloudfoundry/java-buildpack установлен? - person Tanin; 04.06.2019
comment
Nvm. Я понял это. Это на .java-buildpack/open_jdk_jre. Путь печатается в журналах следующим образом: 2019-06-03T19:56:21.697-07:00 [STG/0] [OUT] Expanding Open Jdk JRE to .java-buildpack/open_jdk_jre [3m[32m(1.0s)[0m[23m - person Tanin; 04.06.2019