在我的 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(尽管建议使用上述构建工具之一),请检查项目设置:
您应该会看到 Kotlin 的标准库包含在工件中:
关于Kotlin 类 servlet 引发 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61713001/