Tentackle BOM — Bill of Materials¶
Overview and Motivation¶
A Tentackle application typically depends on several Tentackle modules at once
(tentackle-pdo, tentackle-persistence, tentackle-fx-rdc, …). Pinning each module's version by
hand is error-prone and invites version skew. tentackle-bom solves this the standard Maven way:
it is a pom-packaged Bill of Materials whose <dependencyManagement> section declares the
matching version for every Tentackle runtime and test-support module.
Import it once and then depend on those modules without a <version> — the BOM supplies it,
guaranteeing every module comes from the same release.
What the BOM Manages¶
| Kind | Artifacts |
|---|---|
| Runtime modules | tentackle-common, -core, -sql, -session, -database, -jta, -pdo, -domain, -persistence, -update, -i18n, -quic, -quiche, -keyring, -model, -log-slf4j, -log-log4j2v, -script-groovy, -script-ruby, -script-jsr, -fx, -fx-atlanta, -fx-rdc, -fx-rdc-poi, -fx-rdc-update, -web |
Test support (managed with test scope) |
tentackle-pdo-mock, tentackle-test-pdo, tentackle-test-fx-rdc |
Not managed are the build-tooling artifacts: the Maven plugins (tentackle-maven-plugin,
tentackle-sql-maven-plugin, tentackle-wizard-maven-plugin, …), tentackle-maven-support,
tentackle-build-support, the wurblets and the project archetype. An imported BOM only fills
<dependencyManagement> — it never reaches <pluginManagement> — so plugin versions must be set
explicitly (see below).
The BOM inherits from tentackle-parent, and Maven imports a BOM's effective dependency
management, including what it inherits. Importing tentackle-bom therefore also aligns the
third-party dependencies Tentackle is built and tested with — JavaFX, log4j, SLF4J, Groovy, JRuby,
POI and others, some of them with a preset scope (e.g. H2, TestNG and JUnit as test). Your own
<dependencyManagement> entries take precedence over imported ones, so declare a third-party
version yourself if you need a different one.
Using the BOM¶
Import it with <type>pom</type> and <scope>import</scope> in your project's (or parent's)
<dependencyManagement>. Keep the Tentackle version in a property, so the BOM and the plugins
stay in sync:
<properties>
<tentackle.version>25.20.0.0</tentackle.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.tentackle</groupId>
<artifactId>tentackle-bom</artifactId>
<version>${tentackle.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Then declare the modules you need, version-free. The test-support modules need no <scope> either,
as the BOM already manages them as test:
<dependencies>
<dependency>
<groupId>org.tentackle</groupId>
<artifactId>tentackle-fx-rdc</artifactId>
</dependency>
<dependency>
<groupId>org.tentackle</groupId>
<artifactId>tentackle-test-pdo</artifactId>
</dependency>
</dependencies>
Versioning the Plugins¶
The Tentackle plugins, and any Tentackle artifacts declared as dependencies of a plugin (such as
tentackle-persistence-wurblets for the wurbelizer, or tentackle-script-groovy for the check
plugin), are resolved outside the project's dependency management. Give them the same property:
<plugin>
<groupId>org.tentackle</groupId>
<artifactId>tentackle-maven-plugin</artifactId>
<version>${tentackle.version}</version>
</plugin>
Projects generated from the project archetype already wire the BOM and the plugin versions in this way — see the Quickstart.
See also¶
- Tentackle Modules — what each managed module does.
- Tentackle Project Archetype
- Quickstart