Apache Jena : Build from Source
===============================

It is not normally necessary to build from source. Apache Jena provides already-built maven artifacts, available from the central maven repositories.  

## Binaries

See http://jena.apache.org/download/

For most usage, there is no requirement to build from source. Use maven
or other build system that can download from the central repositories.

    <dependency>
       <groupId>org.apache.jena</groupId>
       <artifactId>apache-jena-libs</artifactId>
       <type>pom</type>
       <version>X.Y.Z</version>
    </dependency>

The latest Apache Jena Fuseki can be obtained via http://jena.apache.org/download/.

There is also a package of libraries for offline installation.

## Source

Building Jena requires a Java8 JDK, Maven 3, and a network connection.

### Obtain the source

You can get the current development code by cloning:

    git clone https://github.com/apache/jena/

or the Apache primary code repository for Jena:

    git clone https://git-wip-us.apache.org/repos/asf/jena.git

For the signed source of the latest release, go to:

http://apache.org/dist/jena/source/

with previous versions available at:

http://archive.apache.org/dist/jena/source/

These are the formal files that define an Apache Jena release.

### Build the source

Apache Jena uses maven as its build system.

    mvn clean install

A faster, but abbreviated, build of the main modules, including ARQ,
TDB, command line tools and Fuseki2.

    mvn clean install -Pdev

Once the whole of Jena has been built once, individual modules can be incrementally
built using maven in their module directory.

To quickly build the whole project, skipping tests (but building them because that's required) and skipping javadoc generation:

    mvn -DskipTests -Dmaven.javadoc.skip=true clean install

Build only a specific module (e.g. `jena-arq`) and its dependencies

    mvn -pl :jena-arq -am install

Also useful:

`-Drat.skip` Skips checking for license headers; useful during development.

## IDE setup

### Avoid multiple imports

To work with the Jena source in an IDE, it is only necessary to import modules
of interest.

When importing modules, avoid including modules twice. This happens when
including both a module and also its parent POM because the parent POM includes
the module within its directory tree.

This happens if the top level POM is included, as well as `jena-db` and
`jena-fuseki2` as well as `jena-extras` and `jena-jdbc`.

### Avoid output modules

Artifacts that provide shaded jars should not normally be imported,
such as `jena-fuseki-server`.

## Build Notes

The TDB tests on Microsoft Windows use a large amount of temporary disk space.
This is because databases can not be completely deleted until the JVM exits on
this operating system.
