
Since you have the source, you'll probably want to know how to compile
it. 

Some of JSPWiki is in the form of JSP pages, so you don't need to
compile them: the JSP container will take care of that.  However,
there are a bunch of Java files, which you'll want to compile.

Requirements
============

You'll need the following programs:

- J2SDK 1.4 (I use the one from Sun Microsystems; I haven't tested any
  others.)
- Jakarta Ant 1.5 (available from http://jakarta.apache.org/ant)
- servlet API 2.2 (servlet.jar, available from Sun.)
- JUnit 3.7 (from www.junit.org, required for running tests)


Building
========

Ant is the build system.

Everything should Just Compile, when you say 'ant', assuming you have
everything in your path.  Most notably, you'll probably have to copy
the servlet.jar into either your $JAVA_HOME/jre/lib/ext, or to
JSPWiki/lib.

There are few targets:

ant dist   : builds a full distribution.
ant javadoc: builds the javadocs into doc/javadoc
ant compile: just the basic compile, thankyouverymuch
ant tests  : runs JUnit tests.
ant jar    : builds the JSPWiki.jar into build/

You can customize your compilation by changing the contents of the
build.properties -file, or better yet, make your own compilation
script where you override the build.properties-property.  For example,
to use your own build.properties-file called "my.properties", make a
small shell script and call it "my_build.sh":

#!/bin/sh
ant -Dbuild.properties=/path/to/my.properties



Directory structure
===================

'src' contains the source code (under com/ecyrd/jspwiki).

'src/webdocs' contains all the files that are published in the final
webapps directory, including all of the deployment files under
WEB-INF.

'src/wikipages' contains a number of ready-made Wikipages.  Feel free
to use them.

'tests' contains a number of tests which you can run by saying 'ant
tests'.  If any of them fail, you know you've broken something.

'etc' contains all configuration files.

'lib' contains all libraries that are required to run JSPWiki.  Note,
however, that to keep the archive size down, I haven't included them
in the source distribution.  You may need to copy them by hand from
somewhere, or the binary distribution.


Troubleshooting
===============

If you get compilation errors from "FileUtil14.java", check your Java 
environment.  JSPWiki requires SDK 1.4 to compile, even though it will
run happily on 1.3.

