Приложение My Spring Boot 2.2.2 работает под управлением Websphere Liberty; он не распознает классы, которые включены в JAR-файлы, на которые ссылаются как на общие библиотеки.
Вот выборка из моих приложений. xml:
<server>
<featureManager>
<feature>webProfile-8.0</feature>
<feature>localConnector-1.0</feature>
<feature>jdbc-4.1</feature>
<feature>jndi-1.0</feature>
<feature>concurrent-1.0</feature>
</featureManager>
<library id="ImageDriver">
<fileset dir="/MY/lib/ImageDriver/" includes="*.jar" />
<file name="/MY/lib/ImageDriver/libImageDriver.so" />
</library>
<library id="Crypto">
<fileset dir="/MY/lib/Crypto/" includes="*.jar" />
<file name="/MY/lib/Crypto/libCryptography.so" />
</library>
<application id="ImageSystem" location="image-system-1.0.0.war" name="ImageSystem" type="war" autoStart="true">
<classloader commonLibraryRef="ImageDriver,Crypto" />
</application>
<applicationManager autoExpand="true"/>
<applicationMonitor updateTrigger="mbean"/>
</server>
При попытке запустить ImageSystem я получаю следующее исключение:
java.lang.IllegalStateException: Failed to introspect Class [com.my.image.server.ApplicationConfig]
from ClassLoader [com.ibm.ws.classloading.internal.AppClassLoader@27a75c]
...
Caused by: java.lang.NoClassDefFoundError: com.my.cryptography.CryptographyObject
...
Caused by: java.lang.ClassNotFoundException: com.my.cryptography.CryptographyObject
JAR который содержит «отсутствующий» класс CryptographyObject, находится в папке /MY/lib/Crypto/
. Я пробовал несколько решений, которые не решили проблему, в том числе:
- изменение разрешений для папок и файлов
- изменение
commonLibraryRef
на privateLibraryRef
- явное перечисление JAR как
file
в library
вместо части массива fileset
Класс по-прежнему отсутствует.
Когда я включаю JAR непосредственно в мою WAR, это позволяет его найти, но цель состоит в том, чтобы найти JAR как часть включенной библиотеки, потому что он связан с файлом драйвера .so, поэтому я не хочу включать его напрямую.
Что здесь происходит? Что-то не хватает, чтобы решить это?