Giter VIP home page Giter VIP logo

gradle-cucumber-plugin's Introduction

Download

Gradle Cucumber Plugin

![Cucumber Logo] (https://cucumber.io/images/cucumber-logo.svg)

The gradle cucumber plugin provides the ability to run cucumber acceptance tests directly from a gradle build. The plugin utilizes the cucumber cli provided by the cucumber-jvm project and should support any of the languages utilized in cucumber-jvm.

(Currently only tested with Java, Groovy, and JRuby more coming soon!)

Contributors

Using the plugin in your gradle build script

From v0.7 on

To use in Gradle 2.1 and later…

      plugins {
        id "com.github.samueltbrown.cucumber" version "0.9"
      }

To use in earlier versions of Gradle…

      buildscript {
        repositories {
          jcenter()
        }
        dependencies {
          classpath "com.github.samueltbrown:gradle-cucumber-plugin:0.9"
        }
      }
      
      apply plugin: "com.github.samueltbrown.cucumber"

Before v0.7

You can apply the plugin using the following buildscript:

  apply plugin: 'cucumber'

  buildscript {
      repositories {
          mavenCentral()
      }

      dependencies {
          classpath 'com.github.samueltbrown:gradle-cucumber-plugin:0.6'
      }
  }

Older versions can be downloaded directly from GitHub like so;

  buildscript {
      apply from: 'https://github.com/samueltbrown/gradle-cucumber-plugin/raw/master/repo/gradle-cucumber-plugin/gradle-cucumber-plugin/0.3/cucumberinit.gradle'
  }

Running the Tests only

Once the plugin has been applied, the project dependencies need to be updated with the cucumber-jvm jar file needed for your language. Below 'groovy' is the chosen language.

  dependencies {

    ...

  	cucumberRuntime 'info.cukes:cucumber-groovy:1.2.2'

  }

Building and Running the Tests

If you have a src/cucumber source set (similar to src/test), the plugin will automatically detect it and setup Java tasks and configurations for you. The "cucumber" code unit depends on "test", the same way "test" depends on "main". Also, choose your library dependencies:

  dependencies {

  	cucumberCompile 'info.cukes:cucumber-groovy:1.2.2'

  }

Write your feature files under src/cucumber/resources.

Available Tasks

Currently the plugin only supports one task to run your cucumber tests:

  > gradle cucumber

Cucumber Task Configuration

The cucumber task has several configurable properties:

  • formats: A list of output formats. (Defaults to pretty)
  • glueDirs: A list of directories where stepdefs and supporting code are located (Defaults to src/test/java)
  • featureDirs: A list of directories where feature files are located.(Defaults to src/test/resources)
  • tags: a list of the tags of the scenarios to run (['@a,~@b', '@c'] reads as (@a OR NOT @b) AND @c)
  • monochrome: A boolean value indicating if console output should be one color. (Defaults to false)
  • strict: A boolean value indicating whether scenarios should be evaluated strictly. (Defaults to false)
  • dryRun: A boolean value indicating whether scenarios should be run as a dry run. (Defaults to false)
  • jvmOptions {}: a DSL block configuring the spawned process. Options are the same as for JavaExec.
  • ignoreFailures: A boolean value indicating whether failures from the cucumber runner should be ignored or not. Defaults to false

Example task configuration

cucumber {
    formats = ['pretty','json:build/cucumber.json','junit:build/cucumber.xml']
    glueDirs = ['src/test/resources/env',
                'src/test/resources/support',
                'src/test/resources/step_definitions']
    featureDirs = ['src/test/resources/features']
    tags = ['@billing', '@important']
    monochrome = false
    strict = false
    dryRun = false
    ignoreFailures = false
    
    jvmOptions {
      maxHeapSize = '512m'
      environment 'ENV', 'staging'
    }
}

Prerequisites

You must use Cucumber version 1.1.6 or higher.

Release Notes

v0.9

  • Minimum Gradle version is now 2.0
  • Uses the --plugin rather than --format arg for the cucumber runner when using cucumber-jvm 1.2.+
  • Introduces ignoreFailures convention for test running.

v0.8

  • Cucumber is now executed as a separate process using an underlying JavaExec task.

v0.7.2

  • Fixed support of Java 1.6/1.7

v0.7.1

  • Dependency on specific version of Cucumber now has a provided scope.

v0.7

  • Minimum Cucumber version is now 1.1.6.
  • Fixed support of multiple tags.
  • Fixed execution on Windows

v0.6

  • Windows support
  • Idea integration: Cucumber source dirs automatically added to modules with test scope

Coming Soon

  • Automatic dependency retrieval and default glue dirs for each jvm language
  • Simplified task configuration
  • Command-line arguments to override task configuration

Contributing

As you would expect, clone, push to GitHub and create a pull request for us to review and merge.

Make sure you are using jdk 1.6 when running tests (jenv is our friend here).

Pushing to Maven Central

  ./gradlew \
    -Psigning.secretKeyRingFile=path/to/ring.gpg \
    -Psigning.keyId=GPG_KEYID \
    -Psigning.password=$GPG_PASS \
    -PsonatypeUsername=$SONATYPE_USER \
    -PsonatypePassword=$SONATYPE_PASS \
    clean uploadArchives

It is possible to save some or all of those properties to ~/.gradle/gradle.properties.

gradle-cucumber-plugin's People

Contributors

notmattlucas avatar olliefreeman avatar pbellchambers avatar samueltbrown avatar sghill avatar sixrq avatar tomdcc avatar tzachz avatar viphe avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gradle-cucumber-plugin's Issues

Deploy to maven central

Wondering if this is on the road map? This is important to me because all external dependencies in my company have to come through a maven repository (preferably maven central). I think many people will be reluctant to apply a build script directly from github.

Threads aren't released

The threads for each feature are not released after execution. This results in a Exception in the following exception:

thread "Exec Default Executor" java.lang.OutOfMemoryError: unable to create new native thread

This happens when the approximately 2040 threads are allocated to the java proces on my MacBook with 16 Gb of memory. This problem would be solved by releasing threads after each feature is completed.

Second tag throws an error

When I use a second ANDed tag in the tags parameter as in:

tags = ['@DUC', '@development']

an exception is thrown. A single tag works fine.

Exception:

  • What went wrong:
    Execution failed for task ':duc:plum-duc-test-parent:plum-duc-tests:cucumber'.

    Not a file or directory: C:\p4\nemo\plum720\sw\01.0\dev\baseline\test\duc\plum-duc-test-parent\plum-duc-tests@development

  • Try:
    Run with --info or --debug option to get more log output.

  • Exception is:
    org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':duc:plum-duc-test-parent:plum-duc-tests:cucumber'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:289)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:86)
    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61)
    at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
    at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:67)
    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:54)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:166)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:113)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:81)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:64)
    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)
    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:35)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
    at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:50)
    at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:171)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:201)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:174)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:170)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:139)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
    at org.gradle.launcher.Main.doAction(Main.java:46)
    at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
    at org.gradle.launcher.Main.main(Main.java:37)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:50)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:32)
    at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
    Caused by: java.lang.IllegalArgumentException: Not a file or directory: C:\p4\nemo\plum720\sw\01.0\dev\baseline\test\duc\plum-duc-test-parent\plum-duc-tests@development
    at cucumber.runtime.io.FileResourceIterator$FileIterator.(FileResourceIterator.java:54)
    at cucumber.runtime.io.FileResourceIterator.(FileResourceIterator.java:20)
    at cucumber.runtime.io.FileResourceIterable.iterator(FileResourceIterable.java:19)
    at cucumber.runtime.model.CucumberFeature.load(CucumberFeature.java:51)
    at cucumber.runtime.model.CucumberFeature.load(CucumberFeature.java:33)
    at cucumber.runtime.RuntimeOptions.cucumberFeatures(RuntimeOptions.java:143)
    at cucumber.runtime.Runtime.run(Runtime.java:107)
    at cucumber.api.cli.Main.run(Main.java:26)
    at cucumber.api.cli.Main.main(Main.java:16)
    at com.excella.gradle.cucumber.CucumberRunner.runCucumberTests(CucumberRunner.java:74)
    at com.excella.gradle.cucumber.CucumberRunner$runCucumberTests.call(Unknown Source)
    at com.excella.gradle.cucumber.tasks.CucumberTask.executeCucumberRunner(CucumberTask.groovy:122)
    at com.excella.gradle.cucumber.tasks.CucumberTask.cucumber(CucumberTask.groovy:50)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:219)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:212)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:201)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:533)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:516)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
    ... 43 more

Invoking the cucumber task terminates the build process prematurely

In the CucumberRunner, cucumber is invoked using cucumber.api.cli.Main.main(). The implementation invokes System.exit() at the end of the method. This terminates the gradle build process, making it impossible to run the cucumber task in the middle of a build and messing up the terminal on exit.

Looking at the code it seems like more things could be streamlined by pulling the implementation from the cucumber.api.cli.Main class into the plugin.

I can try my hand at a pull request, if you're interested.

deprecated usage of `--format` option

When executing gradle cucumber the following warning is printed:

WARNING: Cucumber-JVM's --format option is deprecated. Please use --plugin instead.

Using with Spock for Groovy 2.0+ breaks the build

Thanks for making this available! When I disable Spock, it works perfectly.

Adding this dependency with the Cucumber plugin enabled breaks the build. I'm guessing this would be the case for any dependency that doesn't work with Groovy 1.8.

    testCompile 'org.spockframework:spock-core:0.7-groovy-2.0'

Causes:

Execution failed for task ':cucumber'.
> startup failed:
  Could not instantiate global transform class org.spockframework.compiler.SpockTransform specified at jar:file:/home/cgarvey/.gradle/caches/modules-2/files-2.1/org.spockframework/spock-core/0.7-groovy-2.0/4de0b428de0c14b6eb6375d8174f71848cbfc1d7/spock-core-0.7-groovy-2.0.jar!/META-INF/services/org.codehaus.groovy.transform.ASTTransformation  because of exception org.spockframework.util.IncompatibleGroovyVersionException: The Spock compiler plugin cannot execute because Spock 0.7.0-groovy-2.0 is not compatible with Groovy 1.8.6. For more information, see http://versioninfo.spockframework.org
  Spock location: file:/home/cgarvey/.gradle/caches/modules-2/files-2.1/org.spockframework/spock-core/0.7-groovy-2.0/4de0b428de0c14b6eb6375d8174f71848cbfc1d7/spock-core-0.7-groovy-2.0.jar
  Groovy location: file:/home/cgarvey/.gradle/wrapper/dists/gradle-1.10-all/6vpvhqu0efs1fqmqr2decq1v12/gradle-1.10/lib/groovy-all-1.8.6.jar

Java8 and TestNG Support

Is it possible to use this with Java 8 lambdas and TestNG? Did not find it in the docs, but Cucumber should support this. I will try to figure it out, but thought you may be quicker, since you wrote the plugin.

Any help much appreciated!

cucumber task configuration appears to be global rather than per-project?

in a multi-project build.gradle
i.e.,

project(':projectA') {
  cucumber {
    tags = ['@billing', '@important']
  }
}

project(':projectB') {
  cucumber {
    tags = ['@logging']
  }
}

the gradle-cucumber-plugin appears to treat the cucumber { ... } task configuration as global and so the second block overrides the first and any configuration (e.g., the @logging tag in this case) is applied to the CLI argument for both projects

Follow Java conventions

  • Load src/test/resources/<static files>, not src/main/resources/<static files>
  • Keep features and step definitions in src/test/cucumber/ and src/test/java respectively

Following these conventions avoids a lot of confusion and manual configuration. For example, step definitions that reference Hamcrest matchers fail to compile with test-context dependency hamcrest-library, forcing users to awkwardly specify hamcrest-library as a main (deployed dependency).

The latest project distributables does not exist in Maven Central

The build script from the project description cannot be applied, since gradle-cucumber-plugin:0.6 wasn't pushed to the artifact repository.

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.github.samueltbrown:gradle-cucumber-plugin:0.6'
    }
}

It is critical, because the previous available version (0.5) does not work on WIndows. As a temporary work-around I used the following buildscript:

buildscript {
    repositories {
        maven {
            name 'oss-sonatype'
            url 'https://oss.sonatype.org/content/repositories/staging/'
        }
        mavenCentral()
    }

    dependencies {
        classpath 'com.github.samueltbrown:gradle-cucumber-plugin:0.6'
    }
}

Spoon + Cucumber

Is possible make this plugin be compatible with spoon ? thank you

testRuntime and cucumber

Hi,
I have a gradle project using the cucumber plugin that has a testRuntime dependency like this:

dependencies {
  testCompile project(':projectA')
  testRuntime project(':projectB')
}

in projectB there are a number of classes and resources that are only required at runtime. Unfortunately the jars for these projects are not build when I run the cucumber task, resulting in resources not being found etc.

How do I go about fixing this? Am I doing something wrong or is it a bug?

Thanks in advance!

Groovy Steps

Hello,

I have my groovy steps in src/test/resources/step_definitions and specified the glue dir:

cucumber {
glueDirs = ['src/test/resources/step_definitions']
}

but I've got:
Execution failed for task ':cucumber'.

startup failed:
PermissionSteps.groovy: 1: unable to resolve class model.Permission
@ line 1, column 1.
import model.Permission
^

Even though the Permission class is in build/classes/main/model.

What am I missing?

Backward compatibility with earlier cucumber versions

The current implementation only supports cucumber v1.1.5, and moreover - displays confusing error messages for non-compatible versions.
I suggest either to support some backward compatibility, or assist users by displaying an indicative message.

Some more details:
For versions < 1.1.0, the displayed error message is "No backends were found. Please make sure you have a backend module on your CLASSPATH", because the backend implementations changed package and therefore can't be located by reflection.

For versions 1.1.0 to 1.1.4, an "InvocationTargetException" is thrown.

Thanks!

Logback

Hello,

I've been trying to get the gradle cucumber plugin to work alongside logback and I'm struggling. I have a logback.xml file in my project.

When running tests locally in my IDE (not using plugin), Cucumber seems happy to read the logback.xml file and log accordingly. So it doesn't appear to be a Cucumber issue but more a plugin issue.

When I start up tests using the gradle cucumber plugin, the logback.xml file seems to be ignored altogether even though I have the following dependency in my build.gradle:

cucumberRuntime 'ch.qos.logback:logback-classic:1.1.0'

Can anyone advise?

Regards,

Luke

Non standard directories causes an exception

I need to reorganise my project for multiple test types, so rather than have a directory structure of

   src
   |-> cucumber
   |-> main
   \-> test

I want to have

   src
   |-> main
   \-> test
        |-> integrationTest
        |-> cucumber
        \-> unitTest

However as soon as I move cucumber under the test directory and change the sourceSets for cucumber I see the following exception:

  • What went wrong:
    Execution failed for task ':nrg-data:cucumber'.

    cucumber.runtime.java.JavaBackend.getSnippet(Lgherkin/formatter/model/Step;Lcucumber/runtime/snippets/FunctionNameGenerator;)Ljava/lang/String;

If I add an empty cucumber directory under src it works fine. this is happening with Java 1.7, Gradle 2.3 and plugin version 0.7

cucumber-jruby version clashes with cucumber-core

Hi Samuel,

I've come across another potential issue which I've documented in the following example project :

https://github.com/lucas1000001/jruby-versioning-example

Basically I was getting some random compatibility issues when I tried to use a version of cucumber-jruby that did not match the cucumber-core version specified by the plugin's build script. I tried specifying a newer version of the cucumber-core dependency in my project, but unfortunately that didn't work either.

There are more details in the example project provided.

Anyway, I've logged just for completeness - I'll have a think and try and come up with a solution / workaround.

Thanks

Matt

Step definitions not found

Hi guys,

I'm currently trying to use the gradle-cucumber-plugin 0.6 without success.
I'm using cucumber 1.1.6
I'm facing the following problem, step definitions are not found by the plugin even if location in glueDirs are good.

Note: I do not have any troubles with featureDirs / tags.

/**
* Cucumber
*/
cucumber {
    formats = ['pretty','html:target/cucumber-html', 'json:target/cucumber.json']
    glueDirs = ['src/test/java/com/foo/features/stepDefs/folder1',
                'src/test/java/com/foo/features/stepDefs/folder2',
                'src/test/java/com/foo/features/stepDefs/folder3',
                'src/test/java/com/foo/features/stepDefs/folder4']
    featureDirs = ['src/test/ressources/com/foo/features/cloud']
    tags = ['@featureInProgress']
    monochrome = false
    strict = false
    dryRun = false
}

When I run the gradle cucumber, i have the following output:

Feature: FeatureInProgress

@featureInProgress
Scenario: Delete                                                             # WorkInProgress.feature:10
Given User is authenticated
Then I navigate to "foo" tab
And In quotesList I open all item starting with "quote_" and delete it

1 Scenarios (1 undefined)
3 Steps (3 undefined)
0m0,000s


You can implement missing steps with the snippets below:

@Given("^User is authenticated$")
public void user_is_authenticated(DataTable arg1) throws Throwable {
    // Write code here that turns the phrase above into concrete actions
    // For automatic transformation, change DataTable to one of
    // List<YourType>, List<List<E>>, List<Map<K,V>> or Map<K,V>.
    // E,K,V must be a scalar (String, Integer, Date, enum etc)
    throw new PendingException();
}

@Then("^I navigate to \"(.*?)\" tab$")
public void I_navigate_to_tab(String arg1) throws Throwable {
    // Write code here that turns the phrase above into concrete actions
    throw new PendingException();
}

@Then("^In quotesList I open all item starting with \"(.*?)\" and delete it$")
public void in_quotesList_I_open_all_item_starting_with_and_delete_it(String arg1) throws Throwable {
    // Write code here that turns the phrase above into concrete actions
    throw new PendingException();
}

Can someone help me on this ? thank you guys

Cucumber task fails on windows

I'm trying to get this plugin to work with gradle, I've got it working on Mac and Linux, however on a windows machine the below occurs. Is there a bug somewhere with windows file separators?

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':cucumber'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
        at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
        at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
        at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
        at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
        at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:289)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$1.run(DefaultTaskPlanExecutor.java:33)
        at org.gradle.internal.Factories$1.create(Factories.java:22)
        at org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation(DefaultCacheAccess.java:198)
        at org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation(DefaultCacheAccess.java:266)
        at org.gradle.cache.internal.DefaultPersistentDirectoryStore.longRunningOperation(DefaultPersistentDirectoryStore.java:135)
        at org.gradle.api.internal.changedetection.state.DefaultTaskArtifactStateCacheAccess.longRunningOperation(DefaultTaskArtifactStateCacheAccess.java:95)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:31)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:86)
        at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61)
        at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
        at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:67)
        at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:54)
        at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:166)
        at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:113)
        at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:81)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:64)
        at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)
        at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:35)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
        at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:50)
        at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:171)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:201)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:174)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:170)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:139)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
        at org.gradle.launcher.Main.doAction(Main.java:46)
        at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
        at org.gradle.launcher.Main.main(Main.java:37)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:50)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:32)
        at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
Caused by: java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
 ^
        at java_lang_String$replaceAll.call(Unknown Source)
        at com.excella.gradle.cucumber.tasks.CucumberTask$_getOrDetectGlueDirs_closure1_closure2.doCall(CucumberTask.groovy:107)
        at com.excella.gradle.cucumber.tasks.CucumberTask$_getOrDetectGlueDirs_closure1.doCall(CucumberTask.groovy:104)
        at com.excella.gradle.cucumber.tasks.CucumberTask.getOrDetectGlueDirs(CucumberTask.groovy:95)
        at com.excella.gradle.cucumber.tasks.CucumberTask.executeCucumberRunner(CucumberTask.groovy:122)
        at com.excella.gradle.cucumber.tasks.CucumberTask.cucumber(CucumberTask.groovy:50)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:219)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:212)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:201)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:533)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:516)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
        ... 49 more


BUILD FAILED

Total time: 46.606 secs

Plugin is not Gradle 2.0 compatible

Running idea task in a project that contains src/cucumber directory with the following simple script fails when using Gradle 2.0 and passes when using 1.12.

buildscript {
        repositories {
                jcenter()
        }
        dependencies {
                classpath "com.github.samueltbrown:gradle-cucumber-plugin:0.7"
        }
}

apply plugin: "idea"
apply plugin: "com.github.samueltbrown.cucumber"

When will tags be supported?

This is an interesting plugin.
However we rely heavily on tags which are not supported. Any idea when this will be implemented?

No longer works with Gradle 3.x if eclipse plugin is applied

noExportConfigurations has been deprecated in the EclipseClasspath dsl for some time now and has finally been removed completely in Gradle 3.x, but is currently being used here

Hence gradle-cucumber-plugin now fails with:

* What went wrong:
A problem occurred evaluating root project 'example-root-project'.
> Failed to apply plugin [id 'com.github.samueltbrown.cucumber']
   > Could not get unknown property 'noExportConfigurations' for object of type org.gradle.plugins.ide.eclipse.model.EclipseClasspath.

Cant find the cukes

Hi,
I am using your plugin to run cucumber tests with my gradle project, but when I specify the path for the cukes.java with the glueDirs variable, it doesn't find the cukes, even though it does find the feature files in the path I specify in featureDirs.
I'm very new to Gradle and Cucumber, but I really dont see why and dont see what I could have forgotten.
Any ideas why ? something that I could have missed ?
Thank you in advance !

Creating a new Task of type CucumberTask

How do I Create a new task of type CucumberTask?

I tried the following but when I try to run I get "Cannot invoke method copyTo() on null object"

task "${driver}Test" (type: CucumberTask) {

        outputs.upToDateWhen { false }  // Always run tests

        dependsOn unzipChromeDriver
        def chromeDriverFilename = Os.isFamily(Os.FAMILY_WINDOWS) ? "chromedriver.exe" : "chromedriver"
        jvmOptions.systemProperties([
                "webdriver.chrome.driver"   : new File(unzipChromeDriver.outputs.files.singleFile, chromeDriverFilename).absolutePath,
                "geb.cucumber.step.packages": "pages",
                "geb.env"                   : driver
        ])
    }

Appreciate if I can get some help in figuring this out.

Cucumber source sets not recognised as tests in Intellij IDEA

Placing Steps definitions in the directory src/cucumber/java are correctly picked up by gradle as cucumber classes to compile, however within Intellij IDEA these are seen as source files and not tests, consequently they show compile errors in the IDE. Manually setting the directory as test classes temporarily works but cucumber specific dependencies then need to be promoted from cucumberCompile to testCompile to remove compilation errors.

The filename or extension is too long (on Windows)

On windows 10 the following error is thrown during running cucumber gradle task:

:cucumber FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':cucumber'.
> A problem occurred starting process 'command 'C:\Program Files\Java\jdk1.8.0_60\bin\java.exe''

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':cucumber'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
        at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
        at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
        at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
        at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:66)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:25)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:110)
        at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
        at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23)
        at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43)
        at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30)
        at org.gradle.initialization.DefaultGradleLauncher$4.run(DefaultGradleLauncher.java:154)
        at org.gradle.internal.Factories$1.create(Factories.java:22)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:52)
        at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:151)
        at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32)
        at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:99)
        at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:93)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:62)
        at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:93)
        at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:82)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:94)
        at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
        at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:43)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28)
        at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:78)
        at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:48)
        at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:51)
        at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:28)
        at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:43)
        at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:170)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:237)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:210)
        at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)
        at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:206)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
        at org.gradle.launcher.Main.doAction(Main.java:33)
        at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:54)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:35)
        at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
        at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:30)
        at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:129)
        at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61)
Caused by: org.gradle.process.internal.ExecException: A problem occurred starting process 'command 'C:\Program Files\Java\jdk1.8.0_60\bin\java.exe''
        at org.gradle.process.internal.DefaultExecHandle.setEndStateInfo(DefaultExecHandle.java:197)
        at org.gradle.process.internal.DefaultExecHandle.failed(DefaultExecHandle.java:327)
        at org.gradle.process.internal.ExecHandleRunner.run(ExecHandleRunner.java:86)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
        at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
Caused by: net.rubygrapefruit.platform.NativeException: Could not start 'C:\Program Files\Java\jdk1.8.0_60\bin\java.exe'
        at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:27)
        at net.rubygrapefruit.platform.internal.WindowsProcessLauncher.start(WindowsProcessLauncher.java:22)
        at net.rubygrapefruit.platform.internal.WrapperProcessLauncher.start(WrapperProcessLauncher.java:36)
        at org.gradle.process.internal.ExecHandleRunner.run(ExecHandleRunner.java:68)
        ... 2 more
Caused by: java.io.IOException: Cannot run program "C:\Program Files\Java\jdk1.8.0_60\bin\java.exe" (in directory "E:\expedia\git_projects\searchlandingpages-grails"): CreateProcess error=206, The filename or extension is too long
        at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:25)
        ... 5 more
Caused by: java.io.IOException: CreateProcess error=206, The filename or extension is too long
        ... 6 more

gradle-cucumber InstantiationException

Gradle-cucumber sometimes fails when a groovy class somewhere in the dependency tree does not have a no-arg constructor. Unsure if this is specific to gradle-cucumber or a further upstream dependency. I will attempt to generate a minimal example and hopefully a pull-request soon, but wanted to capture this now that I have diagnosed and discovered a workaround (create a no-arg constructor, and an init() method that it is then necessary to call.

Cannot find StepDefs in default location

OK, I know something similar has been asked before, but I'm tearing my hair out.

I have put together a simple project to show the problem I am seeing. It's standard structure. StepDefs.java is under the src/test/java directory, default package. A Feature file is under the src/test/resources directory. No config aside from setting strict to true. When I run the cucumber target, the feature is found, but the StepDef class isn't - it outputs the required code templates again.

I've obviously overlooked something trivial - what is it? Please put me out of my misery!

Thanks in advance.

Chris

PS: here's the project I'm using to show this issue
gradledemo.zip

v0.8 - unsupported Gradle DSL method found: 'dependsOn()'

I'm using Java 8, and Gradle 2.1, and my build script has a dependsOn() on the cucumber task:

cucumber.dependsOn startLocal

With v0.8 of the cucumber plugin my build always fails with the following error, if I go back to the previous version (0.7.2) the build works fine:

FAILURE: Build failed with an exception.

* Where:
Build file 'build.gradle' line: 220

* What went wrong:
A problem occurred evaluating project ':mainapp'.
> Could not find method dependsOn() for arguments [task ':mainapp:startLocal'] on com.excella.gradle
.cucumber.CucumberConvention_Decorated@4462efe1.

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.api.GradleScriptException: A problem occurred evaluating project ':mainapp'.
        at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:54)
        at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:190)
        at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:39)
        at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:26)
        at org.gradle.configuration.project.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:34)
        at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:55)
        at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:521)
        at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:82)
        at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:31)
        at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:129)
        at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106)
        at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:80)
        at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)
        at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:36)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
        at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:51)
        at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:171)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:237)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:210)
        at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)
        at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:206)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
        at org.gradle.launcher.Main.doAction(Main.java:33)
        at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:54)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:35)
        at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
Caused by: org.gradle.api.internal.MissingMethodException: Could not find method dependsOn() for arguments [task ':mainapp:startLocal'] on com.excella.gradle.cucumber.CucumberConvention_Decorated@4462efe1.
        at org.gradle.api.internal.AbstractDynamicObject.methodMissingException(AbstractDynamicObject.java:68)
        at org.gradle.api.internal.AbstractDynamicObject.invokeMethod(AbstractDynamicObject.java:56)
        at org.gradle.api.internal.CompositeDynamicObject.invokeMethod(CompositeDynamicObject.java:172)
        at com.excella.gradle.cucumber.CucumberConvention_Decorated.invokeMethod(Unknown Source)
        at build_61p7jjuf629r521tm9k3qlufgq.run(build.gradle:220)
        at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:52)
        ... 31 more


BUILD FAILED

Total time: 2.983 secs

Problem running standalone tests

I had some issues running some basic "hello world" type tests. After a bit of trouble, I finally tracked it down to a version mismatch between what the gradle-cucumber-plugin wanted and what I was indicating as required versions for my command line. I haven't looked too closely at the delta between cucumber 1.1.5 (that v0.6 of the gradle plugin wanted) and the latest (1.1.8), but it seems like a more flexible approach would be for the plugin to allow choosing the cucumber version ? or is there instability in the runtime? I was able to force things to use the 1.1.8 version of cucumber (not sure if this will be a good or bad thing yet) by doing the following:

Thanks for the incredible fast response (and sorry for wasting your time). It was indeed do to a version conflict. The gradle-plugin looks to be pinnning cucumber at 1.1.6, but I was able to get it to pull in 1.1.8 by forcing the version of cucumber-groovy in my gradle file. Just in case anyone stumbles across a similar issue, you can do:

apply plugin: 'cucumber'

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.github.samueltbrown:gradle-cucumber-plugin:0.6'
    }

    configurations.all {
        resolutionStrategy {
            force 'info.cukes:cucumber-groovy:1.1.8'
        }
    }
}

dependencies {
        cucumberRuntime 'info.cukes:cucumber-groovy:1.1.8'
}

I haven't tested this much past a hello world example working, but if the public APIs have not changed between 1.1.6 (actually 1.1.5 from the plugin), then hopefully there won't be an issue...

Or is there a better way for me to setup the cucumber dependencies? It would be nice if I could. I'd like to use the 1.1.8 runtime if possible

Passing jvm arguments to cucumber task

How do I set task properties to the cucumber task from outside the cucumber block?

Normally one would do it like this:


cucumber {

  jvmOptions.systemProperties += ["foo": "bar"]

}

But if I want to set properties globally through 'withType' for example, it doesn't work. None of the below gets picked up.


tasks.withType(Test) {task ->

  task.systemProperty('foo', 'bar')

}

tasks.withType(JavaExec) {task ->

  task.systemProperty('foo', 'bar')

}

The only way I have gotten this to work is to set a system and not task property on Test, e.g. after which I can use retrieve this value inside the cucumber task from System.getProperty()


tasks.withType(Test) {task ->

  System.setProperty('foo', 'bar')

}

Why are task properties not propagated?

Plugin is compiled with JDK8

This makes it unusable with JDK7, can you please compile it with -target 1.7 so the plugin can be more widely used? I imagine there's nothing JDK8 specific about it.

IncompatibleClassChangeError when scanning for methods

Running on a Windows 7 machine with Gradle 1.11, Java 1.7.0_51 and Cucumber JVM 1.1.5 I get the following stacktrace when I try to run the gradlew cucumber command.

org.gradle.api.tasks.TaskExecutionException: Execution failed for task '::cucumber'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpoDateTaskExecuter.java:64)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:289)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:86)
at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61)
at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:67)
at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:54)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:166)
at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:113)
at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:81)
at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:64)
at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)
at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActioExecuter.java:35)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActioExecuter.java:26)
at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:50)
at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:171)
at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:201)
at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:174)
at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:170)
at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:139)
at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
at org.gradle.launcher.Main.doAction(Main.java:46)
at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
at org.gradle.launcher.Main.main(Main.java:37)
at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:50)
at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:32)
at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:30)
at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:127)
at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:55)
Caused by: java.lang.IncompatibleClassChangeError: Implementing class
at cucumber.runtime.java.MethodScanner.scan(MethodScanner.java:40)
at cucumber.runtime.java.JavaBackend.loadGlue(JavaBackend.java:73)
at cucumber.runtime.Runtime.(Runtime.java:89)
at cucumber.runtime.Runtime.(Runtime.java:67)
at cucumber.runtime.Runtime.(Runtime.java:63)
at cucumber.api.cli.Main.run(Main.java:24)
at cucumber.api.cli.Main.main(Main.java:16)
at com.excella.gradle.cucumber.CucumberRunner.runCucumberTests(CucumberRunner.java:74)
at com.excella.gradle.cucumber.CucumberRunner$runCucumberTests.call(Unknown Source)
at com.excella.gradle.cucumber.tasks.CucumberTask.executeCucumberRunner(CucumberTask.groovy:122)
at com.excella.gradle.cucumber.tasks.CucumberTask.cucumber(CucumberTask.groovy:50)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:219)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:212)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:201)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:533)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:516)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
... 46 more

I built the plugin from source downloaded via a zip from here as we cannot pull in the distributed jar. I have tried various locations for the feature a steps definitions (steps are defined in Java). The tests run fine within Intellij Idea using both a junit runner and native cucumber support.

No src/cucumber folder in project causes failure to load custom reporter

I have created an example project for this issue:
https://github.com/robertpryde/gradle-cucumber-plugin-test

Essentially we have a custom reporter that we use to output test results in a format similar to JUnit test results, and when the src/cucumber folder does not exist in the project then the cucumber gradle task fails with the following error:

$ ./gradlew clean cucumber -Pcuketag=@product1 -Dorg.gradle.daemon=false -Dorg.gradle.jvmargs=
:clean
:compileJava
:processResources
:classes
:jar
:assemble
:cucumber FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':cucumber'.
> Couldn't load formatter class: simple.formatter.JUnitFormatter

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 7.716 secs

However if you add a src/cucumber folder to the project then running the same command results in sucess:

$ ./gradlew clean cucumber -Pcuketag=@product1 -Dorg.gradle.daemon=false -Dorg.gradle.jvmargs=
:clean
:compileJava
:processResources
:classes
:jar
:assemble
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:compileCucumberJava
:processCucumberResources
:cucumberClasses
:cucumber
@product1
          Feature: Feature 1
                             step 1: {prop3=shoes, prop2=foo, prop1=00001}
step 2
step 3
step 4
step 5

   Scenario: Scenario 1 # product1/feature_1_subfeature_1.feature:3
                                                                                 Given step 1       # MyStepdefs.step1()

 And step 2         # MyStepdefs.step2()

  And step 3         # MyStepdefs.step3()

  When step 4        # MyStepdefs.step4()

  Then step 5        # MyStepdefs.step5()

1 Scenarios (1 passed)
5 Steps (5 passed)
0m0.242s


BUILD SUCCESSFUL

Total time: 5.32 secs

If earlier non-cucumber tests task fails, then cucumber task won't run

This may be a documentation-thing or something already built-in to gradle that I'm not aware of, but:

If you have a project with a mixture of junit unittests separate from the cucumber acceptance tests, and you invoke the build with (e.g.,) gradle test cucumber check, then the cucumber task won't actually run at all if any of the earlier tests fail.

Is it possible to always run the cucumber task even if earlier tests failed?

"The RepositoryHandler.mavenRepo() method has been deprecated..."

Got this output on my bash with the 0.3 version of the cucumber gradle plugin:

Script 'https://github.com/samueltbrown/gradle-cucumber-plugin/raw/master/repo/gradle-cucumber-plugin/gradle-cucumber-plugin/0.3/cucumberinit.gradle': line 15
The RepositoryHandler.mavenRepo() method has been deprecated and is scheduled to be removed in Gradle 2.0. Please use the maven() method instead.
The ConfigurationContainer.add() method has been deprecated and is scheduled to be removed in Gradle 2.0. Please use the create() method instead.
The TaskContainer.add() method has been deprecated and is scheduled to be removed in Gradle 2.0. Please use the create() method instead.

This occured on a Mac OS X 10.8.5, with gradle 1.8 and groovy 1.8.6 (information by gradle --version).

AND OR cucumber tags

I am not sure if cucumber supports AND, OR operations with tags. The default is OR I suppose but if I want to run multiple tests filtered by the tags how can I do that?

Running cucumber task - problem with step definitions

Hi.

I have the path: src/test/resources/feature/... which has *.feature files which are the test files and I have their step definitions in:
src/test/java/feature/...

Before using the cucumber plugin, I could run ./gradlew test and it would run the test successfully.

Now I run ./gradlew cucumber and it finds the tests, but not the step definitions.
Instead, it suggests to implement missing steps with the snippets below(giving examples of how step defs should be)

Why's that? why it doesn't locate the step definitions under the src/test/java/feature.. path?

And how could I change the configuration so it'd work?

In addition, I'd like to know how could I run specific tests which exist under specific folders?
for example,tests which exists in folders of which the names are prefixed with "example"?
All of that using ./gradlew cucumber task!
Is it possible?

Thanks in advance.

Task-specific tagging

Is it possible to have global cucumber config but then define which tags you want to run in separate tasks that depend on the cucumber task?

For example, I have defined the general config for all cucumber tests:

cucumber {

    formats = [
        'pretty',
        'json:build/reports/cucumber.json',
        'junit:build/cucumber.xml'
    ]

    ... more stuff

    monochrome = false
    strict = false
    dryRun = false
}

I have separated particular tests which I want to run at different times. I've tried creating tasks that then add in the tags switch for cucumber, like so:

task acceptanceTests(dependsOn: cucumber) {

    cucumber {
        tags = ['@AAT']
    }
}

task systemTests(dependsOn: cucumber) {

    cucumber {
        tags = ['@SIT']
    }
}

What's happening is that no matter which task I run, it always uses the @SIT tagged scenarios. I'm hoping I've just misunderstood how to properly configure the plugin. Any help would be greatly appreciated.

Plugin Publishing

@viphe Can you please email me when you get this? I need to ask you an urgent question about publishing the plugin. Thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.