无法从Ubuntu的Desktop文件夹中使用Shell脚本运行Java代码,但可以从opt文件夹中运行

时间:2019-06-08 04:59:20

标签: java shell

在Ubuntu计算机上,我有一个文件夹,其中包含外壳脚本文件,具有依赖项jar的文件夹和java项目文件夹。

例如:主文件夹           -外壳脚本文件           -JAVA项目文件夹           -带有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)

请帮帮我。 预先感谢

1 个答案:

答案 0 :(得分:0)

请在Ubuntu中尝试以下命令。

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

sudo chmod -r 777 /your main folder <-按Enter

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

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