У меня есть 1 файл jar, который зависит от внешних файлов jar, я упаковал внешние файлы jar в свой файл jar и успешно могу запустить файл jar в Linux с помощью пользователя root.
У меня есть другой пользователь, у которого есть доступтолько в / user / bin и / proc.
Когда я запускаю jar-файл с помощью этого пользователя, я получаю сообщение об ошибке ниже:
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/text/RandomStringGenerator$Builder
Caused by: java.lang.ClassNotFoundException: org.apache.commons.text.RandomStringGenerator$Builder
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 9 more
Я не могу предоставить какой-либо другой доступ пользователю.Как решить вышеупомянутое исключение с таким же доступом.пользователь с ограниченными правами является владельцем jar и имеет полное разрешение для всей папки.
Я предоставляю jre в комплекте с jar и выполняю jar только с использованием этого jre.
sh файл дляЗапустите jare, как показано ниже:
#unzip jre if not exists
if [ ! -d "$PWD/jre" ]
then
unzip jre_64.zip
fi
#export java path
export PATH=$PWD/jre/bin:$PATH
#make all files executable
chmod 755 jre/bin/*
#run jar file
java -jar jarName.jar
Я не получил никакой ошибки при запуске sh file, Мой основной класс также выполнен (я подтвердил это, добавив журналы), но он не смог загрузить внешние jar.