【问题标题】:Kotlin class servlet provoke NoClassDefFoundErrorKotlin 类 servlet 引发 NoClassDefFoundError
【发布时间】:2020-08-26 00:11:53
【问题描述】:

在我的 IntelliJ IDE 中的示例 Java servlet 项目中,我在 Kotlin 中创建了这个类:

@WebServlet(name = "TwitterAPIServlet", description = "This is used to test the servlet api", urlPatterns = ["/twitterAPIServlet"])
class TwitterAPIServlet : HttpServlet() {
    @Throws(IOException::class)
    override fun doGet(req: HttpServletRequest, resp: HttpServletResponse) {

        // Print answer
        val out = resp.writer
        out.println("Request Done : </br>")
    }
}

当我试图用我的 .jsp 页面调用它时,我遇到了这个错误:

2020-05-10 15:30:34.218:WARN:oejs.HttpChannel:qtp60559178-27: /twitterAPIServlet
java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
    at main.java.co.rezo.api.internal.v1.TwitterAPIServlet.doGet(TwitterAPIServlet.kt)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)

当我在 Java 中尝试相同的代码时,它正在工作:

@WebServlet(
        name = "TwitterAPIServlet",
        description = "This is used to test the servlet api",
        urlPatterns = "/twitterAPIServlet")
public class TwitterAPIServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        PrintWriter out = resp.getWriter();
        out.println("Request Done : </br>");
    }
}

我该怎么做才能让我的 Kotlin 代码正常工作?

【问题讨论】:

    标签: kotlin intellij-idea servlets


    【解决方案1】:

    最有可能的问题是 Kotlin 的标准库未包含在生成的 WAR 中(或者如果您运行分解的应用程序,它不在类路径中)。确保将其包含在您的构建中。

    可以在官方示例存储库中找到 Gradle 的说明:kotlin-examples

    Maven 类似:https://kotlinlang.org/docs/reference/using-maven.html

    如果是纯 IDEA(尽管建议使用上述构建工具之一),请检查项目设置:

    您应该会看到工件中包含 Kotlin 的标准库:

    【讨论】:

      猜你喜欢
      • 2017-02-01
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-20
      • 2020-08-09
      相关资源
      最近更新 更多