On Fri, Dec 11, 2009 at 11:51 AM, Sean Devlin <francoisdev...@gmail.com> wrote:
> While we're at it, how 'bout an EAR file?

Never encountered one of those before -- maybe that is a good thing! :)

After a little study, I was able to write a simple servlet, compile it
with Leiningen, and make a WAR using Maven. This might be no big news
to the Java literati in the audience, but it's all new to me. :)

I thought I'd share my notes here, in case anyone else is trying to do
the same thing. There is a copy of my work here:

http://github.com/gmfawcett/simplest

The basic recipe I followed is there, and for lazier readers it also
appears below.

Many thanks to yogthos' clojure-maven-examples, which answered many
questions (though it uses clojure-maven-plugin, and does not use
Leiningen):

http://github.com/yogthos/clojure-maven-examples

Best,
Graham


* Start a new project with Leiningen (I'm using Leiningen 1.0.1):

  $ lein new simplest

* Add your servlet. I put mine in 'src/simplest/servlet.clj':

  (ns simplest.servlet
      (:gen-class :extends javax.servlet.http.HttpServlet))

  (defn -doGet [this req resp]
       ...)

* Add your dependencies to the project file. I added
  [javax.servlet/servlet-api "2.5"].

* Set the :compile-path, so that the classfiles end up where Maven
  will expect to see them:

  (defproject simplest "1.0.0-SNAPSHOT"
     :compile-path "target/classes"
     ...)

* Compile it with Leiningen, to make sure there aren't any errors:

  $ lein compile
  [copy] Copying 3 files to /tmp/simplest/lib
  Compiling simplest
  Compiling simplest.servlet

* Add the web.xml file and whatever static resources you want under
  'src/main'. I added:

  src/main/webapp/WEB-INF/web.xml
  src/main/webapp/index.html

  My web.xml is basic:

   <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
        xmlns="http://java.sun.com/xml/ns/javaee";
        xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd";
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd";
        id="simplest"
        version="2.5">
     <display-name>Simplest Clojure Servlet</display-name>
     <servlet>
       <servlet-name>simplest</servlet-name>
       <servlet-class>simplest.servlet</servlet-class>
     </servlet>
     <servlet-mapping>
       <servlet-name>simplest</servlet-name>
       <url-pattern>/simplest/</url-pattern>
     </servlet-mapping>
     <welcome-file-list>
          <welcome-file>index.html</welcome-file>
     </welcome-file-list>
   </web-app>

* Make your POM file for Maven:

  $ lein pom
  Wrote pom.xml

* Generate the WAR file:

  $ lein compile; mvn war:war
  ....
  $ ls target/*.war
  target/simplest-1.0.0-SNAPSHOT.war

* QED!

* If you want, you can add a 'Jetty plugin' to your pom.xml. This
  will enable Maven to run your servlet(s) for you in a standalone Web
  server, for testing:

  Edit pom.xml: see
  
http://github.com/gmfawcett/simplest/commit/44d978c55ae02112647a743b6f957156787fba25

  $ lein compile; mvn jetty:run
  # visit your servlet at http://localhost:8080/

Lacking proper Leiningen/Maven integration, it's a good idea to always
call 'lein compile' before you run a Maven command.

Best,
Graham

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to