如何在 websphere liberty profile 中使用共享库

How to use shared library in websphere liberty profile

看似简单但是...

我才刚刚开始学习自由概况。

我无法使用共享库。

这是文档: https://www.ibm.com/support/knowledgecenter/SSD28V_liberty/com.ibm.websphere.wlp.core.doc/ae/cwlp_sharedlibrary.html

所以在 server.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"

在 servlet 上我只有导入和简单的使用:

...    
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();
        ...

我错过了什么?

将库元素添加到服务器配置不会自动使其可供应用程序使用。您需要配置应用程序才能访问该库,例如,

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

<library id="gsonLib">
    <file name="C:/libs/gson/gson-2.3.1.jar" />
</library>

您缺少的部分是应用程序需要配置为引用库。有几种方法可以做到这一点:

  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">
  1. 为您的图书馆提供一个 ID 并添加一个 <classloader commonLibraryRef="..."/>,如 @njr 的回答
  2. 中所述