为什么不是所有资源都使用 WebSphere Liberty Tools for Eclipse 发布?
Why aren't all resources being published using WebSphere Liberty Tools for Eclipse?
我在 运行从 Eclipse 中连接 WebSphere Liberty 服务器时遇到问题。我正在使用 Eclipse 2019-09 R (4.13.0)、WAS Liberty with Java EE 8 Web Profile (V19.0.0.11) 和 WebSphere Liberty Server Liberty Tools Eclipse 插件 (19.0.900.v20190912_1541).我打算 运行 在上述 Liberty 服务器上创建一个 Maven Web 项目,但无济于事。
我将 Liberty 运行time 下载到一个目录,并在 Eclipse 中配置服务器以使用此 运行time。然后我将 Web 项目作为资源添加到服务器。服务器似乎启动正常,但是,在尝试访问资源时,我看到几个 java.lang.NoClassDefFoundError
异常。使用 WebSphere Liberty Server Liberty Tools 插件时,它不会将 WAR 文件发布到 Liberty 服务器,它只是发布一个 XML 文件,指向构成 [=26] 的资源和依赖项=] 文件。 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 插件中我没有发布所有依赖项吗?感谢您的帮助。
您是如何将您的项目导入 Eclipse 的?我创建了一个简单的 Maven war 项目并使用 Existing Maven Projects 导入向导将其导入 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\json190722\json-20190722.jar" targetInArchive="/WEB-INF/lib/json-20190722.jar"/>
</archive>
您也可以通过双击服务器视图中的服务器打开服务器编辑器来尝试禁用松散的应用程序,直接从工作区取消选中 运行 应用程序,并保存您的更改。或者您可以在 pom.xml 中启用它,在这种情况下删除行:<looseApplication>true</looseApplication>
.
我在 运行从 Eclipse 中连接 WebSphere Liberty 服务器时遇到问题。我正在使用 Eclipse 2019-09 R (4.13.0)、WAS Liberty with Java EE 8 Web Profile (V19.0.0.11) 和 WebSphere Liberty Server Liberty Tools Eclipse 插件 (19.0.900.v20190912_1541).我打算 运行 在上述 Liberty 服务器上创建一个 Maven Web 项目,但无济于事。
我将 Liberty 运行time 下载到一个目录,并在 Eclipse 中配置服务器以使用此 运行time。然后我将 Web 项目作为资源添加到服务器。服务器似乎启动正常,但是,在尝试访问资源时,我看到几个 java.lang.NoClassDefFoundError
异常。使用 WebSphere Liberty Server Liberty Tools 插件时,它不会将 WAR 文件发布到 Liberty 服务器,它只是发布一个 XML 文件,指向构成 [=26] 的资源和依赖项=] 文件。 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 插件中我没有发布所有依赖项吗?感谢您的帮助。
您是如何将您的项目导入 Eclipse 的?我创建了一个简单的 Maven war 项目并使用 Existing Maven Projects 导入向导将其导入 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\json190722\json-20190722.jar" targetInArchive="/WEB-INF/lib/json-20190722.jar"/>
</archive>
您也可以通过双击服务器视图中的服务器打开服务器编辑器来尝试禁用松散的应用程序,直接从工作区取消选中 运行 应用程序,并保存您的更改。或者您可以在 pom.xml 中启用它,在这种情况下删除行:<looseApplication>true</looseApplication>
.