Clojure Webapp в IntelliJ + Maven + Tomcat - PullRequest
       19

Clojure Webapp в IntelliJ + Maven + Tomcat

17 голосов
/ 03 февраля 2012

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

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

Кроме того, при просмотре файла web.xml IntelliJ не распознает класс сервлета (средство отслеживания).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:

/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>

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

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

1 Ответ

1 голос
/ 20 апреля 2013

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

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

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

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

...