Skip to content


Subversion checkout URL

You can clone with
Download ZIP
tree: e7b0546320
Fetching contributors…

Cannot retrieve contributors at this time

140 lines (98 sloc) 4.148 kB

Notes for developers

Building Cucumber-JVM

Cucumber-JVM is built with Maven.

mvn clean install

IDE Setup

IntelliJ IDEA

File -> Open Project -> path/to/cucumber-jvm/pom.xml

Your .feature files must be in a folder that IDEA recognises as source or test. You must also tell IDEA to copy your .feature files to your output directory:

Preferences -> Compiler -> Resource Patterns -> Add `;?*.feature`

If you are writing step definitions in a scripting language you must also add the appropriate file extension for that language as well.


Just load the root pom.xml


To hack on Cucumber-JVM you need a JDK, Maven and Git to get the code. You also need to set your IDE/text editor to use:

  • UTF-8 file encoding
  • LF (UNIX) line endings
  • No wildcard imports
  • Curly brace on same line as block
  • 4 Space indent (no tabs)
    • Java
    • XML
  • 2 Space indent (no tabs)
    • Gherkin

Please do not add @author tags - this project embraces collective code ownership. If you want to know who wrote some code, look in git. When you are done, send a pull request. If we get a pull request where an entire file is changed because of insignificant whitespace changes we cannot see what you have changed, and your contribution might get rejected.

Running cross-platform Cucumber features

All Cucumber implementations (cucumber-ruby, cucumber-jvm, cucumber-js) share a common set of Cucumber features to ensure all implementations support the same basic features. To run these you need to clone the cucumber-tck repo into your cucumber-jvm working copy:

git submodule update --init

Now you can run the cross-platform Cucumber features:

gem install bundler
bundle install


Below are some common problems you might encounter while hacking on Cucumber-JVM - and solutions.

IntelliJ Idea fails to compile the generated I18n Java annotations

This can be solved by changing the Compiler settings: Preferences -> Compiler -> Java Compiler:

  • Use compiler: Javac in-process (Java6+ only)
  • Additional command line parameters: -target 1.6 -source 1.6 -encoding UTF-8


This is a reminder to the developers:

First, make sure you have the proper keys set up - in your ~/.m2/settings.xml - for example:

    <!-- See -->

Replace version numbers in:

  • examples/java-helloworld/build.xml
  • examples/java-helloworld/pom.xml
  • (this file)

Run git commit -am "Release X.Y.Z"

Now release everything:

mvn release:clean
mvn --batch-mode -P release-sign-artifacts release:prepare -DautoVersionSubmodules=true -DdevelopmentVersion=1.1.2-SNAPSHOT
mvn -P release-sign-artifacts release:perform

Post release the API docs must be generated for each module and manually copied over to a working copy of the which must be a sibling of cucumber-jvm (this repo):


After that's done, commit and push

Code Coverage

Code coverage is collected mainly to identify code that can be deleted or needs to be tested better. To generate a report, run:

COBERTURA_HOME=/some/where ./

This technique to collect coverage for a multi-module Maven project is based on a blog post by Thomas Sundberg.

Jump to Line
Something went wrong with that request. Please try again.