在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)
请帮帮我。 预先感谢
答案 0 :(得分:0)
请在Ubuntu中尝试以下命令。
在bash shell中,键入以下命令。
sudo chmod -r 777 /your main folder
<-按Enter
它将要求输入密码,输入密码。
然后使用sudo执行shell脚本,我的意思是sudo sh yourshellscript.sh
。