我在 Eclipse 中运行 WebSphere Liberty 服务器时遇到问题。我正在使用 Eclipse 2019-09 R (4.13.0)、带有 Java EE 8 Web Profile (V19.0.0.11) 的 WAS Liberty 和 WebSphere Liberty Server Liberty Tools Eclipse 插件 (19.0.900.v20190912_1541)。我打算在上面的 Liberty 服务器上运行一个 Maven Web 项目,但无济于事。
我将 Liberty 运行时下载到了一个目录,并在 Eclipse 中配置了一个服务器来使用这个运行时。然后,我将 Web 项目作为资源添加到服务器。服务器似乎可以正常启动,但是,在尝试访问资源时,我看到了几个 java.lang.NoClassDefFoundError
异常。使用 WebSphere Liberty Server Liberty Tools 插件时,它不会将 WAR 文件发布到 Liberty 服务器,而是发布一个 XML 文件,该文件指向构成 WAR 文件的资源和依赖项。XML 位于usr/servers/<server_name>/apps
目录中,名称类似于app-name.war.xml
. XML 文件的内容非常稀疏:
<?xml version="1.0" encoding="UTF-8"?>
<archive>
<dir sourceOnDisk="/path/to/web/project/WebContent" targetInArchive="/"/>
<dir sourceOnDisk="/path/to/web/project/target/classes" targetInArchive="/WEB-INF/classes"/>
<dir sourceOnDisk="/path/to/web/project/target/test-classes" targetInArchive="/WEB-INF/classes"/>
</archive>
从上面看,服务器抛出异常的原因似乎很明显,因为它找不到所有资源。以前的旧版本 Eclipse、插件和 Liberty 的配置方式相同,但war.xml
文件包含对所有依赖项的引用:
<?xml version="1.0" encoding="UTF-8"?>
<archive>
<archive targetInArchive="/WEB-INF/lib/lib1.jar">
<dir sourceOnDisk="/path/to/workspace/lib1/target/classes" targetInArchive="/"/>
</archive>
<archive targetInArchive="/WEB-INF/lib/lib2.jar">
<dir sourceOnDisk="/path/to/workspace/lib2/target/classes" targetInArchive="/"/>
</archive>
...
<dir sourceOnDisk="/path/to/web/project/target/m2e-wtp/web-resources" targetInArchive="/"/>
<dir sourceOnDisk="/path/to/web/project/src/main/webapp" targetInArchive="/"/>
<dir sourceOnDisk="/path/to/web/project/target/classes" targetInArchive="/WEB-INF/classes"/>
<dir sourceOnDisk="/path/to/web/project/src/main/resources" targetInArchive="/WEB-INF/classes"/>
<file sourceOnDisk="~/.m2/repository/some-lib1.jar" targetInArchive="/WEB-INF/lib/some-lib1.jar"/>
<file sourceOnDisk="~/.m2/repository/some-lib2.jar" targetInArchive="/WEB-INF/lib/some-lib2.jar"/>
...
</archive>
有谁知道为什么在这个较新版本的 Liberty 和 Liberty Tools 插件中我没有发布所有依赖项?谢谢你的帮助。