tomcat - IntelliJ + Maven + Tomcat 中的 Clojure Webapp

标签 tomcat maven clojure intellij-idea compojure

我正在 IntelliJ 中使用基于 Compojure 的 Clojure Web 应用程序,使用 Maven 作为我的依赖项管理器。它基于我在此 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 环形服务器,我可以成功地让应用程序在码头中运行。使用leiningen ring uberwar,生成的war在tomcat中成功部署运行。

原始文件结构如下所示:

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

新的 mavenized 文件结构现在反射(reflect)了前面提到的 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 新手,我只获得了两个链接:/

最佳答案

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

确保您的命名空间中有一个 gen-class 声明:

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

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

关于tomcat - IntelliJ + Maven + Tomcat 中的 Clojure Webapp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9131525/

相关文章:

mysql - Hibernate - Tomcat - MySQL 问题

maven - Gradle publishPubNamePublicationToRepoNameRepository 失败,出现 "Could not get resource [...] maven-metadata.xml"

list - 在 Clojure 中访问列表中的 map

clojure - 在 Compojure 中将字节数组转换为 json

java - 关于java(Quartz)调度的初学者问题

gwt - war 文件中的 Maven Artifact 版本号

apache - 在 Tomcat 上托管 apache camel 项目

java - 使用系统属性和静态字段迁移到 Maven 时,JUnit 类加载器出现问题

java - 运行不同版本 Tomcat 的 Tomcat 7 Maven 插件

clojure - 开发 "model"用于 clojurescript/clojure 应用程序