【问题标题】:Not able to run Java code using shell script from Desktop folder in ubuntu ,but works from opt folder无法使用 ubuntu 中 Desktop 文件夹中的 shell 脚本运行 Java 代码,但可以从 opt 文件夹中运行
【发布时间】:2019-06-08 04:59:20
【问题描述】:

在 Ubuntu 机器上,我有一个文件夹,其中包含 shell 脚本文件、包含依赖 jar 的文件夹和 java 项目文件夹。

例如:主文件夹 -外壳脚本文件 -JAVA项目文件夹 -LIB 带有 jars 的文件夹

在 shell 脚本中,我将从MAIN-FOLDER 使用下面的行执行 shell 脚本:

/usr/lib/jvm/java-11-openjdk-amd64/bin/java -Xms2048m -Xmx2048m -cp lib/*:JAVA_PROJECT-FOLDER/target/* com.ivizsecurity.scanoptions.MainClass $HOST $PORT $MYSQL_USER $MYSQL_PASSWORD
status=$?

所以问题是每当我从 ubuntu 中的 opt 文件夹运行 shell 脚本时,它都可以正常工作,但是如果我尝试在桌面中复制相同的文件夹并执行,它会抛出以下错误。无法访问lib文件夹

Exception in thread "main" java.lang.NoSuchFieldError: REFLECTION
      at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.<init>(RuntimeModelBuilder.java:93)
      at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:464)
      at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:310)
      at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:146)
      at com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1169)
      at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:147)
      at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.base/java.lang.reflect.Method.invoke(Method.java:566)
      at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:288)
      at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:277)
      at javax.xml.bind.ContextFinder.find(ContextFinder.java:400)
      at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:721)
      at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:662)

请帮帮我。 提前致谢

【问题讨论】:

    标签: java shell


    【解决方案1】:

    请在 Ubuntu 中尝试以下命令。

    在 bash shell 中,键入以下命令。

    sudo chmod -r 777 /your main folder

    它会要求输入密码,输入密码。

    然后用sudo执行shell脚本,我的意思是sudo sh yourshellscript.sh

    【讨论】:

    • 我已经尝试过授予权限。但仍然没有工作。如果我检查 lib 文件夹,它会显示所有权限 drwxrwxrwx 2 ABC ABC 4096 Jun 5 07:21 lib。
    • 只有当我将 lib 路径修改为 opt/lib 时,它才会从桌面文件夹工作 例如:/usr/lib/jvm/java-11-openjdk-amd64/bin/java -Xms2048m -Xmx2048m -cp /opt/lib/:JAVA_PROJECT-FOLDER/target/com.ivizsecurity.abc.MainClass $HOST $PORT $MYSQL_USER $MYSQL_PASSWORD status=$?。我已将 lib/* 替换为 /opt/lib/*。但我不想参考 opt
    • 它通过 opt 工作,这意味着它具有完全访问权限。提供相同级别的访问权限,我的意思是 777 并尝试。运行 shell 脚本文件时,使用 sudo 运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    • 2021-09-13
    • 2018-01-01
    • 1970-01-01
    • 2015-08-11
    相关资源
    最近更新 更多