java - 如何从 jersey web 项目调用 jar 文件中的方法?
问题描述
我在 Eclipse IDE 中使用 jersey-quickstart-webapp 原型创建了一个 Maven 项目(eng_comparison)。
EngComparator.java
package com.zoo.web.eng.eng_comparison; import java.io.FileNotFoundException; import java.io.IOException; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import com.adv.zoo.web.model.auto.EngProvider; import com.adv.zoo.web.model.auto.EngProviderImpl; @Path("compare") public class EngComparator { public static String data = "safe"; @GET @Produces(MediaType.TEXT_PLAIN) public String fetchContent() throws FileNotFoundException, IOException, Throwable { EngProvider engProvider = new EngProviderImpl(); String content = engProvider.getEng(data); return content; } }
其中 EngProvider(interface) 和 EngProviderImpl(Class) 作为 jar 文件包含在项目中。
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>Jersey Web Application</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <init-param> <param-name>jersey.config.server.provider.packages</param-name> <param-value>com.zoo.web.eng.eng_comparison</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>Jersey Web Application</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app>
在 tomcat 服务器(9.0)上运行此项目时,我收到以下错误。
NoClassDefFoundError:com/adv/zoo/web/model/auto/EngProvider
ClassNotFoundException : com.adv.zoo.web.model.auto.EngProvider
注意:我已经在项目的构建路径中添加了 EngProvider 接口和 EngProviderImpl 类作为 jar,但它仍然显示此错误。我正在尝试调用 JAR 文件中的方法(添加到构建路径)
但是当我将项目作为 java 应用程序运行时,它运行良好。
我的项目结构:
解决方案
推荐阅读
- javascript - 尝试读取图像文件时,我不断从 Firebase 存储中收到 403
- java - 是否应该在 EDT 内声明键绑定?
- javascript - 使用 Axios 将对象从 React.js 发布到 PHP
- graphql - Apollo Client Mutation 使用 React 组件收到错误 400
- bash - zsh: command not found - 仅在我更改路径时有效,但在重新启动终端时,路径变回
- java - 爪哇 | 从文件中查找特定行
- amazon-web-services - EC2 实例在通过 Elastic Beanstalk 启动时开始自动关闭
- r - 用两列和 17 个观测值绘制条形图
- linux - 使用 Linux 和 Intel HD 进行 OpenGL 内存分析
- reactjs - 我无法使用带有 React、Ionic、Capacitor 的 googleAuth 登录