Apache Marmotta 
===============

This code repository is still working in progress for the importation of LMF 
into Marmotta.

For more information about the incubation status of the Marmotta project you
can go to the following page:

  http://marmotta.apache.org


1. Building the Source Distribution
-----------------------------------

Apache Marmotta uses Maven to build, test, and install the software. A basic
build requires downloading and installing Maven and then running:

mvn clean install

This will compile, package and test all Apache Marmotta modules and install
it in your local Maven repository. In case you want to build your own
projects based on some of the libraries provided by Apache Marmotta, this
usually suffices.

The default loglevel for most unit and integration tests executed during the
build is INFO. To change the loglevel for either more or less output, you
can pass the loglevel as system property:

mvn clean install -Droot-level=TRACE|DEBUG|INFO|WARN|ERROR

Note that some of the integration tests start up parts of the Marmotta
platform during execution. The log level for these tests cannot be
changed, as Marmotta is taking over the log configuration in these
cases.

2. Building, Running and Deploying the Wep Application
------------------------------------------------------

Apache Marmotta also includes a default configuration for building a Java
Web Application that can be deployed in any Java Application Server. To
build the web application, first run

mvn clean install

in the project root. Then change to the launchers/marmotta-webapp directory
and run

mvn package

This will create a marmotta.war file in the target/ directory. You can
deploy this archive to any Java Application Server by copying it into
its deployment directory. More details can be found on:

http://marmotta.apache.org/installation.html


Alternatively, you can directly startup the Apache Marmotta Web Application
from Maven with a default configuration suitable for development. To try this
out, run

mvn tomcat7:run

wait until the system is started up and point your browser to
http://localhost:8080

When developing it is sometimes useful to always start with a clean confi-
guration of the system. Therefore, you can also start up the web application
as follows:

mvn clean tomcat7:run -Pcleanall

This command will remove any existing configuration directory before startup.



3. Building the Standalone Installer
------------------------------------

The build environment also offers to automatically build an installer package
that guides users through the installation with an easy-to-use installation
wizard. The installer is based on izPack and dynamically assembled when
building the package. To build the installer, first run

mvn clean install

in the project root. Then change to the launchers/marmotta-installer directory
and run

mvn package -Pinstaller

The build process will automatically create an appropriate installer confi-
guration from the Maven dependencies through the Apache Marmotta refpack
build plugin.

The installer can then be tried out by running

java -jar target/marmotta-installer-x.x.x.jar


4. Building with a Clean Repository
-----------------------------------

Sometimes it is useful to check if the build runs properly on a clean local
repository, i.e. simulate what happens if a user downloads the source and
runs the build. This can be achieved by running Maven as follows:

mvn clean install -Dmaven.repo.local=/tmp/testrepo

The command changes the local repository location from ~/.m2 to the
directory passed as argument


5. Simulating a Release
-----------------------

To test the release build without actually deploying the software, we have
created a profile that will deploy to the local file system. You can
simulate the release by running

mvn clean deploy -Pdist-local,marmotta-release,installer

Please keep in mind that building a release involves creating digital
signatures, so you will need a GPG key and a proper GPG configuration to run
this task.
