Cucumber-JVM is a pure Java implementation of Cucumber that supports the following programming languages:
- Python (Jython interpreter)
- Ruby (JRuby interpreter)
Cucumber-JVM provides the following mechanisms for running Cucumber Features:
- Command Line
- JUnit (via IDE, Maven, Ant or anything that knows how to run JUnit)
Cucumber-JVM also integrates with the following Dependency Injection containers:
Downloading / Installation
Releases are published in Maven Central
Jar files can be browsed and downloaded from [Maven Central] or https://oss.sonatype.org/content/repositories/releases/info/cukes/ (New releases will show up here immediately, while it takes a couple of hours to sync to Maven Central).
Add a dependency in your POM:
<dependency> <groupId>info.cukes</groupId> <artifactId>cucumber-core</artifactId> <version>1.0.0.RC20</version> </dependency>
There are more jars available - add the ones you need. (TODO: A guide on how to pick the right jars needs to be written)
<dependency org="info.cukes" name="cucumber-core" rev="1.0.0.RC16"/>
Since the artifacts are released to Maven Central, the default Ivy configuration should pull them down automatically. Alternatively you can define your own resolver:
<ibiblio name="sonatype" m2compatible="true" usepoms="true" pattern="[organisation]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext]" root="https://oss.sonatype.org/content/repositories/releases"/>
There isn't any documentation yet apart from API docs. Documentation will be published before the final 1.0.0 release is ready. If you are adventurous, check out the examples, read the code and ask specific questions on the Cucumber mailing list.
TODO: Fix this. The Ivy build doesn't upload them yet.
You will find an example in Git under
examples. Before you can run any of them you need to build cucumber-jvm itself (see below).
You should now be able to run any of the examples simply by
cding into a directory and running
mvn clean integration-test.
Cucumber-JVM is built with Maven.
mvn clean install
This will generate some code (i18n step definition code for various backends), and you have to build from the command line once before you'll be able to compile it in an IDE.
File -> Open Project -> path/to/cucumber-jvm/pom.xml
.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 extenstion 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
- 4 Space indent (no tabs)
- 2 Space indent (no tabs)
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 rake
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
Fork the repository on Github, clone it and send a pull request when you have fixed something. Please commit each feature/bugfix on a separate branch as this makes it easier for us to decide what to merge and what not to merge.
This is a reminder to the developers:
First, replace versions in this file. Then make sure you have the proper keys set up - in your
~/.m2/settings.xml - for example:
<settings> <servers> <server> <id>cukes.info</id> <username>yourcukesinfouser</username> <privateKey>fullkeypath</privateKey> </server> <!-- See https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide --> <server> <id>sonatype-nexus-snapshots</id> <username>yoursonatypeuser</username> <password>TOPSECRET</password> </server> <server> <id>sonatype-nexus-staging</id> <username>yoursonatypeuser</username> <password>TOPSECRET</password> </server> </servers> </settings>
Then release everything:
mvn release:clean mvn --batch-mode -P release-sign-artifacts release:prepare -DautoVersionSubmodules=true -DdevelopmentVersion=1.0.0.RC21-SNAPSHOT mvn -P release-sign-artifacts release:perform