Skip to content
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]
### Changed
- Set default release version to 17 [#62](https://github.com/cucumber/cucumber-parent/pull/62)
- Set minimum Maven to v3.9.0
- Enable Error prone with Nullaway
- Enable Checkstyle

## [4.5.0] - 2025-10-15
### Changed
Expand Down
148 changes: 135 additions & 13 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

<groupId>io.cucumber</groupId>
<artifactId>cucumber-parent</artifactId>
<version>4.5.1-SNAPSHOT</version>
<version>5.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Cucumber Parent</name>
<description>Common configuration for all Cucumber modules</description>
Expand All @@ -22,13 +22,21 @@
</developers>

<properties>
<!-- Project settings-->
<project.build.outputTimestamp>1760538714</project.build.outputTimestamp>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<minimum.maven.version>3.6.0</minimum.maven.version>
<jacoco-maven-plugin.version>0.8.14</jacoco-maven-plugin.version>
<java.version>1.8</java.version>
<maven-antrun-plugin.version>3.2.0</maven-antrun-plugin.version>
<minimum.maven.version>3.9.0</minimum.maven.version>
<maven.compiler.release>17</maven.compiler.release>
<maven.compiler.parameters>true</maven.compiler.parameters>

<!-- OSGI Configuration -->
<osgi.export-contents>*;-noimport:=true</osgi.export-contents>
<osgi.import-package>*</osgi.import-package>
<osgi.bundle-symbolic-name>${project.Automatic-Module-Name}</osgi.bundle-symbolic-name>

<!-- Maven plugin versions -->
<maven-antrun-plugin.version>3.1.0</maven-antrun-plugin.version>
<maven-archetype-plugin.version>3.4.1</maven-archetype-plugin.version>
<maven-checkstyle-plugin.version>3.6.0</maven-checkstyle-plugin.version>
<maven-clean-plugin.version>3.5.0</maven-clean-plugin.version>
Expand All @@ -49,15 +57,22 @@
<maven-toolchains-plugin.version>3.2.0</maven-toolchains-plugin.version>
<maven-install-plugin.version>3.1.4</maven-install-plugin.version>
<maven-war-plugin.version>3.5.0</maven-war-plugin.version>

<!-- Other Maven plugin versions -->
<build-helper-maven-plugin.version>3.6.1</build-helper-maven-plugin.version>
<bnd-maven-plugin.version>7.1.0</bnd-maven-plugin.version>
<central-publishing-maven-plugin.version>0.9.0</central-publishing-maven-plugin.version>
<versions-maven-plugin.version>2.19.1</versions-maven-plugin.version>
<directory-maven-plugin.version>1.0</directory-maven-plugin.version>
<jacoco-maven-plugin.version>0.8.14</jacoco-maven-plugin.version>
<spotless-maven-plugin.version>3.0.0</spotless-maven-plugin.version>
<osgi.bundle-symbolic-name>${project.Automatic-Module-Name}</osgi.bundle-symbolic-name>
<osgi.export-contents>*;-noimport:=true</osgi.export-contents>
<osgi.import-package>*</osgi.import-package>
<versions-maven-plugin.version>2.19.1</versions-maven-plugin.version>

<!-- Maven compiler plugin versions-->
<error-prone.version>2.43.0</error-prone.version>
<nullaway.version>0.12.11</nullaway.version>

<!-- Maven Checkstyle plugin versions -->
<puppycrawl-checkstyle.version>12.1.1</puppycrawl-checkstyle.version>
</properties>

<licenses>
Expand Down Expand Up @@ -143,6 +158,91 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>${maven-checkstyle-plugin.version}</version>
<dependencies>
<dependency>
<groupId>com.puppycrawl.tools</groupId>
<artifactId>checkstyle</artifactId>
<version>${puppycrawl-checkstyle.version}</version>
</dependency>
</dependencies>

<configuration>
<consoleOutput>true</consoleOutput>
<failsOnError>true</failsOnError>
<includeTestSourceDirectory>true</includeTestSourceDirectory>
<!-- See: https://checkstyle.org/checks.html-->
<checkstyleRules>
<module name="Checker">
<property name="severity" value="error"/>
<module name="UniqueProperties"/>
<module name="com.puppycrawl.tools.checkstyle.TreeWalker">
<module name="AvoidStarImport"/>
<module name="AnnotationUseStyle"/>
<module name="DefaultComesLast"/>
<module name="DesignForExtension"/>
<module name="EmptyBlock"/>
<module name="EmptyCatchBlock"/>
<module name="EmptyLineSeparator">
<property name="allowNoEmptyLineBetweenFields" value="true"/>
</module>
<module name="EmptyStatement"/>
<module name="EqualsHashCode"/>
<module name="FallThrough"/>
<module name="FinalClass"/>
<module name="HideUtilityClassConstructor"/>
<module name="InnerTypeLast"/>
<module name="InterfaceIsType"/>
<module name="InvalidJavadocPosition"/>
<module name="JavadocBlockTagLocation"/>
<module name="JavadocContentLocation"/>
<module name="JavadocLeadingAsteriskAlign"/>
<module name="JavadocMissingLeadingAsterisk"/>
<module name="JavadocMethod">
<property name="allowMissingParamTags" value="true"/>
<property name="allowMissingReturnTag" value="true"/>
</module>
<module name="MissingDeprecated"/>
<module name="MutableException"/>
<module name="MissingOverride"/>
<module name="NoClone"/>
<module name="NoCodeInFile"/>
<module name="NoEnumTrailingComma"/>
<module name="NoFinalizer"/>
<module name="OneTopLevelClass"/>
<module name="OuterTypeFilename"/>
<module name="OuterTypeNumber"/>
<module name="PackageDeclaration"/>
<module name="PackageName"/>
<module name="RedundantImport"/>
<module name="RedundantModifier"/>
<module name="StringLiteralEquality"/>
<module name="UnnecessaryNullCheckWithInstanceOf"/>
<module name="UnnecessaryParentheses"/>
<module name="UnnecessarySemicolonAfterOuterTypeDeclaration"/>
<module name="UnnecessarySemicolonAfterTypeMemberDeclaration"/>
<module name="UnnecessarySemicolonInEnumeration"/>
<module name="UnnecessarySemicolonInTryWithResources"/>
<module name="UnusedImports"/>
<module name="UnusedLocalVariable"/>
<module name="NonEmptyAtclauseDescription"/>
<module name="SuppressWarningsHolder"/>
<!-- TODO: Do later -->
<!-- <module name="RegexpSinglelineJava">-->
<!-- <property name="maximum" value="0"/>-->
<!-- <property name="format" value="String\.format"/>-->
<!-- <property name="message" value="Please use String.formatted() (non-static) rather than String.format() (static)."/>-->
<!-- <property name="ignoreComments" value="true"/>-->
<!-- </module>-->
</module>
<module name="RegexpSingleline">
<property name="format" value="@author"/>
<property name="message" value="Please do not use @author tags"/>
<property name="fileExtensions" value="java,groovy,kt"/>
</module>
<module name="SuppressWarningsFilter"/>
</module>
</checkstyleRules>
</configuration>
</plugin>

<plugin>
Expand All @@ -156,9 +256,31 @@
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<encoding>UTF-8</encoding>
<source>${java.version}</source>
<target>${java.version}</target>
<compilerArgs>
<arg>-Werror</arg>
<arg>--should-stop=ifError=FLOW</arg>
<arg>-XDcompilePolicy=simple</arg>
<arg>-Xplugin:ErrorProne \
-XepOpt:NullAway:AnnotatedPackages=io.cucumber \
-Xep:AnnotateFormatMethod:OFF \
-Xep:DoNotCallSuggester:OFF \
-Xep:DoNotCallSuggester:OFF \
-Xep:InlineMeSuggester:OFF \
-Xep:ImmutableEnumChecker:OFF
</arg>
</compilerArgs>
<annotationProcessorPaths>
<path>
<groupId>com.google.errorprone</groupId>
<artifactId>error_prone_core</artifactId>
<version>${error-prone.version}</version>
</path>
<path>
<groupId>com.uber.nullaway</groupId>
<artifactId>nullaway</artifactId>
<version>${nullaway.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>

Expand Down Expand Up @@ -240,7 +362,7 @@
</archive>
</configuration>
</plugin>

<plugin>
<groupId>biz.aQute.bnd</groupId>
<artifactId>bnd-maven-plugin</artifactId>
Expand Down