Also I tried Maven dependencies on those 4 artifacts, but always run into error

ejner@ejner-GGS-Petit-Deluxe:~/.m2/repository/io/cucumber$ java -cp "cucumber-jvm/2.0.0/*:tag-expressions/1.0.1/*:gherkin-jvm-deps/1.0.4/*:cucumber-jvm-deps/1.0.6/*:cucumber-java/2.0.0/:gherkin/4.1.3/*:cucumber-core/2.0.0/*" cucumber.api.cli.Main -p pretty .
Exception in thread "main" cucumber.runtime.CucumberException: No backends were found. Please make sure you have a backend module on your CLASSPATH.
at cucumber.runtime.Runtime.<init>(Runtime.java:56)
at cucumber.runtime.Runtime.<init>(Runtime.java:45)
at cucumber.runtime.Runtime.<init>(Runtime.java:41)
at cucumber.api.cli.Main.run(Main.java:35)
at cucumber.api.cli.Main.main(Main.java:18)
--Ejner Borgbjerg

in order to have maven execute the tests, I found I needed to add a small Java class like the code below; you mention it later but I think you need it...more...

Seb Rose says: A class like that is only needed to run the tests via JUnit. This part of the book is using Cucumber's CLI to find & execute the scenarios, so this class is not needed.... yet. We need it when we start using Maven/Junit in a few chapters time

Reported in:
P1.0
(18-Dec-15)

#79354PDF page: 49

In nearly every sample project that I build using maven, I get an error "annotations are not supported in -source 1.3". The error is always solved by adding this to my pom <build><plugins> section:
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>

Maybe you would consider updating the sample code. It's possible I did not set up my maven correctly. But no instructions from the maven project or stack-overflow could solve it without adding a section to the pom file. BTW, I am using java version "1.7.0_91".

Thanks,

Dave--David McNulla

In nearly every sample project that I build using maven, I get an error "annotations are not supported in -source 1.3". The error is always solved by ...more...

Reported in:
P1.0
(16-Mar-15)

#78257Paper page: 53

In the Character Classes section, the first code sample contains \\$([01234567890]*) as the regex. I don't believe you need the 0 at the start and the end of the list of digits.--Stuart

In the Character Classes section, the first code sample contains \\$([01234567890]*) as the regex. I don't believe you need the 0 at the start and the...more...

Reported in:
P1.0
(06-Jan-17)

#81045PDF page: 56

First paragraph reads "That word is then passed to the method we named accountType in the second argument." I believe you mean "That word is then passed to the iHaveDeposited$InMyAccount method in the second argument."

First paragraph reads "That word is then passed to the method we named accountType in the second argument." I believe you mean "That word is then pas...more...

Reported in:
P1.0
(24-Jun-15)

#78536PDF page: 90

Page 89 states to generate step definition snippets and paste them into step_definitions/BoardSteps.java however pdf page 90 lists the file path as tic_tac_toe and the code snippet lists package as tic_tac_toe. this leads the code to be run to result in undefined status. It would be best to keep this in sync with earlier examples and keep this as step_definitions.

Page 89 states to generate step definition snippets and paste them into step_definitions/BoardSteps.java however pdf page 90 lists the file path as ...more...

This code uses an instance of the helper class from the next section, but we haven't even written it yet. At this point it should just use the instance variable "myAccount" when passing the account into the teller.withdrawFrom() method.--Mark Kinzie

At the top of the page, it says:
@When("^I withdraw \\$(\\d+)$")
public void iWithdraw$(int dollars) throws Throwable {
Teller teller = n...more...

Reported in:
P1.0
(14-Apr-15)

#78320PDF page: 130

It is said that the method:
@When("^I withdraw \\$(\\d+)$")
public void iWithdraw$(Money amount) throws Throwable {
Teller teller = new Teller();
teller.withdrawFrom(myAccount, amount);
}
Try it. It works!
But, teller.withdrawFrom() method accepts Account instance and int of dollars. So it can't even compile at that moment. More of that, no Tranformer is applied to be able to transforme teh matched value into Money object. If we continue, we'll see on page 131 the correct step declaration:
@When("^I withdraw \\$(\\d+)$")
public void iWithdraw$(int dollars) throws Throwable {
Teller teller = new Teller();
teller.withdrawFrom(helper.getMyAccount(), dollars);
}.--Serguei Cambour

It is said that the method:
@When("^I withdraw \\$(\\d+)$")
public void iWithdraw$(Money amount) throws Throwable {
Teller teller = new Teller();
...more...

Reported in:
P1.0
(16-Mar-15)

#78256Paper page: 132

In the $ShouldBeDispensed method at the top of the page the code contains
helper.getCashSlot().contents()
but in the definition of the CashSlot class at the bottom of the page and on page 134 the method is called getContents.--Stuart

In the $ShouldBeDispensed method at the top of the page the code contains
helper.getCashSlot().contents()
but in the definition of the CashSlot clas...more...

Reported in:
P1.0
(14-Apr-15)

#78321PDF page: 132

in the step method definition it should be:
helper.getCashSlot().getContents());

instead of

helper.getCashSlot().contents());--Serguei Cambour

Reported in:
P1.0
(16-Apr-15)

#78341PDF page: 150

In AtmServer constructor, the server instance is initialized with hard-coded port value instead of taking it from the passed in parameter:
server = new Server(9988);--Serguei Cambour

In AtmServer constructor, the server instance is initialized with hard-coded port value instead of taking it from the passed in parameter:
server = n...more...

Reported in:
P1.0
(25-Jun-15)

#78537PDF page: 155

When searching the element by ID, it should be in lower case:
webDriver.findElement(By.id("amount")) instead of
webDriver.findElement(By.id("Amount")). In the supplied code source (see support code, 17 it is correct). The same should be applied to webDriver.findElement(By.id("Withdraw")).click();--Serguei Cambour

When searching the element by ID, it should be in lower case:
webDriver.findElement(By.id("amount")) instead of
webDriver.findElement(By.id("Amount...more...

Reported in:
P1.0
(31-Aug-16)

#80684PDF page: 156

Chapter 8. Support Code: Using Hooks: No mention is made of the fact that hook classes must be in the package tree defined by the Cucumber glue option. Place them anywhere else, and they won't run.--Daniel B. Hankins

Chapter 8. Support Code: Using Hooks: No mention is made of the fact that hook classes must be in the package tree defined by the Cucumber glue option...more...

Reported in:
P1.0
(25-Mar-15)

#78276PDF page: 161

Hope you can help. Not sure if this is a technical error or not. After updating AtmUserInterface.java, then I get a compile error. Detail below. Are you able to help. Please email me at wsinclair@indigocube.co.za for full description:

at support.KnowsTheDomain.getTeller(KnowsTheDomain.java:34)
at nicebank.TellerSteps.iWithdraw$(TellerSteps.java:28)
at ?.When I withdraw $20(C:/Users/wsinclair/workspace/Eclipse/Maven/MavenCucumberPrototype/src/test/resource/cash_withdrawal.feature:4)

Here is knowsTheDomain
------------------------
/***
* Excerpted from "The Cucumber for Java Book",
* published by The Pragmatic Bookshelf.
* Copyrights apply to this code. It may not be used to create training material,
* courses, books, articles, and the like. Contact us if you are in doubt.
* We make no guarantees that this code is fit for any purpose.
* Visit (hyperlinks not allowed
***/
package support;

Here is ATMUserInterface
========================
/***
* Excerpted from "The Cucumber for Java Book",
* published by The Pragmatic Bookshelf.
* Copyrights apply to this code. It may not be used to create training material,
* courses, books, articles, and the like. Contact us if you are in doubt.
* We make no guarantees that this code is fit for any purpose.
* Visit Hyperlinks not allowed
***/
package support;

Hope you can help. Not sure if this is a technical error or not. After updating AtmUserInterface.java, then I get a compile error. Detail below. Are ...more...

Reported in:
P1.0
(21-Feb-18)

#82797Paper page: 162

At the top of the page, when you say "We have to share the same instance of the Selenium web driver between WebDriverHooks and AtmUserInterface", I suggest that also you point out the need then to remove the webDriver.close(); call from AtmUserInterface.java. Leaving that line there will cause an error when trying to take the screenshot since the WebDriverHooks.java would try to use the webDriver that is now closed. --Shaun Dashjian

At the top of the page, when you say "We have to share the same instance of the Selenium web driver between WebDriverHooks and AtmUserInterface", I su...more...

Reported in:
P1.0
(03-Sep-16)

#80688PDF page: 172

The mvn clean test suggested on this page will not result, as claimed, in an image of the greeting page being saved. Instead the image will be blank. This is because AtmUserInterface instantiates its own EventFiringWebDriver. That results in a browser window being opened twice, the second one not addressing the greeting page (assuming you've already fixed AtmServer).

Fixing this requires altering AtmUserInterface's constructor to take an EventFiringWebDriver as an argument and initialize its webDriver field with it, and altering KnowsTheDomain to supply that EventFiringWebDriver.--Daniel B. Hankins

The mvn clean test suggested on this page will not result, as claimed, in an image of the greeting page being saved. Instead the image will be blank. ...more...

Reported in:
P1.0
(02-Sep-16)

#80686PDF page: 173

The finish() method listed uses a variable named "helper". The text does not tell the reader what type "helper" is nor how to initialize it.--Daniel B. Hankins

The finish() method listed uses a variable named "helper". The text does not tell the reader what type "helper" is nor how to initialize it.--Daniel B...more...

Reported in:
P1.0
(03-Sep-16)

#80690PDF page: 174

For some reason the wrong PDF page number keeps showing up in the errata... Anyway, here goes one more time, with feeling:

The mvn clean test suggested on this page will not result, as claimed, in an image of the greeting page being saved. Instead the image will be blank. This is because AtmUserInterface instantiates its own EventFiringWebDriver. That results in a browser window being opened twice, the second one not addressing the greeting page (assuming you've already fixed AtmServer).

Fixing this requires altering AtmUserInterface's constructor to take an EventFiringWebDriver as an argument and initialize its webDriver field with it, and altering KnowsTheDomain to supply that EventFiringWebDriver.
--Daniel B. Hankins

For some reason the wrong PDF page number keeps showing up in the errata... Anyway, here goes one more time, with feeling:
The mvn clean test sugge...more...

Reported in:
P1.0
(03-Sep-16)

#80689PDF page: 175

Apologies, wrong PDF page number on the prior submission...

The mvn clean test suggested on this page will not result, as claimed, in an image of the greeting page being saved. Instead the image will be blank. This is because AtmUserInterface instantiates its own EventFiringWebDriver. That results in a browser window being opened twice, the second one not addressing the greeting page (assuming you've already fixed AtmServer).

Fixing this requires altering AtmUserInterface's constructor to take an EventFiringWebDriver as an argument and initialize its webDriver field with it, and altering KnowsTheDomain to supply that EventFiringWebDriver.
--Daniel B. Hankins

Apologies, wrong PDF page number on the prior submission...
The mvn clean test suggested on this page will not result, as claimed, in an image of t...more...

Reported in:
P1.0
(04-Apr-16)

#80187Paper page: 269

This is in Chapter 14.
Maven main class package name has a typo.

It should be cucumber.api.cli.Main

It is currently cucumber.cli.Main--Kingsly Theodar Rajasekar

This is in Chapter 14.
Maven main class package name has a typo.
It should be cucumber.api.cli.Main
It is currently cucumber.cli.Main--Kingsly ...more...

Reported in:
P1.0
(09-Jul-16)

#80512Paper page: 4442

in 'Using Hooks' section, the book indicates to create a Hook class, but forgots to mention that we need to create that class in the glue package we specify when running cucumber scenario so the class can be found.--Alonso Ayala

in 'Using Hooks' section, the book indicates to create a Hook class, but forgots to mention that we need to create that class in the glue package we s...more...