Почему Liberty не может найти классы для включенной библиотеки? - PullRequest
2 голосов
/ 28 января 2020

Приложение 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/. Я пробовал несколько решений, которые не решили проблему, в том числе:

  1. изменение разрешений для папок и файлов
  2. изменение commonLibraryRef на privateLibraryRef
  3. явное перечисление JAR как file в library вместо части массива fileset

Класс по-прежнему отсутствует.

Когда я включаю JAR непосредственно в мою WAR, это позволяет его найти, но цель состоит в том, чтобы найти JAR как часть включенной библиотеки, потому что он связан с файлом драйвера .so, поэтому я не хочу включать его напрямую.

Что здесь происходит? Что-то не хватает, чтобы решить это?

...