Skip to content
Christoph Deppisch edited this page Oct 27, 2023 · 8 revisions

Welcome to Citrus 4.0!

This summary is here to share our strategy, ideas and all major changes that are part of Citrus 4.0!

Objectives

Citrus 4.0 is a major release mainly driven by the migration form javax.* to jakarta.*. The new version brings many major updates of dependency projects (e.g. Spring, Apache Camel, Cucumber, Selenium) because of that move.

Of course the new major version also addresses many improvements and fixes. That being said we try to keep breaking changes on a low-level in order to provide a smooth migration from former versions. Due to the breaking changes in the many javax APIs this might not always be possible though. People coming from Citrus 3.x should have a look at the 3.x migration guide.

Here are the main objectives we have with Citrus 4.0

  • Update to Java 17
  • Move to groupId org.citrusframework
  • Update dependencies to latest major versions
  • Move from javax.* to jakarta.*
  • Polyglot test runner support (XML, Groovy and YAML)
  • Remove deprecated modules and code

--

Java 17

The Citrus 4.0 bits are compiled with Java 17. This means you need to use Java 17 as a minimum to run Citrus. We recommend to use the following setup:

  • Java 17+
  • Maven 3.9+
  • Runtime, one of
    • JUnit Jupiter 5.10+
    • TestNG 7.8+
    • Cucumber 7.14+
    • JUnit 4.13+
    • Quarkus Test 3.4+

New Maven groupId "org.citrusframework"

Citrus 4.0 uses a new Maven groupId org.citrusframework. Before that Citrus has been using com.consol.citrus as a groupId because the company ConSol Software GmbH has been the driving force behind Citrus for over a decade.

With the move to org.citrusframework we decided to happily comply with the OpenSource nature of the project as the project receives valuable contributions from many different companies these days.

Please update the groupId in your Maven pom.xml accordingly when updating to Citrus 4.0. The packages of all Citrus Java classes have also changed from com.consol.citrus to org.citrusframework so please replace all occurrences and imports accordingly as you update.

Dependency update

Citrus depends on many fantastic OSS projects and with the move to the Jakarta API many of them did have major version updates in the recent past. Citrus now aligns with the latest and greatest versions these libraries.

The new library versions used in Citrus 4.0 are:

  • JUnit Jupiter 5.10.0
  • TestNG 7.8.0
  • Cucumber 7.14.0
  • Quarkus Test 3.4.2
  • Apache Camel 4.1.0
  • ActiveMQ Artemis 2.31.0
  • ActiveMQ 5.18.2
  • Cucumber 7.14.0
  • Knative Client 6.9.0
  • Kubernetes Client 6.9.0
  • Netty 4.1.100.Final
  • SLF4J 2.0.9
  • SnakeYAML 2.2
  • Spring Framework 6.0.13
  • Testcontainers 1.19.1
  • PostrgeSQL 42.6.0

Move to Jakarta API

The whole industry faced a quite important switch from javax.* to jakarta.* APIs. The migration often is not very easy and the Citrus team is happy to have tackled this move with the new major version update.

For you as a user this move may not cause any trouble because the Citrus dependencies are all using the new Jakarta APIs already. In case you are using Citrus in combination with an older servlet container or with a library that still uses the javax APIs it may be time to also update these dependencies in your project.

Polyglot test runner support

Citrus provides many ways to write test cases. The most popular ones are using the Java DSL and the Spring bean XML syntax. In addition to that you can now choose to write Citrus tests in pure XML, YAML or Groovy. All of them are equally in its feature set and you can adapt the test language to your individual requirements (not everybody is a Java expert and this is fine).

Removed modules

Sometimes it is the time to say goodbye. A new major version is always a good point to get rid of obsolete and outdated things. Some Citrus modules are discontinued and have been removed from the main Citrus project. This does not mean that these bits are completely gone. Some of these modules may continue in a separate project and are simply not released as part of the main project anymore.

The removed modules are:

  • citrus-java-dsl (deprecated Java domain specific language that was based on the TestDesigner interface)
  • citrus-arquillian (Arquillian integration to run Citrus as part of the Arquillian framework)
  • citrus-db (JDBC server implementation that is able to simulate any JDBC driver and database)
  • citrus-remote (Run Citrus via remote Http tunnel on a foreign server)

The citrus-db (citrus-db repository) and citrus-remote (citrus-remote repository) modules have been moved to separate modules and the community will decide how to further maintain the bits.

Welcome Citrus 4.0!

Let's use this opportunity to thank everybody involved in making this Citrus 4 release happen. The Citrus community did a tremendous job to brings this all together! The Citrus team is very proud to have a new version of Citrus available that after 16+ years of development still works and is up-to-date with the latest and greatest Software libraries out there! THANK YOU!

Clone this wiki locally