IntelliJ + Maven + Tomcat中的Clojure Webapp

时间:2012-02-03 15:56:54

标签: tomcat maven clojure intellij-idea compojure

我正在使用Maven作为我的依赖管理器在IntelliJ中使用基于Compojure的Clojure Web应用程序。它基于我在git示例引用的this存储库中找到的应用程序。当我尝试使用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,由此产生的战争成功地部署并运行在tomcat。

原始文件结构如下:

/tracker-webapp  
    /classes
    /lib
    /resources
    /src
        /tracker
            /core.clj (and other *.clj files)
    /test
    project.clj

新的mavenized文件结构现在反映了前面提到的git repo中的示例:

/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,我只得到两个链接:/

1 个答案:

答案 0 :(得分:1)

您需要提前编译clojure命名空间tracker.core(AOT)。我不确定如何使用maven插件完成此操作,但它可以为您提供正确的方向。

确保命名空间中有gen-class声明:

(ns tracker.core
  ;; ...
  (:gen-class :extends javax.servlet.http.HttpServlet))

检查Intellij / Maven是否在目标目录中实际生成了文件tracker / core.class。