Continuous Integration, and Continuous Deployment for Java¶
This guide will help you to build configuration for a Java project on Scrutinizer. Notice that, Scrutinizer automatically infers
your build configuration and test commands depending on your build system. If you have a specific set-up that does not follow the
standard practices, you can customize your own configuration by placing a
.scrutinizer.yml file in your project root folder.
Setup JDK and Tools¶
OpenJDK 8 is used in build environment. However Scrutinizer also support
Oracle JDK 8 if you have strict requirement for your build.
You can config it in your configuration:
build: environment: java: 'java-8-oracle'
It is also possible to tweak Java memory heap size:
build: environment: variables: _JAVA_OPTIONS: '-Xms512m -Xmx1024m'
Setup with SDKMAN¶
SDKMAN! is a tool for managing parallel versions of multiple Software Development Kits on most Unix-based systems. You can also setup JDK and tools with SDKMAN. Examples:
To setup a default version of JDK:
build: environment: sdkman: - java
To setup a specific version of JDK:
build: environment: sdkman: - [email protected]
To setup tools like
For more details about available Software Development Kits and versions supported by SDKMAN, please check SDKMAN! documentation.
As long as you use a common build system such as
Ant. Scrutinizer will automatically infer install commands based on your project build system.
For example, if you have a
pom.xml at the root of the project, it's automatically detected and Scrutinizer will infer command:
mvn clean compile
or if your project uses the
mvnw wrapper script:
./mvnw install -DskipTests=true -Dmaven.javadoc.skip=true -B -V
or if you would like to run your own scripts, you can add the configuration in your configuration:
build: nodes: my-tests: project_setup: override: - set-up.sh
Scrutinizer will automatically try to infer your test commands. We support running tests via
If you would like to run a customized test script, you can add them in your configuration:
build: nodes: my-tests: tests: override: - ./run-tests.sh
Scrutinizer also supports several coverage reports formats such as
as an example, the configuration of code coverage in your configuration would look like:
build: nodes: tests-with-coverage: tests: override: - command: mvn clean package coverage: file: '[path-to-coverage-reports]' format: 'jacoco'
If you have multiple commands that generate code coverage data, we will automatically take care of merging it.
Scrutinizer provides first-class support for deployment. Once all your tests have passed, it will automatically trigger deployment of your code. You can define deploy commands in your configuration file:
build: nodes: deploy: requires: - branch: master # you can use either the full branch name, - branch: /feature_.*/ # or a regular rexpression commands: - mvn deploy
If your build benefits from multiple CPU cores, you can currently request up to 8 CPUs for your build. Simply, add the following to your configuration:
build: nodes: my-tests: resources: cpus: 4
In order to speed up the future build, Scrutinizer automatically cached Maven local repository
.m2 for maven project
.gradle for gradle project and
.ivy2 for Apache Ivy project.
You can also customize configuration for caching, learn more in our Caching Reference.
For more informations about
build configuration, please check out Build Config Reference.