1

我在 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 插件中我没有发布所有依赖项?谢谢你的帮助。

4

1 回答 1

1

您是如何将项目导入 Eclipse 的?我创建了一个简单的 Maven 战争项目,并使用现有 Maven 项目导入向导将其导入 Eclipse。然后我在我创建的服务器上运行它,它包含所需的依赖 jar:

<?xml version="1.0" encoding="UTF-8"?>
<archive>
    <dir sourceOnDisk="C:\home\work\maven\ServletJsonSample\target\m2e-wtp\web-resources" targetInArchive="/"/>
    <dir sourceOnDisk="C:\home\work\maven\ServletJsonSample\src\main\webapp" targetInArchive="/"/>
    <dir sourceOnDisk="C:\home\work\maven\ServletJsonSample\target\classes" targetInArchive="/WEB-INF/classes"/>
    <file sourceOnDisk="C:\Users\xxx\.m2\repository\org\json\json\20190722\json-20190722.jar" targetInArchive="/WEB-INF/lib/json-20190722.jar"/>
</archive>

您还可以尝试通过在服务器视图中双击服务器以打开服务器编辑器来禁用松散的应用程序,取消选中Run applications direct from the workspace并保存您的更改。或者你可以在你的 pom.xml 中启用它,在这种情况下删除行:<looseApplication>true</looseApplication>

于 2019-12-05T21:51:42.480 回答