首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >卸载java 18并安装java 11之后,运行一个基于Java引发的程序“错误:找不到libjava.so”

卸载java 18并安装java 11之后,运行一个基于Java引发的程序“错误:找不到libjava.so”
EN

Ask Ubuntu用户
提问于 2023-02-02 00:10:00
回答 1查看 102关注 0票数 0

我想在一个托管在Windows 10主机操作系统上的virtualbox VM上的Ubuntu22.04操作系统中运行一个基于Java11 (盖瑟弗)的程序。

因为我以前安装了Java 18 (我按照下面的步骤安装了Java 18),

1-通过以下本程序卸载Java 18

2-重新启动VM

3-通过运行

代码语言:javascript
复制
sudo apt update
sudo apt install openjdk-11-jdk

4-重新启动VM

但是,当我试图运行基于java的程序时,我得到了以下错误:

代码语言:javascript
复制
GEOSERVER DATA DIR is /usr/share/geoserver/data_dir
Error: could not find libjava.so
Error: Could not find Java SE Runtime Environment.

因此,我检查了我刚刚安装的java版本,然后我得到了

代码语言:javascript
复制
tommaso@tommaso-VirtualBox02:/usr/share/geoserver/bin$ javac -version
javac 11.0.17

tommaso@tommaso-VirtualBox02:/usr/share/geoserver/bin$ java -version
openjdk version "11.0.17" 2022-10-18
OpenJDK Runtime Environment (build 11.0.17+8-post-Ubuntu-1ubuntu222.04)
OpenJDK 64-Bit Server VM (build 11.0.17+8-post-Ubuntu-1ubuntu222.04, mixed mode, sharing)

因此,前面的java版本的卸载似乎并不顺利,并使事情变得一团糟,以致于之后的java 11安装无法正常工作。

我该怎么解决呢?

我会将问题排除在安装的程序中,因为土方根安装程序不涉及运行任何依赖于java版本的操作。

引发错误的文件-- startup.sh --的内容如下:

代码语言:javascript
复制
#!/bin/sh
set -o errexit
set -o nounset
IFS=$(printf '\n\t')
# -----------------------------------------------------------------------------
# Start Script for GEOSERVER
#
# $Id$
# -----------------------------------------------------------------------------
# Guard against misconfigured JAVA_HOME
if [ -n "${JAVA_HOME:-}" ] && [ ! -x "${JAVA_HOME}/bin/java" ]; then
  echo "The JAVA_HOME environment variable is set but JAVA_HOME/bin/java"
  echo "is missing or not executable:"
  echo "    JAVA_HOME=${JAVA_HOME}"
  echo "Please either set JAVA_HOME so that the Java runtime is JAVA_HOME/bin/java"
  echo "or unset JAVA_HOME to use the Java runtime on the PATH."
  exit 1
fi
# Find java from JAVA_HOME or PATH
if [ -n "${JAVA_HOME:-}" ]; then
  _RUNJAVA="${JAVA_HOME}/bin/java"
elif [ -n "$(command -v java)" ]; then
  _RUNJAVA=java
else
  echo "A Java runtime (java) was not found in JAVA_HOME/bin or on the PATH."
  echo "Please either set the JAVA_HOME environment variable so that the Java runtime"
  echo "is JAVA_HOME/bin/java or add the Java runtime to the PATH."
  exit 1
fi
if [ -z "${GEOSERVER_HOME:-}" ]; then
  #If GEOSERVER_HOME not set then guess a few locations before giving
  # up and demanding user set it.
  if [ -r start.jar ]; then
     echo "GEOSERVER_HOME environment variable not found, using current "
     echo "directory.  If not set then running this script from other "
     echo "directories will not work in the future."
     GEOSERVER_HOME="$(pwd)"
  else 
    if [ -r ../start.jar ]; then
      echo "GEOSERVER_HOME environment variable not found, using current "
      echo "location.  If not set then running this script from other "
      echo "directories will not work in the future."
      GEOSERVER_HOME="$(pwd)/.."
    fi
  fi 
  if [ -z "${GEOSERVER_HOME:-}" ]; then
    echo "The GEOSERVER_HOME environment variable is not defined"
    echo "This environment variable is needed to run this program"
    echo "Please set it to the directory where geoserver was installed"
    exit 1
  fi
  export GEOSERVER_HOME
fi
if [ ! -r "${GEOSERVER_HOME}/bin/startup.sh" ]; then
  echo "The GEOSERVER_HOME environment variable is not defined correctly"
  echo "This environment variable is needed to run this program"
  exit 1
fi
#Find the configuration directory: GEOSERVER_DATA_DIR
if [ -z "${GEOSERVER_DATA_DIR:-}" ]; then
    if [ -r "${GEOSERVER_HOME}/data_dir" ]; then
        export GEOSERVER_DATA_DIR="${GEOSERVER_HOME}/data_dir"
    else
        echo "No GEOSERVER_DATA_DIR found, using application defaults"
          GEOSERVER_DATA_DIR=""
    fi
fi
cd "${GEOSERVER_HOME}" || exit 1
if [ -z "${MARLIN_JAR:-}" ]; then
    MARLIN_JAR=$(find "$(pwd)/webapps" -name "marlin*.jar" | head -1)
    if [ "${MARLIN_JAR:-}" != "" ]; then
        MARLIN_ENABLER="-Xbootclasspath/a:${MARLIN_JAR}"
        RENDERER="-Dsun.java2d.renderer=org.marlin.pisces.MarlinRenderingEngine"
        export MARLIN_JAR MARLIN_ENABLER RENDERER
    fi
fi
echo "GEOSERVER DATA DIR is ${GEOSERVER_DATA_DIR}"
#added headless to true by default, if this messes anyone up let the list
#know and we can change it back, but it seems like it won't hurt -ch
IFS=$(printf '\n\t ')
exec "${_RUNJAVA}" ${JAVA_OPTS:--DNoJavaOpts} "${MARLIN_ENABLER:--DMarlinDisabled}" "${RENDERER:--DDefaultrenderer}" "-Djetty.base=${GEOSERVER_HOME}" "-DGEOSERVER_DATA_DIR=${GEOSERVER_DATA_DIR}" -Djava.awt.headless=true -DSTOP.PORT=8079 -DSTOP.KEY=geoserver -jar "${GEOSERVER_HOME}/start.jar"
EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2023-02-02 16:39:27

解出

与我所想的相反,问题是程序(盖瑟弗)生成了一个配置文件(/etc/default/geoserver),它在其中存储了安装的java版本

代码语言:javascript
复制
tommaso@tommaso-VirtualBox02:/etc/default$ cat geoserver
USER=tommaso
GEOSERVER_DATA_DIR=/usr/share/geoserver/data_dir
GEOSERVER_HOME=/usr/share/geoserver
JAVA_HOME=/usr/lib/jvm/java-18-openjdk-amd64
JAVA_OPTS="-Xms128m -Xmx512m"

由于该文件位于程序自己的文件夹之外,因此仅卸载和重新安装程序并不能解决问题。

为了解决这个问题,我遵循了本程序

票数 0
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1453058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档