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.