Skip to content

Packages and Maven artifacts

Alexander Yevsyukov edited this page Oct 29, 2025 · 5 revisions

Production and tool artifacts

As Spine is an SDK, its subproject may offer the following kinds of the artifacts:

  • Production code — the API which is used by end users.

    For example, the Validation library provides the classes and interfaces that are a part of the Validation Runtime. This is the Production code.

  • Tools code — the code which participates on development and build time.

    For example, the Validation Library has plugins for the Spine Compiler which generate the code validating Protobuf types.

  • Testing utilities — the code which helps in testing the API which uses the Production code.

    This is NOT the code arranged as test fixtures using the java-test-fixtures plugin.

    This is the "production" code for writing tests which is going to be used as a testImplementation or testFixturesImplementation dependency in end user tests.

    For example, the Spine Logging Library offers the Testlib artifact which helps in testing logging in the Production code. As such, this is also a tools artifact.

The rules of dependencies

The code of Tools is likely to have the dependency on the Production code.

The Production code must NOT have dependencies on the code of Tools.

Testing utilities depend on the Production code. Testing utilities are used by other test fixtures or tests.

Packages in Java and Kotlin code

In order to highlight this separation, we have the following conventions:

  • Production codey goes as a sub-package under io.spine.

    For example, the User Management Library would have the package io.spine.users.

  • The code of tools goes as a sub-package under io.spine.tools.

    For example, the Spine Compiler goes under the package io.spine.tools.compiler.

  • Testing utilities goes under the io.spine.testing package.

    For example, the Logging Testlib code goes under io.spine.testing.logging.

Maven artifacts

  • Production artifacts go under the group io.spine and must have the spine- prefix in the artifact name.

    For example, the Spine Logging library would have the this Maven coordinates: io.spine:spine-logging:2.0.1.

  • Tool artifacts go under the io.spine.tools group and do NOT have the spine- prefix in the artifact name.

    For example, the Spine Compiler artifact has the following Maven coordinates: io.spine.tools:compiler:2.2.5.

  • Testing utilities go under the io.spine.tools group because they are part of the development cycle.

    These artifacts have the spine- prefix and -testlib suffix: io.spine.tools:spine-logging-testlib:2.1.0.

Clone this wiki locally