Подтвердить что ты не робот

Clojure Webapp в IntelliJ + Maven + Tomcat

Я работаю с основанным на Compojure веб-приложением Clojure в IntelliJ, используя Maven в качестве менеджера зависимостей. Он основан на приложении, которое я нашел в этом git, на который ссылается этот пример. Когда я пытаюсь запустить приложение с использованием конфигурации IntelliJ Tomcat6, он терпит неудачу каждый раз при цитировании исключения сервлета:

javax.servlet.ServletException: Wrapper cannot find servlet class tracker.core or a class it depends on

Кроме того, глядя на web.xml, IntelliJ не распознает класс сервлета (выделяется tracker.core).

Немного фона:

Это приложение изначально было построено как доказательство концепции для клиента и написано моим коллегой, который недавно покинул компанию. У меня лично нет опыта работы с Clojure после работы над этим проектом в течение последних двух дней. Используя сервер звонков Leiningen, я могу успешно запустить приложение в причале. Используя 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>

Другие ресурсы

Я собирался опубликовать другие ресурсы, которые я просмотрел в этом разделе, но поскольку я - Qaru Newb, я получаю только две ссылки:/

4b9b3361

Ответ 1

Вам необходимо скомпилировать ваше пространство имен clojure tracker.core с опережением времени (AOT). Я не уверен, как это делается с плагином maven, но это дает вам правильное направление.

Убедитесь, что у вас есть объявление gen-класса в вашем пространстве имен:

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

Убедитесь, что Intellij/Maven фактически создает файл-трекер/core.class в целевом каталоге.