Kotlin 类 servlet 引发 NoClassDefFoundError

标签 kotlin intellij-idea servlets

在我的 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 的标准库未包含在生成的 WAR 中(或者如果您运行分解的应用程序,则该库不在类路径中)。确保将其包含在您的构建中。

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

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

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

enter image description here

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

enter image description here

关于Kotlin 类 servlet 引发 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61713001/

相关文章:

android - 在 suspendCoroutine block 中调用挂起函数的适当方法是什么?

gradle - 在类型为org.gradle.api.internal.tasks.DefaultSourceSetContainer的SourceSet容器上找不到参数的方法srcDirs()

android - Android Kotlin将数据从Viewpager的基本 fragment 传递到其Tab fragment 之一

android - java.lang.RuntimeException:无法在单元测试中创建ViewModel类的实例

java - 如何插入模板来使用intellij idea编写代码

android - 在 Max OS X 上进行 packageDebug 时在 Android Studio 中启动错误的问题

java - Servlet 中的线程和并发

svn - Intellij Idea 13 SVN 访问Svn工作副本数据库

java - 客户端-服务器程序中逻辑的服务器端脚本编写方法

java servlet删除不重定向