Prerequisites

Additional tools

The patch program is needed.

For Debian GNU / Linux and derivatives (as Ubuntu), install with

sudo apt install patch

On RPM yum style GNU / Linux systems, install with:

sudo yum install patch

On RPM dnf style GNU / Linux systems, install with:

sudo dnf install patch

On Windows you can find it in several distributions including GNUWin32

Building Syncope

Before building Syncope, you need to setup an environment variable to give Maven more memory.

On Unix with JDK 7

export MAVEN_OPTS="-Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m"

On Unix with JDK 8 or later

export MAVEN_OPTS="-Xms512m -Xmx1024m"

On Windows with JDK 7

set MAVEN_OPTS=-Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m

On Windows with JDK 8 or later

set MAVEN_OPTS=-Xms512m -Xmx1024m

To build Syncope simply execute (from within the top-level source directory):

$ mvn clean install

To build Syncope without running any test nor check do:

$ mvn -PskipTests,all

To build Syncope without running any test nor check, but generating Docker images, do:

$ mvn -PskipTests,all,docker

Code analysis

After build, it is possible to examine code quality by submitting the generated reports to a SonarQube instance. Various installation methods are available, but the quicker seems to be via Docker:
$ docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 sonarqube
Once SonarQube is up and runninig, submit the reports as follows:
$ mvn sonar:sonar
At the end, browse http://localhost:9000/dashboard?id=org.apache.syncope%3Asyncope to see results.

Building documentation

To build Syncope documentation execute (from within the top-level source directory):

$ mvn -N -P site clean generate-resources
The documentation artifacts are now be available under target/generated-docs/.

More build profiles

Besides default, other Maven build profiles are provided, for developer convenience.
Such profiles are limited to a specific module, hence Maven needs to be invoked from the corresponding subdirectory, not from top-level.

fit/core-reference

All integration tests

In order to keep the overall build time under acceptable time limits on average hardware, not all the available integration tests are run by default; in order to run them all, anyway, a specific build profile is provided.
$ mvn clean verify -Pfull-it,all

Other Content-Type values

By default, integration tests are run using application/json for both Accept and Content-Type HTTP headers; it is possible, however, to use application/xml or application/yaml.
$ mvn clean verify -DjaxrsContentType=application/xml
$ mvn clean verify -DjaxrsContentType=application/yaml

Debug

Starts the full environment used by integration tests (with same components available when running new project in embedded mode but console) and enables remote JPDA debugging on port 8000 in the running Java EE container (Tomcat).
$ mvn -Pdebug,all
or, without extensions
$ mvn -Pdebug

Once started in debug mode, individual test methods can be executed as follows (the Maven Surefire Plugins rules apply here):

$ mvn test -Dtest=UserITCase#list

HotSwapAgent

Similar to Debug, but with HotSwapAgent features enabled (requires DCEVM Java installed as "alternative JVM" and IDE of choice set up properly).
$ mvn -Photswap,all

DBMSes

The build profiles enlisted below require Docker to work.

PostgreSQL
Perform the full test suite against a real PostgreSQL database via
$ mvn -Ppostgres-it
MySQL
Perform the full test suite against a real MySQL database via
$ mvn -Pmysql-it
MariaDB
Perform the full test suite against a MariaDB database via
$ mvn -Pmariadb-it
Oracle database
After having set up the appropriate JDBC driver in your local Maven repository, perform the full test suite against a real Oracle database via
$ mvn -Poracle-it
MS SQL Server
Prform the full test suite against a real MS SQL Server database via
$ mvn -Psqlserver-it

Java EE containers

Glassfish
Perform the full test suite by deploying Syncope core in Glassfish via
$ mvn -Pglassfish-it
Payara
Perform the full test suite by deploying Syncope core in Payara via
$ mvn -Ppayara-it
Wildfly
Perform the full test suite by deploying Syncope core in Wildfly via
$ mvn -Pwildfly-it

Elasticsearch

This build profile require Docker to work.

Perform the full test suite relying on a real Elasticsearch instance via
$ mvn -Pelasticsearch-it

fit/console-reference

Debug

Starts the full environment used by core's integration tests (with same components available when running new project in embedded mode, including console) and enables remote JPDA debugging on port 8000 in the running Java EE container (Tomcat).
$ mvn -Pdebug

HotSwapAgent

Similar to Debug, but with HotSwapAgent features enabled (requires DCEVM Java installed as "alternative JVM" and IDE of choice set up properly).
$ mvn -Photswap

fit/enduser-reference

Debug

Starts the full environment used by core's integration tests (with same components available when running new project in embedded mode, including console and enduser) and enables remote JPDA debugging on port 8000 in the running Java EE container (Tomcat).
$ mvn -Pdebug

Once started in debug mode, the test cases can be executed as follows:

$ cd target/enduser-test && nodejs/node/node nodejs/bin/protractor protractor-conf.js
where the actual tests to be run can be selected by modifying the protractor-conf.js content.

HotSwapAgent

Similar to Debug, but with HotSwapAgent features enabled (requires DCEVM Java installed as "alternative JVM" and IDE of choice set up properly).
$ mvn -Photswap

ide/eclipse/bundles/org.apache.syncope.ide.eclipse.tests

Eclipse IDE Plugin

Starts the full environment used by core's integration tests (with same components available when running new project in embedded mode, and runs the Eclipse IDE plugin tests against it. Cannot run headless.
$ mvn -Peclipse-it