我正在使用IntelliJ中的一个基于Compojure的Clojure web应用程序,使用Maven作为我的依赖项管理器。它基于我在this example引用的git存储库中找到的一个应用程序。当我尝试使用IntelliJ的Tomcat6配置运行应用程序时,每次都会失败,并出现Servlet异常:
javax.servlet.ServletException: Wrapper cannot find servlet class tracker.core or a class it depends on
另外,在查看web.xml时,IntelliJ无法识别servlet类(突出显示了tracker.core)。
下面是一些背景知识:
这个应用程序最初是作为一个客户的概念验证而构建的,由我最近离开公司的同事编写。除了过去两天在这个项目上的工作之外,我个人没有使用clojure的经验。使用Leiningen环服务器,我可以成功地让应用程序在jetty中运行。使用leiningen ring uberwar,生成的war成功地在tomcat中部署和运行。
原始文件结构如下:
/tracker-webapp
/classes
/lib
/resources
/src
/tracker
/core.clj (and other *.clj files)
/test
project.clj
新的mavenized文件结构现在反映了前面提到的git代码库中的示例:
/tracker-webapp
/src
/main
/clojure
/tracker
/core.clj (and other *.clj files)
/webapp
/WEB-INF
/web.xml
/pom.xml
我的web.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>Simple Clojure WebApp</display-name>
<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>tracker.core</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myservlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
其他资源
我本打算发布我在这一节中看过的其他资源,但由于我是Stack Overflow Newb,我只得到了两个链接:/
发布于 2013-04-21 02:53:13
您需要提前编译clojure名称空间tracker.core。我不确定如何使用maven插件来实现这一点,但它为您指明了正确的方向。
确保您的命名空间中有一个gen-class声明:
(ns tracker.core
;; ...
(:gen-class :extends javax.servlet.http.HttpServlet))
检查Intellij/Maven是否在目标目录中实际生成文件跟踪器/core.class。
https://stackoverflow.com/questions/9131525
复制相似问题