Skip to content

Project structure

Luis Iñesta edited this page May 19, 2022 · 3 revisions

This repository contains several modules that are related, but it is not a mono-repo. That means that each module has its own version number and should not be considered as a single bundle.

There are four categories of projects:

Management projects

Kukumo (root) project

Defines configurations that would be inherited by any other module. That includes build stages, validations, reports to generate, etc. Any other Maven module should define the root project as parent:

    <parent>
        <groupId>es.iti.kukumo</groupId>
        <artifactId>kukumo-project</artifactId>
        <version>${revision}</version>
        <relativePath>../../pom.xml</relativePath>
    </parent>
    ...

Bill of Materials (BOM)

Defines all the dependency versions that would be used along the entire project. This is important to reduce the complexity of dependency conflicts where several modules are put together.

Each module should import the bom as follows:

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>es.iti.kukumo</groupId>
                <artifactId>kukumo-bom</artifactId>
                <version>${revision}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

Since the dependency versions are centralized in the bom file, version should not be present when declaring a dependency for a module. In case of dependencies not present in the bom, update the bom with the new dependency prior to include it in the module pom:

        <dependency>
            <groupId>commons-cli</groupId>
            <artifactId>commons-cli</artifactId>
        </dependency>

Core modules

These modules are the actual implementation of Kukumo

  • Kukumo API: minimum interface to be required by plugins
  • Kukumo Core: testing engine and built-in contributions (data types, Gherkin support, etc)
  • Kukumo LSP: language server protocol implementation
  • Kukumo Maven Plugin: Maven plugin that allows bind a Kukumo execution to the verify phase

Plugin modules

  • REST steps
  • Database steps
  • I/O steps
  • AMQP steps
  • HTML report
  • Cucumber JSON transformer

Support modules

They are independent Maven libraries that, although they are developed with the aim of being used by Kukumo, they could be used in other projects. Most of them are meant to be moved to external repositories at some point in time.

  • Jext: library used as base of the plugin architecture of Kukumo
  • Gherkin Parser: simple parser for the Gherkin syntax
  • Distribution Maven Plugin: Maven plugin that creates a distributable JAR with the Kukumo command-line launcher