Как использовать разделяемую библиотеку в профиле websphere liberty - PullRequest
3 голосов
/ 16 января 2020

Это кажется простым, но ...

Я только начинаю изучать профиль свободы.

Я не могу использовать разделяемую библиотеку.

вот документация: https://www.ibm.com/support/knowledgecenter/SSD28V_liberty/com.ibm.websphere.wlp.core.doc/ae/cwlp_sharedlibrary.html

так на сервере. xml Я ставлю (и перезапускаю сервер), например:

<library>
    <folder dir="C:/libs/gson/"></folder>
    <!-- or even <file name="C:/libs/gson/gson-2.3.1.jar" /> -->
</library>

В любом случае во время выполнения я получаю: "java .lang.NoClassDefFoundError: com / google / gson / Gson "

На сервлете у меня только импорт и простое использование:

...    
import com.google.gson.Gson;
...

@WebServlet("/")
public class HelloWorld extends HttpServlet {
    ...

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // Serialization
        Gson gson = new Gson();
        ...

Чего мне не хватает?

Ответы [ 2 ]

6 голосов
/ 16 января 2020

Добавление элемента библиотеки в конфигурацию сервера не делает его автоматически доступным для приложений. Вам необходимо настроить приложение для доступа к библиотеке, например,

<application location="myapp.war">
  <classloader commonLibraryRef="gsonLib"/>
</application>

<library id="gsonLib">
    <file name="C:/libs/gson/gson-2.3.1.jar" />
</library>
5 голосов
/ 16 января 2020

Часть, которую вам не хватает, - это то, что приложение должно быть настроено для ссылки на библиотеку. Есть несколько способов сделать это:

  1. Используйте глобальную общую библиотеку, как описано здесь: https://www.ibm.com/support/knowledgecenter/SSEQTP_liberty/com.ibm.websphere.wlp.doc/ae/twlp_classloader_global_libs.html

Затем просто измените свой ID библиотеки для global, например:

<library id="global">
Дайте вашей библиотеке идентификатор и добавьте <classloader commonLibraryRef="..."/>, как описано в ответе @ njr
...