jscv: не удается найти файл библиотеки JVM

Когда я пытаюсь запустить демонстрационную реализацию jsvc, я получаю следующий вывод ошибки jsvc:

jsvc -cp ApacheDeamonDemo.jar -pidfile /mypath/pid.txt -outfile /mypath/log.txt -errfile /mypath/err.log net.example.deamon.DemoDeamon

Я получаю следующую ошибку:

Cannot find any VM in Java Home /Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home
Cannot locate JVM library file
Service exit with a return value of 1

На самом деле путь правильный. Поэтому я не понимаю, почему jsvc говорит мне это. Я использую Mac.

1 ответ

Почти пять лет спустя, так что, вероятно, слишком поздно, чтобы помочь первоначальному пользователю, но у меня была такая же проблема сегодня, пытаясь запустить jsvc с open-jdk-11 для AMD64, так что это может помочь кому-то позже.

Чтобы диагностировать проблему, я запустил jsvc с флагом --debug, и это сказало мне, что он задыхается от попытки найти libjvm.so. Я побежалfind /usr/lib/jvm/java-11-openjdk-amd64 -name libjvm.soи нашел его в /usr/lib/jvm/java-11-openjdk-amd64/lib/server/libjvm.so, но jsvc искал его в / usr / lib / jvm / java-11-openjdk-amd64 // lib /amd64/server/libjvm.so. Итак, я сделал это, а затем jscv заработал:

sudo mkdir /usr/lib/jvm/java-11-openjdk-amd64/lib/amd64
sudo ln -s /usr/lib/jvm/java-11-openjdk-amd64/lib/server /usr/lib/jvm/java-11-openjdk-amd64/lib/amd64/

Оказывается, проблема исправлена ​​в более поздних версиях jsvc. У меня возникла проблема с jsvc версии 1.0.6, которую вы получите, если запуститеapt install jsvcв Ubuntu 18.04. После того как я загрузил версию 1.2.0 commons-daemon src с Apache и сам скомпилировал jsvc, проблема решена, и символическая ссылка мне больше не нужна.

Не знаю, почему jsvc пытается найти все файлы dylib и загрузить их с помощью dlopen, но, очевидно, это не очень хорошо работает с выпуском Java от Apple. Хотя исправить jsvc не так уж сложно, я просто сам запустил JVM,

export JAVA_HOME=$(/usr/libexec/java_home)
export CATALINA_HOME=/Users/rong/Projects/apache-tomcat-8.0.12
export CATALINA_BASE=$CATALINA_HOME

java \
    -server \
    -classpath $CATALINA_HOME/bin/bootstrap.jar:$CATALINA_HOME/bin/tomcat-juli.jar \
    -Dcatalina.home=$CATALINA_HOME \
    -Dcatalina.base=$CATALINA_BASE \
    -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager \
    -Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties \
    org.apache.catalina.startup.Bootstrap \
    > $CATALINA_BASE/logs/catalina.out \
    2> $CATALINA_BASE/logs/catalina.err

Обернув это в скрипт bash и добавив немного разветвления, изменив UID, вы можете полностью забыть о jsvc.

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