首页 > 解决方案 > 如何从 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)上运行此项目时,我收到以下错误。

内部服务器异常 - Http 状态 500

NoClassDefFoundError:com/adv/zoo/web/model/auto/EngProvider 根本原因:java.lang.NoClassDefFoundError

ClassNotFoundException : com.adv.zoo.web.model.auto.EngProvider 根本原因:java.lang.ClassNotFoundException

注意:我已经在项目的构建路径中添加了 EngProvider 接口和 EngProviderImpl 类作为 jar,但它仍然显示此错误。我正在尝试调用 JAR 文件中的方法(添加到构建路径)

但是当我将项目作为 java 应用程序运行时,它运行良好。

我的项目结构:

我的项目结构

标签: javamavenjarjersey-2.0web.xml

解决方案


推荐阅读