在我的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。
行家相似:https://kotlinlang.org/docs/reference/using-maven.html。
如果使用纯IDEA(尽管建议使用上述构建工具之一,请检查项目设置:
您应该看到工件中包含了Kotlin的stdlib: