You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2024/04/05 15:15:41 UTC

(plc4x-extras) branch main updated: chore: Get the Java part building again.

This is an automated email from the ASF dual-hosted git repository.

cdutz pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/plc4x-extras.git


The following commit(s) were added to refs/heads/main by this push:
     new cf8ca70  chore: Get the Java part building again.
cf8ca70 is described below

commit cf8ca709780ba40a7803fa098dc442d2ecd8b3db
Author: Christofer Dutz <cd...@apache.org>
AuthorDate: Fri Apr 5 17:15:33 2024 +0200

    chore: Get the Java part building again.
---
 .asf.yaml                                          |  75 +++
 plc4c/pom.xml                                      | 274 +++++++++++
 plc4go/pom.xml                                     | 529 ++++++++++++++++++++
 plc4j/examples/hello-ads-telemetry/pom.xml         |  14 -
 plc4j/examples/hello-cloud-google/pom.xml          |  15 +-
 plc4j/examples/hello-connectivity-mqtt/pom.xml     |   5 +
 plc4j/examples/hello-discovery/pom.xml             |  20 -
 .../examples/hello-influx-data-collection/pom.xml  |   1 +
 plc4j/examples/hello-integration-iotdb/pom.xml     |  16 +-
 plc4j/examples/hello-nats/pom.xml                  |  14 -
 plc4j/examples/hello-opm/pom.xml                   |  25 +-
 plc4j/examples/hello-webservice/pom.xml            |  17 +-
 plc4j/examples/hello-world-kotlin/pom.xml          |  27 +-
 .../hello-world-plc4x-discover-and-browse/pom.xml  |  25 +-
 plc4j/examples/hello-world-plc4x-read/pom.xml      |  20 -
 plc4j/examples/hello-world-plc4x-subscribe/pom.xml |  21 -
 plc4j/examples/hello-world-plc4x-write/pom.xml     |  20 -
 plc4j/examples/plc4j-s7event/pom.xml               |  49 +-
 .../plc4j/s7event/PlcCycSubscriptionS7400H.java    |   3 -
 .../plc4j/s7event/PlcEventSubscriptionS7400H.java  |   2 -
 .../examples/plc4j/s7event/PlcReadDataS7400H.java  |   2 -
 .../examples/plc4j/s7event/PlcReadS71200.java      |   2 -
 .../plc4j/s7event/PlcReadWriteStrings.java         |   2 -
 .../plc4j/s7event/PlcSzlRequestS7400H.java         |   2 -
 plc4j/examples/poll-loop/pom.xml                   |  14 -
 plc4j/examples/pom.xml                             |  40 +-
 plc4j/integrations/apache-calcite/pom.xml          |  40 +-
 plc4j/integrations/apache-kafka/pom.xml            | 377 +++++++-------
 .../apache/plc4x/kafka/config/SourceConfig.java    |   4 -
 .../apache-nifi/nifi-plc4x-nar/pom.xml             |  22 +-
 .../apache-nifi/nifi-plc4x-processors/pom.xml      | 310 ++++++------
 plc4j/integrations/apache-nifi/pom.xml             |   4 +-
 plc4j/integrations/pom.xml                         |   2 +-
 plc4j/pom.xml                                      | 213 ++++++++
 plc4j/tools/opcua-server/pom.xml                   |  49 +-
 .../plc4x/java/opcuaserver/OpcuaPlcDriverTest.java |  14 +-
 plc4j/tools/plc4x-server/pom.xml                   |  28 +-
 plc4j/{integrations => tools}/pom.xml              |  32 +-
 plc4j/tools/ui/backend/pom.xml                     |  17 -
 plc4j/tools/ui/frontend/pom.xml                    | 184 ++++---
 .../src/generated/plc4j-tools-ui-frontend.ts       |   4 +-
 plc4j/tools/ui/pom.xml                             |   7 +
 pom.xml                                            | 544 +++++++++++++++++++++
 43 files changed, 2261 insertions(+), 824 deletions(-)

diff --git a/.asf.yaml b/.asf.yaml
new file mode 100644
index 0000000..cab3dfb
--- /dev/null
+++ b/.asf.yaml
@@ -0,0 +1,75 @@
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#    https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+# note: documentation can be found here https://cwiki.apache.org/confluence/display/INFRA/Git+-+.asf.yaml+features
+
+github:
+  description: PLC4X The Industrial IoT adapter
+  homepage: https://plc4x.apache.org/
+
+  dependabot_alerts:  true
+  dependabot_updates: false
+
+  labels:
+    - java
+    - c
+    - go
+    - python
+    - net
+
+  features:
+    wiki: true
+    issues: true
+    projects: true
+
+  enabled_merge_buttons:
+    squash: true
+    merge: false
+    rebase: false
+
+  del_branch_on_merge: true
+
+  # Attempt to make the auto-generated github emails more easily readable in email clients.
+  custom_subjects:
+    new_pr: "[PR] {title}"
+    close_pr: "Re: [PR] {title}"
+    comment_pr: "Re: [PR] {title}"
+    diffcomment: "Re: [PR] {title}"
+    merge_pr: "Re: [PR] {title}"
+    new_issue: "[I] {title}"
+    comment_issue: "Re: [I] {title}"
+    close_issue: "Re: [I] {title}"
+    catchall: "[GH] {title}"
+    new_discussion: "[D] {title}"
+    edit_discussion: "Re: [D] {title}"
+    close_discussion: "Re: [D] {title}"
+    close_discussion_with_comment: "Re: [D] {title}"
+    reopen_discussion: "Re: [D] {title}"
+    new_comment_discussion: "Re: [D] {title}"
+    edit_comment_discussion: "Re: [D] {title}"
+    delete_comment_discussion: "Re: [D] {title}"
+
+notifications:
+  commits:              commits@plc4x.apache.org
+  issues:               issues@plc4x.apache.org
+  discussions:          dev@plc4x.apache.org
+  pullrequests_status:  dev@plc4x.apache.org
+  pullrequests_comment: dev@plc4x.apache.org
+  # Send dependabot PRs to commits@ instead
+  pullrequests_bot_dependabot: commits@plc4x.apache.org
diff --git a/plc4c/pom.xml b/plc4c/pom.xml
new file mode 100644
index 0000000..396e8e4
--- /dev/null
+++ b/plc4c/pom.xml
@@ -0,0 +1,274 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      https://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.plc4x</groupId>
+    <artifactId>plc4x-extras-parent</artifactId>
+    <version>0.13.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>plc4c-extras</artifactId>
+  <packaging>pom</packaging>
+
+  <name>PLC4C-Extras</name>
+  <description>Examples, integration modules and tools for C.</description>
+
+  <properties>
+    <project.build.outputTimestamp>2024-02-16T14:53:02Z</project.build.outputTimestamp>
+    <unity.version>2.5.2</unity.version>
+    <!-- Tell Sonar where to find the sources -->
+    <!--sonar.sources></sonar.sources-->
+    <sonar.sources>api,drivers,examples,integrations,spi,transports</sonar.sources>
+    <sonar.cfamily.build-wrapper-output>${project.build.directory}/build-wrapper-output</sonar.cfamily.build-wrapper-output>
+    <option.with-proxies>OFF</option.with-proxies>
+  </properties>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>com.googlecode.maven-download-plugin</groupId>
+        <artifactId>download-maven-plugin</artifactId>
+        <executions>
+          <!--
+            Get additional stuff we need for the build.
+          -->
+          <execution>
+            <id>get-unity</id>
+            <phase>generate-sources</phase>
+            <goals>
+              <goal>wget</goal>
+            </goals>
+            <configuration>
+              <url>https://github.com/ThrowTheSwitch/Unity/archive/v${unity.version}.zip</url>
+              <unpack>true</unpack>
+              <outputDirectory>${project.build.directory}/dependency</outputDirectory>
+            </configuration>
+          </execution>
+          <!--
+            Get ClangFormat.cmake
+          -->
+          <!--execution>
+            <id>get-clang-format</id>
+            <phase>generate-sources</phase>
+            <goals>
+              <goal>wget</goal>
+            </goals>
+            <configuration>
+              <url>https://raw.githubusercontent.com/zemasoft/clangformat-cmake/master/cmake/ClangFormat.cmake</url>
+              <unpack>true</unpack>
+              <outputDirectory>${project.build.directory}/dependency/clang-format</outputDirectory>
+            </configuration>
+          </execution-->
+        </executions>
+      </plugin>
+
+      <!-- Transform the ParserSerializer tests into c code -->
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>xml-maven-plugin</artifactId>
+        <version>1.1.0</version>
+        <executions>
+          <!--execution>
+            <id>generate-modbus-tests</id>
+            <phase>process-resources</phase>
+            <goals>
+              <goal>transform</goal>
+            </goals>
+            <configuration>
+              <transformationSets>
+                <transformationSet>
+                  <dir>../protocols/modbus/src/test/resources/protocols/modbus</dir>
+                  <includes>ParserSerializerTestsuite.xml</includes>
+                  <stylesheet>build-utils/parser-serializer-testcase-generator.xsl</stylesheet>
+                  <outputDir>generated-sources/modbus/test</outputDir>
+                  <fileMappers>
+                    <fileMapper implementation="org.codehaus.plexus.components.io.filemappers.FileExtensionMapper">
+                      <targetExtension>.c</targetExtension>
+                    </fileMapper>
+                  </fileMappers>
+                </transformationSet>
+              </transformationSets>
+            </configuration>
+          </execution-->
+          <execution>
+            <id>generate-plc4x-tests</id>
+            <phase>process-resources</phase>
+            <goals>
+              <goal>transform</goal>
+            </goals>
+            <configuration>
+              <transformationSets>
+                <transformationSet>
+                  <dir>../protocols/plc4x/src/test/resources/protocols/plc4x</dir>
+                  <includes>ParserSerializerTestsuite.xml</includes>
+                  <stylesheet>build-utils/parser-serializer-testcase-generator.xsl</stylesheet>
+                  <outputDir>generated-sources/plc4x/test</outputDir>
+                  <fileMappers>
+                    <fileMapper implementation="org.codehaus.plexus.components.io.filemappers.FileExtensionMapper">
+                      <targetExtension>.c</targetExtension>
+                    </fileMapper>
+                  </fileMappers>
+                </transformationSet>
+              </transformationSets>
+            </configuration>
+          </execution>
+          <execution>
+            <id>generate-s7-tests</id>
+            <phase>process-resources</phase>
+            <goals>
+              <goal>transform</goal>
+            </goals>
+            <configuration>
+              <transformationSets>
+                <transformationSet>
+                  <dir>../protocols/s7/src/test/resources/protocols/s7</dir>
+                  <includes>ParserSerializerTestsuite.xml</includes>
+                  <stylesheet>build-utils/parser-serializer-testcase-generator.xsl</stylesheet>
+                  <outputDir>generated-sources/s7/test</outputDir>
+                  <fileMappers>
+                    <fileMapper implementation="org.codehaus.plexus.components.io.filemappers.FileExtensionMapper">
+                      <targetExtension>.c</targetExtension>
+                    </fileMapper>
+                  </fileMappers>
+                </transformationSet>
+              </transformationSets>
+            </configuration>
+          </execution>
+        </executions>
+        <dependencies>
+          <dependency>
+            <groupId>net.sf.saxon</groupId>
+            <artifactId>Saxon-HE</artifactId>
+            <version>12.4</version>
+          </dependency>
+        </dependencies>
+      </plugin>
+
+      <!--
+        Do the actual build.
+      -->
+      <plugin>
+        <groupId>com.googlecode.cmake-maven-project</groupId>
+        <artifactId>cmake-maven-plugin</artifactId>
+        <executions>
+          <!-- TODO: Commented out for now as when running in jenkins for code analysis, the second run would overwrite the results of the first -->
+          <!-- Generate the configuration for the main compilation -->
+          <!--execution>
+            <id>cmake-generate-compile</id>
+            <phase>compile</phase>
+            <goals>
+              <goal>generate</goal>
+            </goals>
+          </execution>
+          <!- Compile the main code ->
+          <execution>
+            <id>cmake-execute-compile</id>
+            <phase>compile</phase>
+            <goals>
+              <goal>compile</goal>
+            </goals>
+          </execution-->
+          <!-- Generate the configuration for the test compilation -->
+          <execution>
+            <id>cmake-generate-test-compile</id>
+            <phase>generate-test-sources</phase>
+            <goals>
+              <goal>generate</goal>
+            </goals>
+            <configuration>
+              <options>
+                <option>-DUNITY_VERSION:STRING=${unity.version}</option>
+                <option>-DBUILD_PHASE=test-compile</option>
+              </options>
+            </configuration>
+          </execution>
+          <!-- Compile the test code -->
+          <execution>
+            <id>cmake-execute-test-compile</id>
+            <phase>test-compile</phase>
+            <goals>
+              <goal>compile</goal>
+            </goals>
+          </execution>
+          <!-- Execute the tests -->
+          <execution>
+            <id>cmake-run-tests</id>
+            <phase>test</phase>
+            <goals>
+              <goal>test</goal>
+            </goals>
+            <configuration>
+              <buildDirectory>${project.build.directory}/build</buildDirectory>
+            </configuration>
+          </execution>
+        </executions>
+        <configuration>
+          <!--
+            Actually the path to the CMakeList.txt file which then again
+            tells to tool where to find the sources.
+          -->
+          <sourcePath>${project.basedir}</sourcePath>
+          <!--
+            Path to where the build configuration is generated
+            (This directory is then used in the compile step to actually perform the build)
+          -->
+          <targetPath>${project.build.directory}/build</targetPath>
+          <!--
+            Name of the generator the compile step will be executing.
+          -->
+          <generator>${cmake.generator}</generator>
+          <!-- The directory where the "generate" step generated the build configuration -->
+          <projectDirectory>${project.build.directory}/build</projectDirectory>
+        </configuration>
+      </plugin>
+
+      <!-- For this module deploying maven artifacts doesn't make any sense -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-deploy-plugin</artifactId>
+        <configuration>
+          <skip>true</skip>
+        </configuration>
+      </plugin>
+    </plugins>
+    <!--
+      Developers working in plc4c will probably use an IDE like CLion to edit just this
+      Part of the project. These IDEs generate some work-directories we need to exclude.
+    -->
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.rat</groupId>
+          <artifactId>apache-rat-plugin</artifactId>
+          <configuration>
+            <excludes combine.children="append">
+              <exclude>cmake-*/**</exclude>
+              <exclude>.cmake/**</exclude>
+            </excludes>
+          </configuration>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+
+</project>
\ No newline at end of file
diff --git a/plc4go/pom.xml b/plc4go/pom.xml
new file mode 100644
index 0000000..0bac883
--- /dev/null
+++ b/plc4go/pom.xml
@@ -0,0 +1,529 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      https://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.plc4x</groupId>
+    <artifactId>plc4x-extras-parent</artifactId>
+    <version>0.13.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>plc4go-extras</artifactId>
+  <packaging>mvn-golang</packaging>
+
+  <name>PLC4Go-Extras</name>
+  <description>Examples, integration modules and tools for Go.</description>
+
+  <properties>
+    <project.build.outputTimestamp>2024-02-16T14:53:02Z</project.build.outputTimestamp>
+    <!-- Tell Sonar where to find the sources -->
+    <sonar.sources>.</sonar.sources>
+    <sonar.inclusions>**</sonar.inclusions>
+    <sonar.exclusions>protocols/**/*</sonar.exclusions>
+
+    <sonar.tests>.</sonar.tests>
+    <sonar.test.inclusions>**/*_test.go</sonar.test.inclusions>
+    <sonar.coverage.exclusions>**/*_test.go,spi/testutils/*,**/*_plc4xgen.go,tests/**/*,tools/**/*
+    </sonar.coverage.exclusions>
+
+    <sonar.go.exclusions>**/vendor/**,**/*_mock.go,**/mock_*.go</sonar.go.exclusions>
+    <!-- TODO: add json output to sonar.go.tests.reportPaths=${project.basedir}/target/go-test-report.out-->
+    <sonar.go.coverage.reportPaths>${project.basedir}/target/coverage.out</sonar.go.coverage.reportPaths>
+
+    <maven.install.skip>true</maven.install.skip>
+    <!-- The deploy-goal of the go plugin uses go install to install the result, unfortunately disabling the deploy, disables the go install. -->
+    <!--maven.deploy.skip>true</maven.deploy.skip-->
+
+    <go.cover.flag>-coverprofile=target/coverage.out</go.cover.flag>
+
+    <go.stringer.version>v0.20.0</go.stringer.version>
+    <go.junit-report.version>v2.0.1</go.junit-report.version>
+    <go.gotestsum.version>v1.11.0</go.gotestsum.version>
+    <go.mockery.version>v2.42.2</go.mockery.version>
+  </properties>
+
+  <build>
+    <sourceDirectory>pkg</sourceDirectory>
+    <plugins>
+      <!--
+        Create surefire folder for report, as this is required to exist.
+      -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-antrun-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>generate-sources</id>
+            <phase>generate-sources</phase>
+            <goals>
+              <goal>run</goal>
+            </goals>
+            <configuration>
+              <target>
+                <mkdir dir="target${file.separator}surefire-reports" />
+              </target>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+
+      <!--
+        Copy the test-resources in here
+      -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>unpack-protocol-test-suites</id>
+            <phase>generate-resources</phase>
+            <goals>
+              <goal>unpack</goal>
+            </goals>
+            <configuration>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>org.apache.plc4x</groupId>
+                  <artifactId>plc4x-protocols-ab-eth</artifactId>
+                  <classifier>tests</classifier>
+                  <type>test-jar</type>
+                  <outputDirectory>${project.basedir}/assets/testing</outputDirectory>
+                  <includes>**/*.xml</includes>
+                  <excludes>META-INF/**</excludes>
+                </artifactItem>
+                <artifactItem>
+                  <groupId>org.apache.plc4x</groupId>
+                  <artifactId>plc4x-protocols-ads</artifactId>
+                  <classifier>tests</classifier>
+                  <type>test-jar</type>
+                  <outputDirectory>${project.basedir}/assets/testing</outputDirectory>
+                  <includes>**/*.xml</includes>
+                  <excludes>META-INF/**</excludes>
+                </artifactItem>
+                <artifactItem>
+                  <groupId>org.apache.plc4x</groupId>
+                  <artifactId>plc4x-protocols-bacnetip</artifactId>
+                  <classifier>tests</classifier>
+                  <type>test-jar</type>
+                  <outputDirectory>${project.basedir}/assets/testing</outputDirectory>
+                  <includes>**/*.xml</includes>
+                  <excludes>META-INF/**</excludes>
+                </artifactItem>
+                <artifactItem>
+                  <groupId>org.apache.plc4x</groupId>
+                  <artifactId>plc4x-protocols-c-bus</artifactId>
+                  <classifier>tests</classifier>
+                  <type>test-jar</type>
+                  <outputDirectory>${project.basedir}/assets/testing</outputDirectory>
+                  <includes>**/*.xml</includes>
+                  <excludes>META-INF/**</excludes>
+                </artifactItem>
+                <artifactItem>
+                  <groupId>org.apache.plc4x</groupId>
+                  <artifactId>plc4x-protocols-df1</artifactId>
+                  <classifier>tests</classifier>
+                  <type>test-jar</type>
+                  <outputDirectory>${project.basedir}/assets/testing</outputDirectory>
+                  <includes>**/*.xml</includes>
+                  <excludes>META-INF/**</excludes>
+                </artifactItem>
+                <artifactItem>
+                  <groupId>org.apache.plc4x</groupId>
+                  <artifactId>plc4x-protocols-eip</artifactId>
+                  <classifier>tests</classifier>
+                  <type>test-jar</type>
+                  <outputDirectory>${project.basedir}/assets/testing</outputDirectory>
+                  <includes>**/*.xml</includes>
+                  <excludes>META-INF/**</excludes>
+                </artifactItem>
+                <artifactItem>
+                  <groupId>org.apache.plc4x</groupId>
+                  <artifactId>plc4x-protocols-firmata</artifactId>
+                  <classifier>tests</classifier>
+                  <type>test-jar</type>
+                  <outputDirectory>${project.basedir}/assets/testing</outputDirectory>
+                  <includes>**/*.xml</includes>
+                  <excludes>META-INF/**</excludes>
+                </artifactItem>
+                <artifactItem>
+                  <groupId>org.apache.plc4x</groupId>
+                  <artifactId>plc4x-protocols-knxnetip</artifactId>
+                  <classifier>tests</classifier>
+                  <type>test-jar</type>
+                  <outputDirectory>${project.basedir}/assets/testing</outputDirectory>
+                  <includes>**/*.xml</includes>
+                  <excludes>META-INF/**,org/**</excludes>
+                </artifactItem>
+                <artifactItem>
+                  <groupId>org.apache.plc4x</groupId>
+                  <artifactId>plc4x-protocols-modbus</artifactId>
+                  <classifier>tests</classifier>
+                  <type>test-jar</type>
+                  <outputDirectory>${project.basedir}/assets/testing</outputDirectory>
+                  <includes>**/*.xml</includes>
+                  <excludes>META-INF/**</excludes>
+                </artifactItem>
+                <artifactItem>
+                  <groupId>org.apache.plc4x</groupId>
+                  <artifactId>plc4x-protocols-opcua</artifactId>
+                  <classifier>tests</classifier>
+                  <type>test-jar</type>
+                  <outputDirectory>${project.basedir}/assets/testing</outputDirectory>
+                  <includes>**/*.xml</includes>
+                  <excludes>META-INF/**,org/**</excludes>
+                </artifactItem>
+                <artifactItem>
+                  <groupId>org.apache.plc4x</groupId>
+                  <artifactId>plc4x-protocols-s7</artifactId>
+                  <classifier>tests</classifier>
+                  <type>test-jar</type>
+                  <outputDirectory>${project.basedir}/assets/testing</outputDirectory>
+                  <includes>**/*.xml</includes>
+                  <excludes>META-INF/**,org/**</excludes>
+                </artifactItem>
+                <artifactItem>
+                  <groupId>org.apache.plc4x</groupId>
+                  <artifactId>plc4x-protocols-simulated</artifactId>
+                  <classifier>tests</classifier>
+                  <type>test-jar</type>
+                  <outputDirectory>${project.basedir}/assets/testing</outputDirectory>
+                  <includes>**/*.xml</includes>
+                  <excludes>META-INF/**,org/**</excludes>
+                </artifactItem>
+              </artifactItems>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+
+      <plugin>
+        <groupId>com.igormaznitsa</groupId>
+        <artifactId>mvn-golang-wrapper</artifactId>
+        <version>2.3.10</version>
+        <extensions>true</extensions>
+        <executions>
+          <!-- add tools required for generating code, test, etc-->
+          <execution>
+            <id>get-stringer</id>
+            <phase>initialize</phase>
+            <goals>
+              <goal>install</goal>
+            </goals>
+            <configuration>
+              <packages>
+                <package>golang.org/x/tools/cmd/stringer@${go.stringer.version}</package>
+              </packages>
+            </configuration>
+          </execution>
+          <execution>
+            <id>get-go-junit-report</id>
+            <phase>initialize</phase>
+            <goals>
+              <goal>install</goal>
+            </goals>
+            <configuration>
+              <packages>
+                <!-- use fork till https://github.com/jstemmer/go-junit-report/pull/162 is merged-->
+                <package>github.com/sruehl/go-junit-report/v2@${go.junit-report.version}</package>
+              </packages>
+            </configuration>
+          </execution>
+          <execution>
+            <id>get-gotestsum</id>
+            <phase>initialize</phase>
+            <goals>
+              <goal>install</goal>
+            </goals>
+            <configuration>
+              <packages>
+                <package>gotest.tools/gotestsum@${go.gotestsum.version}</package>
+              </packages>
+            </configuration>
+          </execution>
+          <execution>
+            <id>get-mockery</id>
+            <phase>initialize</phase>
+            <goals>
+              <goal>install</goal>
+            </goals>
+            <configuration>
+              <packages>
+                <package>github.com/vektra/mockery/v2@${go.mockery.version}</package>
+              </packages>
+            </configuration>
+          </execution>
+
+          <!-- Run the go code-generation -->
+          <execution>
+            <id>default-generate</id>
+            <phase>generate-sources</phase>
+            <goals>
+              <goal>generate</goal>
+            </goals>
+            <configuration>
+              <packages>
+                <!-- We want to format every package here, so we don't get dirty commits -->
+                <package>./...</package>
+              </packages>
+            </configuration>
+          </execution>
+
+          <!-- Generate mocks-->
+          <execution>
+            <id>generate-mocks</id>
+            <phase>process-sources</phase>
+            <goals>
+              <goal>custom</goal>
+            </goals>
+            <configuration>
+              <exec>mockery</exec>
+              <customCommand>--all</customCommand>
+              <packages>
+                <package>--with-expecter</package>
+              </packages>
+            </configuration>
+          </execution>
+
+          <!-- Processes code that uses old APIs and rewrites them use newer ones -->
+          <!--
+            REMARK: The default lifecycle defines this is run in the "validate" phase,
+            we redefine it to run in the process-sources so it also processes generated code.
+          -->
+          <execution>
+            <id>default-fix</id>
+            <phase>process-sources</phase>
+            <goals>
+              <goal>fix</goal>
+            </goals>
+          </execution>
+
+          <!-- Format the codebase correctly (this mainly has an effect on generated code) -->
+          <execution>
+            <id>default-fmt</id>
+            <phase>process-sources</phase>
+            <goals>
+              <goal>fmt</goal>
+            </goals>
+            <configuration>
+              <packages>
+                <!-- We want to format every package here so we don't get dirty commits -->
+                <package>./...</package>
+              </packages>
+            </configuration>
+          </execution>
+
+          <!-- Get all dependencies for test cases -->
+          <execution>
+            <id>get-test-dependencies</id>
+            <phase>generate-test-sources</phase>
+            <goals>
+              <goal>get</goal>
+            </goals>
+            <configuration>
+              <buildFlags>
+                <flag>-t</flag>
+              </buildFlags>
+              <packages>
+                <package>./...</package>
+              </packages>
+            </configuration>
+          </execution>
+
+          <!-- Disabling the default binding, because we're running a custom version after this -->
+          <execution>
+            <id>default-test</id>
+            <phase>test</phase>
+            <goals>
+              <goal>test</goal>
+            </goals>
+            <configuration>
+              <skip>true</skip>
+            </configuration>
+          </execution>
+
+          <execution>
+            <id>test</id>
+            <phase>test</phase>
+            <goals>
+              <goal>custom</goal>
+            </goals>
+            <configuration>
+              <skip>${skipTests}</skip>
+              <exec>gotestsum</exec>
+              <customCommand>--junitfile</customCommand>
+              <buildFlags>
+                <flag>target/surefire-reports/go-junit-report.xml</flag>
+                <flag>--</flag>
+                <flag>${go.cover.flag}</flag>
+              </buildFlags>
+              <packages>
+                <package>./...</package>
+              </packages>
+            </configuration>
+          </execution>
+
+          <execution>
+            <id>run-go-vet</id>
+            <phase>verify</phase>
+            <goals>
+              <goal>vet</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <packages>
+            <package>github.com/apache/plc4x/plc4go/pkg/api</package>
+          </packages>
+          <sources>${project.basedir}</sources>
+          <verbose>true</verbose>
+          <goVersion>1.22.0</goVersion>
+        </configuration>
+      </plugin>
+
+      <!-- Ensure we don't deploy anything -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-deploy-plugin</artifactId>
+        <configuration>
+          <skip>true</skip>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4x-protocols-ab-eth</artifactId>
+      <version>0.13.0-SNAPSHOT</version>
+      <type>test-jar</type>
+      <!-- Scope is 'provided' as this way it's not shipped with the driver -->
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4x-protocols-ads</artifactId>
+      <version>0.13.0-SNAPSHOT</version>
+      <type>test-jar</type>
+      <!-- Scope is 'provided' as this way it's not shipped with the driver -->
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4x-protocols-bacnetip</artifactId>
+      <version>0.13.0-SNAPSHOT</version>
+      <type>test-jar</type>
+      <!-- Scope is 'provided' as this way it's not shipped with the driver -->
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4x-protocols-c-bus</artifactId>
+      <version>0.13.0-SNAPSHOT</version>
+      <type>test-jar</type>
+      <!-- Scope is 'provided' as this way it's not shipped with the driver -->
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4x-protocols-df1</artifactId>
+      <version>0.13.0-SNAPSHOT</version>
+      <type>test-jar</type>
+      <!-- Scope is 'provided' as this way it's not shipped with the driver -->
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4x-protocols-eip</artifactId>
+      <version>0.13.0-SNAPSHOT</version>
+      <type>test-jar</type>
+      <!-- Scope is 'provided' as this way it's not shipped with the driver -->
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4x-protocols-firmata</artifactId>
+      <version>0.13.0-SNAPSHOT</version>
+      <type>test-jar</type>
+      <!-- Scope is 'provided' as this way it's not shipped with the driver -->
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4x-protocols-knxnetip</artifactId>
+      <version>0.13.0-SNAPSHOT</version>
+      <type>test-jar</type>
+      <!-- Scope is 'provided' as this way it's not shipped with the driver -->
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4x-protocols-modbus</artifactId>
+      <version>0.13.0-SNAPSHOT</version>
+      <type>test-jar</type>
+      <!-- Scope is 'provided' as this way it's not shipped with the driver -->
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4x-protocols-opcua</artifactId>
+      <version>0.13.0-SNAPSHOT</version>
+      <type>test-jar</type>
+      <!-- Scope is 'provided' as this way it's not shipped with the driver -->
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4x-protocols-s7</artifactId>
+      <version>0.13.0-SNAPSHOT</version>
+      <type>test-jar</type>
+      <!-- Scope is 'provided' as this way it's not shipped with the driver -->
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4x-protocols-simulated</artifactId>
+      <version>0.13.0-SNAPSHOT</version>
+      <type>test-jar</type>
+      <!-- Scope is 'provided' as this way it's not shipped with the driver -->
+      <scope>provided</scope>
+    </dependency>
+  </dependencies>
+
+  <profiles>
+    <profile>
+      <id>.os-windows</id>
+      <activation>
+        <os>
+          <family>windows</family>
+        </os>
+      </activation>
+      <properties>
+        <!--
+        Coverage doesn't work in windows because of a long path issue in cover.exe
+        Tracked upstream issue: https://github.com/golang/go/issues/60785
+        -->
+        <go.cover.flag>-v</go.cover.flag>
+      </properties>
+    </profile>
+  </profiles>
+</project>
\ No newline at end of file
diff --git a/plc4j/examples/hello-ads-telemetry/pom.xml b/plc4j/examples/hello-ads-telemetry/pom.xml
index 661eff0..f98750f 100644
--- a/plc4j/examples/hello-ads-telemetry/pom.xml
+++ b/plc4j/examples/hello-ads-telemetry/pom.xml
@@ -57,18 +57,4 @@
     </dependency>
   </dependencies>
 
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <configuration>
-          <usedDependencies combine.children="append">
-            <usedDependency>org.slf4j:log4j-over-slf4j</usedDependency>
-          </usedDependencies>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
 </project>
\ No newline at end of file
diff --git a/plc4j/examples/hello-cloud-google/pom.xml b/plc4j/examples/hello-cloud-google/pom.xml
index 8aa05eb..78f63a0 100644
--- a/plc4j/examples/hello-cloud-google/pom.xml
+++ b/plc4j/examples/hello-cloud-google/pom.xml
@@ -52,6 +52,7 @@
     <dependency>
       <groupId>joda-time</groupId>
       <artifactId>joda-time</artifactId>
+      <version>2.12.7</version>
     </dependency>
     <dependency>
       <groupId>io.jsonwebtoken</groupId>
@@ -72,18 +73,4 @@
     </dependency>
   </dependencies>
 
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <configuration>
-          <usedDependencies combine.children="append">
-            <usedDependency>org.slf4j:log4j-over-slf4j</usedDependency>
-          </usedDependencies>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
 </project>
\ No newline at end of file
diff --git a/plc4j/examples/hello-connectivity-mqtt/pom.xml b/plc4j/examples/hello-connectivity-mqtt/pom.xml
index b5d9d89..3e100d0 100644
--- a/plc4j/examples/hello-connectivity-mqtt/pom.xml
+++ b/plc4j/examples/hello-connectivity-mqtt/pom.xml
@@ -57,23 +57,28 @@
     <dependency>
       <groupId>com.fasterxml.jackson.dataformat</groupId>
       <artifactId>jackson-dataformat-yaml</artifactId>
+      <version>2.16.1</version>
     </dependency>
     <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
       <artifactId>jackson-databind</artifactId>
+      <version>2.16.1</version>
     </dependency>
     <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
       <artifactId>jackson-annotations</artifactId>
+      <version>2.16.1</version>
     </dependency>
     <dependency>
       <groupId>com.google.code.gson</groupId>
       <artifactId>gson</artifactId>
+      <version>2.10.1</version>
     </dependency>
 
     <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-lang3</artifactId>
+      <version>3.14.0</version>
     </dependency>
 
     <dependency>
diff --git a/plc4j/examples/hello-discovery/pom.xml b/plc4j/examples/hello-discovery/pom.xml
index b4a8f6e..b8ccfea 100644
--- a/plc4j/examples/hello-discovery/pom.xml
+++ b/plc4j/examples/hello-discovery/pom.xml
@@ -51,30 +51,10 @@
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
     </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-core</artifactId>
-      <!-- Overriding the default of "test" -->
-      <scope>compile</scope>
-    </dependency>
     <dependency>
       <groupId>ch.qos.logback</groupId>
       <artifactId>logback-classic</artifactId>
     </dependency>
   </dependencies>
 
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <configuration>
-          <usedDependencies combine.children="append">
-            <usedDependency>ch.qos.logback:logback-core</usedDependency>
-          </usedDependencies>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
 </project>
\ No newline at end of file
diff --git a/plc4j/examples/hello-influx-data-collection/pom.xml b/plc4j/examples/hello-influx-data-collection/pom.xml
index 8827eb1..f813dea 100644
--- a/plc4j/examples/hello-influx-data-collection/pom.xml
+++ b/plc4j/examples/hello-influx-data-collection/pom.xml
@@ -58,6 +58,7 @@
     <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-configuration2</artifactId>
+      <version>2.9.0</version>
     </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
diff --git a/plc4j/examples/hello-integration-iotdb/pom.xml b/plc4j/examples/hello-integration-iotdb/pom.xml
index 4ac2294..4023602 100644
--- a/plc4j/examples/hello-integration-iotdb/pom.xml
+++ b/plc4j/examples/hello-integration-iotdb/pom.xml
@@ -33,25 +33,11 @@
 
   <properties>
     <project.build.outputTimestamp>2024-02-16T14:53:02Z</project.build.outputTimestamp>
-    <iotdb.version>1.2.2</iotdb.version>
+    <iotdb.version>1.3.0</iotdb.version>
 
     <app.main.class>org.apache.plc4x.java.examples.integration.iotdb.PlcLogger</app.main.class>
   </properties>
 
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <configuration>
-          <usedDependencies combine.children="append">
-            <usedDependency>org.slf4j:log4j-over-slf4j</usedDependency>
-          </usedDependencies>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
   <dependencies>
     <dependency>
       <groupId>org.apache.plc4x</groupId>
diff --git a/plc4j/examples/hello-nats/pom.xml b/plc4j/examples/hello-nats/pom.xml
index 606a6ee..d47b9d8 100644
--- a/plc4j/examples/hello-nats/pom.xml
+++ b/plc4j/examples/hello-nats/pom.xml
@@ -66,18 +66,4 @@
     </dependency>
   </dependencies>
 
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <configuration>
-          <usedDependencies combine.children="append">
-            <usedDependency>org.slf4j:log4j-over-slf4j</usedDependency>
-          </usedDependencies>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
 </project>
\ No newline at end of file
diff --git a/plc4j/examples/hello-opm/pom.xml b/plc4j/examples/hello-opm/pom.xml
index 9e2fc75..6b5be3e 100644
--- a/plc4j/examples/hello-opm/pom.xml
+++ b/plc4j/examples/hello-opm/pom.xml
@@ -37,6 +37,11 @@
   </properties>
 
   <dependencies>
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4j-api</artifactId>
+      <version>0.13.0-SNAPSHOT</version>
+    </dependency>
     <dependency>
       <groupId>org.apache.plc4x</groupId>
       <artifactId>plc4j-opm</artifactId>
@@ -52,30 +57,10 @@
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
     </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-core</artifactId>
-      <!-- Overriding the default of "test" -->
-      <scope>compile</scope>
-    </dependency>
     <dependency>
       <groupId>ch.qos.logback</groupId>
       <artifactId>logback-classic</artifactId>
     </dependency>
   </dependencies>
 
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <configuration>
-          <usedDependencies combine.children="append">
-            <usedDependency>ch.qos.logback:logback-core</usedDependency>
-          </usedDependencies>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
 </project>
\ No newline at end of file
diff --git a/plc4j/examples/hello-webservice/pom.xml b/plc4j/examples/hello-webservice/pom.xml
index 8bc3ec6..1abaac8 100644
--- a/plc4j/examples/hello-webservice/pom.xml
+++ b/plc4j/examples/hello-webservice/pom.xml
@@ -50,14 +50,17 @@
     <dependency>
       <groupId>com.google.code.gson</groupId>
       <artifactId>gson</artifactId>
+      <version>2.10.1</version>
     </dependency>
     <dependency>
       <groupId>org.apache.httpcomponents</groupId>
       <artifactId>httpclient</artifactId>
+      <version>4.5.14</version>
     </dependency>
     <dependency>
       <groupId>org.apache.httpcomponents</groupId>
       <artifactId>httpcore</artifactId>
+      <version>4.4.16</version>
     </dependency>
 
     <dependency>
@@ -74,18 +77,4 @@
     </dependency>
   </dependencies>
 
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <configuration>
-          <usedDependencies combine.children="append">
-            <usedDependency>org.slf4j:log4j-over-slf4j</usedDependency>
-          </usedDependencies>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
 </project>
\ No newline at end of file
diff --git a/plc4j/examples/hello-world-kotlin/pom.xml b/plc4j/examples/hello-world-kotlin/pom.xml
index 07a210d..afe87d6 100644
--- a/plc4j/examples/hello-world-kotlin/pom.xml
+++ b/plc4j/examples/hello-world-kotlin/pom.xml
@@ -65,13 +65,13 @@
     <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-api</artifactId>
-      <version>${junit.jupiter.version}</version>
+      <version>5.10.2</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-engine</artifactId>
-      <version>${junit.jupiter.version}</version>
+      <version>5.10.2</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
@@ -139,29 +139,6 @@
           </execution>
         </executions>
       </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-assembly-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>make-assembly</id>
-            <phase>package</phase>
-            <goals>
-              <goal>single</goal>
-            </goals>
-            <configuration>
-              <archive>
-                <manifest>
-                  <mainClass>${app.main.class}</mainClass>
-                </manifest>
-              </archive>
-              <descriptorRefs>
-                <descriptorRef>jar-with-dependencies</descriptorRef>
-              </descriptorRefs>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
     </plugins>
   </build>
 </project>
\ No newline at end of file
diff --git a/plc4j/examples/hello-world-plc4x-discover-and-browse/pom.xml b/plc4j/examples/hello-world-plc4x-discover-and-browse/pom.xml
index af5f35a..c9c34bf 100644
--- a/plc4j/examples/hello-world-plc4x-discover-and-browse/pom.xml
+++ b/plc4j/examples/hello-world-plc4x-discover-and-browse/pom.xml
@@ -45,6 +45,12 @@
       <version>0.13.0-SNAPSHOT</version>
     </dependency>
 
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-lang3</artifactId>
+      <version>3.14.0</version>
+    </dependency>
+
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
@@ -57,25 +63,6 @@
       <groupId>ch.qos.logback</groupId>
       <artifactId>logback-classic</artifactId>
     </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-lang3</artifactId>
-    </dependency>
-
   </dependencies>
 
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <configuration>
-          <usedDependencies combine.children="append">
-            <usedDependency>org.slf4j:log4j-over-slf4j</usedDependency>
-          </usedDependencies>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
 </project>
\ No newline at end of file
diff --git a/plc4j/examples/hello-world-plc4x-read/pom.xml b/plc4j/examples/hello-world-plc4x-read/pom.xml
index 1416a7f..7721843 100644
--- a/plc4j/examples/hello-world-plc4x-read/pom.xml
+++ b/plc4j/examples/hello-world-plc4x-read/pom.xml
@@ -51,30 +51,10 @@
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
     </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-core</artifactId>
-      <!-- Overriding the default of "test" -->
-      <scope>compile</scope>
-    </dependency>
     <dependency>
       <groupId>ch.qos.logback</groupId>
       <artifactId>logback-classic</artifactId>
     </dependency>
   </dependencies>
 
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <configuration>
-          <usedDependencies combine.children="append">
-            <usedDependency>ch.qos.logback:logback-core</usedDependency>
-          </usedDependencies>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
 </project>
\ No newline at end of file
diff --git a/plc4j/examples/hello-world-plc4x-subscribe/pom.xml b/plc4j/examples/hello-world-plc4x-subscribe/pom.xml
index 3f619cd..850b2ef 100644
--- a/plc4j/examples/hello-world-plc4x-subscribe/pom.xml
+++ b/plc4j/examples/hello-world-plc4x-subscribe/pom.xml
@@ -56,31 +56,10 @@
       <groupId>org.slf4j</groupId>
       <artifactId>log4j-over-slf4j</artifactId>
     </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-core</artifactId>
-      <!-- Overriding the default of "test" -->
-      <scope>compile</scope>
-    </dependency>
     <dependency>
       <groupId>ch.qos.logback</groupId>
       <artifactId>logback-classic</artifactId>
     </dependency>
   </dependencies>
 
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <configuration>
-          <usedDependencies combine.children="append">
-            <usedDependency>ch.qos.logback:logback-core</usedDependency>
-            <usedDependency>org.slf4j:log4j-over-slf4j</usedDependency>
-          </usedDependencies>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
 </project>
\ No newline at end of file
diff --git a/plc4j/examples/hello-world-plc4x-write/pom.xml b/plc4j/examples/hello-world-plc4x-write/pom.xml
index 435953a..8fa769a 100644
--- a/plc4j/examples/hello-world-plc4x-write/pom.xml
+++ b/plc4j/examples/hello-world-plc4x-write/pom.xml
@@ -52,30 +52,10 @@
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
     </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-core</artifactId>
-      <!-- Overriding the default of "test" -->
-      <scope>compile</scope>
-    </dependency>
     <dependency>
       <groupId>ch.qos.logback</groupId>
       <artifactId>logback-classic</artifactId>
     </dependency>
   </dependencies>
 
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <configuration>
-          <usedDependencies combine.children="append">
-            <usedDependency>ch.qos.logback:logback-core</usedDependency>
-          </usedDependencies>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
 </project>
\ No newline at end of file
diff --git a/plc4j/examples/plc4j-s7event/pom.xml b/plc4j/examples/plc4j-s7event/pom.xml
index b2b60e5..bbbc69f 100644
--- a/plc4j/examples/plc4j-s7event/pom.xml
+++ b/plc4j/examples/plc4j-s7event/pom.xml
@@ -38,21 +38,6 @@
     <project.build.outputTimestamp>2024-02-16T14:53:02Z</project.build.outputTimestamp>
   </properties>
 
-  <!-- TODO: This is only needed, because the example accesses direct types of the S7 driver we should refactor this to something that is a pure PLC4X API type of thing -->
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-           <configuration>
-                <usedDependencies>
-                    <dependency>org.slf4j:slf4j-simple</dependency>
-                </usedDependencies>
-            </configuration>        
-      </plugin>
-    </plugins>
-  </build>
-
   <dependencies>
     <dependency>
       <groupId>org.apache.plc4x</groupId>
@@ -67,38 +52,36 @@
       <version>0.13.0-SNAPSHOT</version>
     </dependency>
 
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-classic</artifactId>
-    </dependency>
     <dependency>
       <groupId>commons-codec</groupId>
       <artifactId>commons-codec</artifactId>
-      <version>${commons-codec.version}</version>
+      <version>1.16.1</version>
     </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-lang3</artifactId>
+      <version>3.14.0</version>
+    </dependency>
+
     <dependency>
       <groupId>io.netty</groupId>
       <artifactId>netty-buffer</artifactId>
-      <version>${netty.version}</version>
+      <version>4.1.107.Final</version>
     </dependency>
     <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-lang3</artifactId>
-      <version>${commons-lang3.version}</version>
+      <groupId>io.netty</groupId>
+      <artifactId>netty-common</artifactId>
+      <version>4.1.107.Final</version>
     </dependency>
+
     <dependency>
       <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-simple</artifactId>
-      <version>${slf4j.version}</version>
+      <artifactId>slf4j-api</artifactId>
     </dependency>
     <dependency>
-      <groupId>io.netty</groupId>
-      <artifactId>netty-common</artifactId>
-      <version>${netty.version}</version>
+      <groupId>ch.qos.logback</groupId>
+      <artifactId>logback-classic</artifactId>
     </dependency>
+
   </dependencies>
 </project>
\ No newline at end of file
diff --git a/plc4j/examples/plc4j-s7event/src/main/java/org/apache/plc4x/examples/plc4j/s7event/PlcCycSubscriptionS7400H.java b/plc4j/examples/plc4j-s7event/src/main/java/org/apache/plc4x/examples/plc4j/s7event/PlcCycSubscriptionS7400H.java
index aeb0305..6b2b946 100644
--- a/plc4j/examples/plc4j-s7event/src/main/java/org/apache/plc4x/examples/plc4j/s7event/PlcCycSubscriptionS7400H.java
+++ b/plc4j/examples/plc4j-s7event/src/main/java/org/apache/plc4x/examples/plc4j/s7event/PlcCycSubscriptionS7400H.java
@@ -63,9 +63,6 @@ public class PlcCycSubscriptionS7400H implements ConnectionStateListener {
      * @param args the command line arguments
      */
     public static void main(String[] args) throws Exception {
-
-        System.setProperty(org.slf4j.simple.SimpleLogger.DEFAULT_LOG_LEVEL_KEY, "Info");        
-        
         PlcCycSubscriptionS7400H device = new PlcCycSubscriptionS7400H();
         device.run(args);                      
     }
diff --git a/plc4j/examples/plc4j-s7event/src/main/java/org/apache/plc4x/examples/plc4j/s7event/PlcEventSubscriptionS7400H.java b/plc4j/examples/plc4j-s7event/src/main/java/org/apache/plc4x/examples/plc4j/s7event/PlcEventSubscriptionS7400H.java
index b817e3a..e10a3ac 100644
--- a/plc4j/examples/plc4j-s7event/src/main/java/org/apache/plc4x/examples/plc4j/s7event/PlcEventSubscriptionS7400H.java
+++ b/plc4j/examples/plc4j-s7event/src/main/java/org/apache/plc4x/examples/plc4j/s7event/PlcEventSubscriptionS7400H.java
@@ -44,8 +44,6 @@ public class PlcEventSubscriptionS7400H {
      */
     public static void main(String[] args) throws Exception {
         
-        System.setProperty(org.slf4j.simple.SimpleLogger.DEFAULT_LOG_LEVEL_KEY, "Debug");           
-        
         try (PlcConnection connection = new DefaultPlcDriverManager().getConnection("s7://10.10.1.80?remote-rack=0&remote-slot=3&controller-type=S7_400")) {
             final PlcSubscriptionRequest.Builder subscription = connection.subscriptionRequestBuilder();
 
diff --git a/plc4j/examples/plc4j-s7event/src/main/java/org/apache/plc4x/examples/plc4j/s7event/PlcReadDataS7400H.java b/plc4j/examples/plc4j-s7event/src/main/java/org/apache/plc4x/examples/plc4j/s7event/PlcReadDataS7400H.java
index 8ab3176..518868b 100644
--- a/plc4j/examples/plc4j-s7event/src/main/java/org/apache/plc4x/examples/plc4j/s7event/PlcReadDataS7400H.java
+++ b/plc4j/examples/plc4j-s7event/src/main/java/org/apache/plc4x/examples/plc4j/s7event/PlcReadDataS7400H.java
@@ -58,8 +58,6 @@ public class PlcReadDataS7400H implements ConnectionStateListener {
      * @param args the command line arguments
      */
     public static void main(String[] args) throws Exception {
-        System.setProperty(org.slf4j.simple.SimpleLogger.DEFAULT_LOG_LEVEL_KEY, "Debug");         
-        
         PlcReadDataS7400H device = new PlcReadDataS7400H();
         device.run();
     }
diff --git a/plc4j/examples/plc4j-s7event/src/main/java/org/apache/plc4x/examples/plc4j/s7event/PlcReadS71200.java b/plc4j/examples/plc4j-s7event/src/main/java/org/apache/plc4x/examples/plc4j/s7event/PlcReadS71200.java
index 7a0ac29..93ffb02 100644
--- a/plc4j/examples/plc4j-s7event/src/main/java/org/apache/plc4x/examples/plc4j/s7event/PlcReadS71200.java
+++ b/plc4j/examples/plc4j-s7event/src/main/java/org/apache/plc4x/examples/plc4j/s7event/PlcReadS71200.java
@@ -53,8 +53,6 @@ public class PlcReadS71200 implements ConnectionStateListener {
      * @param args the command line arguments
      */
     public static void main(String[] args) throws Exception{
-        System.setProperty(org.slf4j.simple.SimpleLogger.DEFAULT_LOG_LEVEL_KEY, "Debug"); 
-        
         PlcReadS71200 device = new PlcReadS71200();
         device.run();
     }
diff --git a/plc4j/examples/plc4j-s7event/src/main/java/org/apache/plc4x/examples/plc4j/s7event/PlcReadWriteStrings.java b/plc4j/examples/plc4j-s7event/src/main/java/org/apache/plc4x/examples/plc4j/s7event/PlcReadWriteStrings.java
index e86f296..ff586c7 100644
--- a/plc4j/examples/plc4j-s7event/src/main/java/org/apache/plc4x/examples/plc4j/s7event/PlcReadWriteStrings.java
+++ b/plc4j/examples/plc4j-s7event/src/main/java/org/apache/plc4x/examples/plc4j/s7event/PlcReadWriteStrings.java
@@ -93,8 +93,6 @@ public class PlcReadWriteStrings implements ConnectionStateListener {
      * @param args the command line arguments
      */
     public static void main(String[] args) throws Exception {
-        System.setProperty(org.slf4j.simple.SimpleLogger.DEFAULT_LOG_LEVEL_KEY, "Debug");         
-        
         PlcReadWriteStrings device = new PlcReadWriteStrings();
         device.run();
     }
diff --git a/plc4j/examples/plc4j-s7event/src/main/java/org/apache/plc4x/examples/plc4j/s7event/PlcSzlRequestS7400H.java b/plc4j/examples/plc4j-s7event/src/main/java/org/apache/plc4x/examples/plc4j/s7event/PlcSzlRequestS7400H.java
index 809ce1d..be20c6e 100644
--- a/plc4j/examples/plc4j-s7event/src/main/java/org/apache/plc4x/examples/plc4j/s7event/PlcSzlRequestS7400H.java
+++ b/plc4j/examples/plc4j-s7event/src/main/java/org/apache/plc4x/examples/plc4j/s7event/PlcSzlRequestS7400H.java
@@ -47,8 +47,6 @@ public class PlcSzlRequestS7400H {
      */
     public static void main(String[] args) throws Exception {
 
-        System.setProperty(org.slf4j.simple.SimpleLogger.DEFAULT_LOG_LEVEL_KEY, "Debug");           
-                
         System.out.println("******************************************************************************************");
         System.out.println("Before using, take a look at:");
         System.out.println("System Software for S7-300/400.\r\nSystem and Standard Functions - Volume 1/2");
diff --git a/plc4j/examples/poll-loop/pom.xml b/plc4j/examples/poll-loop/pom.xml
index 75af9a2..ab425af 100644
--- a/plc4j/examples/poll-loop/pom.xml
+++ b/plc4j/examples/poll-loop/pom.xml
@@ -54,18 +54,4 @@
     </dependency>
   </dependencies>
 
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <configuration>
-          <usedDependencies combine.children="append">
-            <usedDependency>org.slf4j:log4j-over-slf4j</usedDependency>
-          </usedDependencies>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
 </project>
diff --git a/plc4j/examples/pom.xml b/plc4j/examples/pom.xml
index 5bda46e..c92c309 100644
--- a/plc4j/examples/pom.xml
+++ b/plc4j/examples/pom.xml
@@ -23,7 +23,7 @@
 
   <parent>
     <groupId>org.apache.plc4x</groupId>
-    <artifactId>plc4j</artifactId>
+    <artifactId>plc4j-extras</artifactId>
     <version>0.13.0-SNAPSHOT</version>
   </parent>
 
@@ -37,6 +37,10 @@
   <properties>
     <project.build.outputTimestamp>2024-02-16T14:53:02Z</project.build.outputTimestamp>
     <app.main.class>override-this-property-in-application-pom</app.main.class>
+
+    <commons-cli.version>1.6.0</commons-cli.version>
+    <logback.version>1.5.3</logback.version>
+    <slf4j.version>2.0.12</slf4j.version>
   </properties>
 
   <modules>
@@ -61,14 +65,6 @@
 
   <build>
     <plugins>
-      <!-- This is just examples including these checks here requires an insane amount of housekeeping. -->
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-enforcer-plugin</artifactId>
-        <configuration>
-          <skip>true</skip>
-        </configuration>
-      </plugin>
       <!-- Build a fat jar containing all dependencies -->
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
@@ -81,6 +77,7 @@
               <goal>shade</goal>
             </goals>
             <configuration>
+              <createDependencyReducedPom>false</createDependencyReducedPom>
               <transformers combine.children="append">
                 <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                   <mainClass>${app.main.class}</mainClass>
@@ -90,16 +87,6 @@
           </execution>
         </executions>
       </plugin>
-
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <configuration>
-          <usedDependencies combine.children="append">
-            <usedDependency>org.apache.plc4x:plc4j-driver-all</usedDependency>
-          </usedDependencies>
-        </configuration>
-      </plugin>
     </plugins>
 
     <pluginManagement>
@@ -119,6 +106,21 @@
   <!-- Change the default scope to "compile" to include logback in all examples -->
   <dependencyManagement>
     <dependencies>
+      <dependency>
+        <groupId>commons-cli</groupId>
+        <artifactId>commons-cli</artifactId>
+        <version>${commons-cli.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>slf4j-api</artifactId>
+        <version>${slf4j.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>log4j-over-slf4j</artifactId>
+        <version>${slf4j.version}</version>
+      </dependency>
       <dependency>
         <groupId>ch.qos.logback</groupId>
         <artifactId>logback-classic</artifactId>
diff --git a/plc4j/integrations/apache-calcite/pom.xml b/plc4j/integrations/apache-calcite/pom.xml
index 154da4a..18f051f 100644
--- a/plc4j/integrations/apache-calcite/pom.xml
+++ b/plc4j/integrations/apache-calcite/pom.xml
@@ -36,20 +36,6 @@
     <calcite-core.version>1.36.0</calcite-core.version>
   </properties>
 
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <configuration>
-          <usedDependencies combine.children="append">
-            <usedDependency>org.apache.plc4x:plc4j-driver-all</usedDependency>
-          </usedDependencies>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
   <dependencies>
     <dependency>
       <groupId>org.apache.calcite</groupId>
@@ -64,6 +50,7 @@
     <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-lang3</artifactId>
+      <version>3.14.0</version>
     </dependency>
     <dependency>
       <groupId>org.apache.plc4x</groupId>
@@ -84,6 +71,31 @@
       <type>pom</type>
       <scope>runtime</scope>
     </dependency>
+
+    <dependency>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-api</artifactId>
+      <version>5.10.2</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.assertj</groupId>
+      <artifactId>assertj-core</artifactId>
+      <version>3.25.3</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-collections4</artifactId>
+      <version>4.4</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4j-connection-cache</artifactId>
+      <version>0.13.0-SNAPSHOT</version>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <dependencyManagement>
diff --git a/plc4j/integrations/apache-kafka/pom.xml b/plc4j/integrations/apache-kafka/pom.xml
index 9c6f5bd..fec21de 100644
--- a/plc4j/integrations/apache-kafka/pom.xml
+++ b/plc4j/integrations/apache-kafka/pom.xml
@@ -17,179 +17,208 @@
   specific language governing permissions and limitations
   under the License.
   -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.apache.plc4x</groupId>
-    <artifactId>plc4j-integrations</artifactId>
-    <version>0.13.0-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>plc4j-apache-kafka</artifactId>
-
-  <name>PLC4J: Integrations: Apache Kafka</name>
-  <description>Integration module for integrating PLC4X into Apache Kafka (Kafka-Connect-Plugin)</description>
-
-  <properties>
-    <project.build.outputTimestamp>2024-02-16T14:53:02Z</project.build.outputTimestamp>
-    <kafka.version>3.2.0</kafka.version>
-    <kafka.connect.maven.plugin.version>0.12.0</kafka.connect.maven.plugin.version>
-  </properties>
-
-  <!-- Build a fat jar so the user only needs to drop in this one jar -->
-  <build>
-    <plugins>
-      <!-- Build a fat jar containing all dependencies -->
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-shade-plugin</artifactId>
-        <executions>
-          <execution>
-            <phase>package</phase>
-            <goals>
-              <goal>shade</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <configuration>
-          <usedDependencies combine.children="append">
-            <usedDependency>org.apache.plc4x:plc4j-driver-all</usedDependency>
-          </usedDependencies>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>io.confluent</groupId>
-        <artifactId>kafka-connect-maven-plugin</artifactId>
-        <version>${kafka.connect.maven.plugin.version}</version>
-        <executions>
-            <execution>
-                <goals>
-                    <goal>kafka-connect</goal>
-                </goals>
-                <configuration>
-                    <title>PLC4X PLC4J Connector</title>
-                    <name>kafka-connect-plc4x-plc4j</name>
-                    <documentationUrl>https://plc4x.apache.org/users/integrations/apache-kafka.html</documentationUrl>
-                    <description>
-                        The PLC4X connectors allow reading and writing to devices using industrial protocols.
-                    </description>
-                    <logo>../../../media/logos/300ppi/PLC4X.png</logo>
-                    <sourceUrl>https://plc4x.apache.org/users/download.html</sourceUrl>
-
-                    <supportProviderName>PLC4X</supportProviderName>
-                    <supportSummary>The PLC4X Connectors are supported by the community</supportSummary>
-                    <supportUrl>https://plc4x.apache.org/index.html</supportUrl>
-                    <supportLogo>../../../media/logos/300ppi/PLC4X.png</supportLogo>
-
-                    <ownerUsername>apache</ownerUsername>
-                    <ownerType>organization</ownerType>
-                    <ownerName>Apache</ownerName>
-                    <ownerUrl>https://plc4x.apache.org/index.html</ownerUrl>
-                    <ownerLogo>../../../media/logos/300ppi/PLC4X.png</ownerLogo>
-
-                    <componentTypes>
-                        <componentType>sink</componentType>
-                        <componentType>source</componentType>
-                    </componentTypes>
-
-                    <tags isList="true">
-                        <tag>PLC4X</tag>
-                        <tag>PLC</tag>
-                        <tag>iot</tag>
-                        <tag>iiot</tag>
-                        <tag>modbus</tag>
-                        <tag>AB</tag>
-                        <tag>S7</tag>
-                        <tag>OPC</tag>
-                        <tag>OPC UA</tag>
-                        <tag>bacnet</tag>
-                        <tag>ads</tag>
-                        <tag>deltav</tag>
-                        <tag>df1</tag>
-                        <tag>ethernet/ip</tag>
-                        <tag>firmata</tag>
-                        <tag>knx</tag>
-                        <tag>simulated</tag>
-                        <tag>canopen</tag>
-                    </tags>
-
-                    <deliveryGuarantee>
-                        <deliveryGuarantee>exactlyOnce</deliveryGuarantee>
-                    </deliveryGuarantee>
-
-                    <confluentControlCenterIntegration>true</confluentControlCenterIntegration>
-                </configuration>
-            </execution>
-        </executions>
-    </plugin>
-    <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>build-helper-maven-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>attach-confluent-zip</id>
-            <phase>package</phase>
-            <goals>
-              <goal>attach-artifact</goal>
-            </goals>
-            <configuration>
-              <artifacts>
-                <artifact>
-                  <file>${project.build.directory}/components/packages/apache-kafka-connect-plc4x-plc4j-${project.version}.zip</file>
-                  <type>zip</type>
-                  <classifier>standalone</classifier>
-                </artifact>
-              </artifacts>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-api</artifactId>
-      <version>0.13.0-SNAPSHOT</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-scraper</artifactId>
-      <version>0.13.0-SNAPSHOT</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-connection-cache</artifactId>
-      <version>0.13.0-SNAPSHOT</version>
-    </dependency>
-
-    <dependency>
-      <groupId>org.apache.kafka</groupId>
-      <artifactId>kafka-clients</artifactId>
-      <version>${kafka.version}</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.kafka</groupId>
-      <artifactId>connect-api</artifactId>
-      <version>${kafka.version}</version>
-      <scope>provided</scope>
-    </dependency>
-
-    <!-- Include all drivers -->
-    <dependency>
-      <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-driver-all</artifactId>
-      <version>0.13.0-SNAPSHOT</version>
-      <type>pom</type>
-      <scope>runtime</scope>
-    </dependency>
-  </dependencies>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.plc4x</groupId>
+        <artifactId>plc4j-integrations</artifactId>
+        <version>0.13.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>plc4j-apache-kafka</artifactId>
+
+    <name>PLC4J: Integrations: Apache Kafka</name>
+    <description>Integration module for integrating PLC4X into Apache Kafka (Kafka-Connect-Plugin)</description>
+
+    <properties>
+        <project.build.outputTimestamp>2024-02-16T14:53:02Z</project.build.outputTimestamp>
+        <kafka.version>3.2.0</kafka.version>
+        <kafka.connect.maven.plugin.version>0.12.0</kafka.connect.maven.plugin.version>
+    </properties>
+
+    <!-- Build a fat jar so the user only needs to drop in this one jar -->
+    <build>
+        <plugins>
+            <!-- Build a fat jar containing all dependencies -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-shade-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>shade</goal>
+                        </goals>
+                        <configuration>
+                            <createDependencyReducedPom>false</createDependencyReducedPom>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>io.confluent</groupId>
+                <artifactId>kafka-connect-maven-plugin</artifactId>
+                <version>${kafka.connect.maven.plugin.version}</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>kafka-connect</goal>
+                        </goals>
+                        <configuration>
+                            <title>PLC4X PLC4J Connector</title>
+                            <name>kafka-connect-plc4x-plc4j</name>
+                            <documentationUrl>https://plc4x.apache.org/users/integrations/apache-kafka.html
+                            </documentationUrl>
+                            <description>
+                                The PLC4X connectors allow reading and writing to devices using industrial protocols.
+                            </description>
+                            <logo>../../../media/logos/300ppi/PLC4X.png</logo>
+                            <sourceUrl>https://plc4x.apache.org/users/download.html</sourceUrl>
+
+                            <supportProviderName>PLC4X</supportProviderName>
+                            <supportSummary>The PLC4X Connectors are supported by the community</supportSummary>
+                            <supportUrl>https://plc4x.apache.org/index.html</supportUrl>
+                            <supportLogo>../../../media/logos/300ppi/PLC4X.png</supportLogo>
+
+                            <ownerUsername>apache</ownerUsername>
+                            <ownerType>organization</ownerType>
+                            <ownerName>Apache</ownerName>
+                            <ownerUrl>https://plc4x.apache.org/index.html</ownerUrl>
+                            <ownerLogo>../../../media/logos/300ppi/PLC4X.png</ownerLogo>
+
+                            <componentTypes>
+                                <componentType>sink</componentType>
+                                <componentType>source</componentType>
+                            </componentTypes>
+
+                            <tags isList="true">
+                                <tag>PLC4X</tag>
+                                <tag>PLC</tag>
+                                <tag>iot</tag>
+                                <tag>iiot</tag>
+                                <tag>modbus</tag>
+                                <tag>AB</tag>
+                                <tag>S7</tag>
+                                <tag>OPC</tag>
+                                <tag>OPC UA</tag>
+                                <tag>bacnet</tag>
+                                <tag>ads</tag>
+                                <tag>deltav</tag>
+                                <tag>df1</tag>
+                                <tag>ethernet/ip</tag>
+                                <tag>firmata</tag>
+                                <tag>knx</tag>
+                                <tag>simulated</tag>
+                                <tag>canopen</tag>
+                            </tags>
+
+                            <deliveryGuarantee>
+                                <deliveryGuarantee>exactlyOnce</deliveryGuarantee>
+                            </deliveryGuarantee>
+
+                            <confluentControlCenterIntegration>true</confluentControlCenterIntegration>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <!--plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>build-helper-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>attach-confluent-zip</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>attach-artifact</goal>
+                        </goals>
+                        <configuration>
+                            <artifacts>
+                                <artifact>
+                                    <file>
+                                        ${project.build.directory}/components/packages/apache-kafka-connect-plc4x-plc4j-${project.version}.zip
+                                    </file>
+                                    <type>zip</type>
+                                    <classifier>standalone</classifier>
+                                </artifact>
+                            </artifacts>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin-->
+        </plugins>
+    </build>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.plc4x</groupId>
+            <artifactId>plc4j-api</artifactId>
+            <version>0.13.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.plc4x</groupId>
+            <artifactId>plc4j-scraper</artifactId>
+            <version>0.13.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.plc4x</groupId>
+            <artifactId>plc4j-connection-cache</artifactId>
+            <version>0.13.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <version>2.0.12</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-yaml</artifactId>
+            <version>2.16.1</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-collections4</artifactId>
+            <version>4.4</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-math3</artifactId>
+            <version>3.6.1</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.kafka</groupId>
+            <artifactId>kafka-clients</artifactId>
+            <version>${kafka.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.kafka</groupId>
+            <artifactId>connect-api</artifactId>
+            <version>${kafka.version}</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <!-- Include all drivers -->
+        <dependency>
+            <groupId>org.apache.plc4x</groupId>
+            <artifactId>plc4j-driver-all</artifactId>
+            <version>0.13.0-SNAPSHOT</version>
+            <type>pom</type>
+            <scope>runtime</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-api</artifactId>
+            <version>5.10.2</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
 
 </project>
diff --git a/plc4j/integrations/apache-kafka/src/main/java/org/apache/plc4x/kafka/config/SourceConfig.java b/plc4j/integrations/apache-kafka/src/main/java/org/apache/plc4x/kafka/config/SourceConfig.java
index 8d15e3c..7b5a8f1 100644
--- a/plc4j/integrations/apache-kafka/src/main/java/org/apache/plc4x/kafka/config/SourceConfig.java
+++ b/plc4j/integrations/apache-kafka/src/main/java/org/apache/plc4x/kafka/config/SourceConfig.java
@@ -18,15 +18,11 @@
  */
 package org.apache.plc4x.kafka.config;
 
-import org.apache.plc4x.kafka.Plc4xSourceConnector;
 import org.apache.kafka.common.config.AbstractConfig;
-import org.apache.kafka.common.config.Config;
 import org.apache.kafka.common.config.ConfigDef;
 import org.apache.kafka.common.config.ConfigException;
-import org.apache.kafka.common.config.ConfigValue;
 import java.util.Map;
 
-import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/plc4j/integrations/apache-nifi/nifi-plc4x-nar/pom.xml b/plc4j/integrations/apache-nifi/nifi-plc4x-nar/pom.xml
index 24697a1..baf43bd 100644
--- a/plc4j/integrations/apache-nifi/nifi-plc4x-nar/pom.xml
+++ b/plc4j/integrations/apache-nifi/nifi-plc4x-nar/pom.xml
@@ -37,24 +37,6 @@
 		<source.skip>true</source.skip>
 	</properties>
 
-	<build>
-		<pluginManagement>
-			<plugins>
-				<plugin>
-					<groupId>org.apache.maven.plugins</groupId>
-					<artifactId>maven-dependency-plugin</artifactId>
-					<configuration>
-						<usedDependencies combine.children="append">
-							<usedDependency>org.apache.plc4x:plc4j-nifi-plc4x-processors</usedDependency>
-							<usedDependency>org.apache.plc4x:plc4j-api</usedDependency>
-							<usedDependency>org.apache.plc4x:plc4j-driver-all</usedDependency>
-						</usedDependencies>
-					</configuration>
-				</plugin>
-			</plugins>
-		</pluginManagement>
-	</build>
-
 	<dependencies>
 		<dependency>
 			<groupId>org.apache.plc4x</groupId>
@@ -82,8 +64,8 @@
 			<groupId>org.apache.plc4x</groupId>
 			<artifactId>plc4j-driver-all</artifactId>
 			<version>0.13.0-SNAPSHOT</version>
-      <type>pom</type>
-    </dependency>
+			<type>pom</type>
+    	</dependency>
 	</dependencies>
 
 </project>
\ No newline at end of file
diff --git a/plc4j/integrations/apache-nifi/nifi-plc4x-processors/pom.xml b/plc4j/integrations/apache-nifi/nifi-plc4x-processors/pom.xml
index b61b377..72aca53 100644
--- a/plc4j/integrations/apache-nifi/nifi-plc4x-processors/pom.xml
+++ b/plc4j/integrations/apache-nifi/nifi-plc4x-processors/pom.xml
@@ -17,163 +17,175 @@
   specific language governing permissions and limitations
   under the License.
   -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
 
-	<parent>
-		<groupId>org.apache.plc4x</groupId>
-		<artifactId>plc4j-apache-nifi</artifactId>
-		<version>0.13.0-SNAPSHOT</version>
-	</parent>
+    <parent>
+        <groupId>org.apache.plc4x</groupId>
+        <artifactId>plc4j-apache-nifi</artifactId>
+        <version>0.13.0-SNAPSHOT</version>
+    </parent>
 
-	<artifactId>plc4j-nifi-plc4x-processors</artifactId>
+    <artifactId>plc4j-nifi-plc4x-processors</artifactId>
 
-	<name>PLC4J: Integrations: Apache Nifi: Processors</name>
+    <name>PLC4J: Integrations: Apache Nifi: Processors</name>
 
-  <properties>
-    <project.build.outputTimestamp>2024-02-16T14:53:02Z</project.build.outputTimestamp>
-  </properties>
+    <properties>
+        <project.build.outputTimestamp>2024-02-16T14:53:02Z</project.build.outputTimestamp>
+    </properties>
 
-  <dependencies>
-		<dependency>
-			<groupId>org.apache.plc4x</groupId>
-			<artifactId>plc4j-api</artifactId>
-			<version>0.13.0-SNAPSHOT</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.plc4x</groupId>
-			<artifactId>plc4j-connection-cache</artifactId>
-			<version>0.13.0-SNAPSHOT</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.plc4x</groupId>
-			<artifactId>plc4j-spi</artifactId>
-			<version>0.13.0-SNAPSHOT</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-api</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-record</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-record-serialization-service-api</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-utils</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-json-utils</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-avro-record-utils</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.avro</groupId>
-			<artifactId>avro</artifactId>
-		</dependency>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.plc4x</groupId>
+            <artifactId>plc4j-api</artifactId>
+            <version>0.13.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.plc4x</groupId>
+            <artifactId>plc4j-connection-cache</artifactId>
+            <version>0.13.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.plc4x</groupId>
+            <artifactId>plc4j-spi</artifactId>
+            <version>0.13.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-record</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-record-serialization-service-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-utils</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-json-utils</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-avro-record-utils</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.avro</groupId>
+            <artifactId>avro</artifactId>
+        </dependency>
 
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-record-serialization-services</artifactId>
-			<scope>test</scope>
-			<exclusions>
-				<exclusion>
-					<groupId>javax.validation</groupId>
-					<artifactId>validation-api</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-		<dependency>
-			<groupId>com.fasterxml.jackson.core</groupId>
-			<artifactId>jackson-core</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>com.fasterxml.jackson.core</groupId>
-			<artifactId>jackson-databind</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-schema-registry-service-api</artifactId>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-mock</artifactId>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-mock-record-utils</artifactId>
-			<scope>test</scope>
-		</dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-record-serialization-services</artifactId>
+            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>javax.validation</groupId>
+                    <artifactId>validation-api</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-schema-registry-service-api</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-mock</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-mock-record-utils</artifactId>
+            <scope>test</scope>
+        </dependency>
 
-		<!-- This one is for test purpouses only, drivers are included in the nar -->
-		<dependency>
-			<groupId>org.apache.plc4x</groupId>
-			<artifactId>plc4j-driver-modbus</artifactId>
-			<version>0.13.0-SNAPSHOT</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.plc4x</groupId>
-			<artifactId>plc4j-driver-opcua</artifactId>
-			<version>0.13.0-SNAPSHOT</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.plc4x</groupId>
-			<artifactId>plc4j-driver-s7</artifactId>
-			<version>0.13.0-SNAPSHOT</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.plc4x</groupId>
-			<artifactId>plc4j-driver-simulated</artifactId>
-			<version>0.13.0-SNAPSHOT</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.plc4x</groupId>
-			<artifactId>plc4j-transport-pcap-replay</artifactId>
-			<version>0.13.0-SNAPSHOT</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.plc4x</groupId>
-			<artifactId>plc4j-transport-raw-socket</artifactId>
-			<version>0.13.0-SNAPSHOT</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.plc4x</groupId>
-			<artifactId>plc4j-transport-serial</artifactId>
-			<version>0.13.0-SNAPSHOT</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.plc4x</groupId>
-			<artifactId>plc4j-transport-tcp</artifactId>
-			<version>0.13.0-SNAPSHOT</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.plc4x</groupId>
-			<artifactId>plc4j-transport-udp</artifactId>
-			<version>0.13.0-SNAPSHOT</version>
+        <!-- This one is for test purpouses only, drivers are included in the nar -->
+        <dependency>
+            <groupId>org.apache.plc4x</groupId>
+            <artifactId>plc4j-driver-modbus</artifactId>
+            <version>0.13.0-SNAPSHOT</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.plc4x</groupId>
+            <artifactId>plc4j-driver-opcua</artifactId>
+            <version>0.13.0-SNAPSHOT</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.plc4x</groupId>
+            <artifactId>plc4j-driver-s7</artifactId>
+            <version>0.13.0-SNAPSHOT</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.plc4x</groupId>
+            <artifactId>plc4j-driver-simulated</artifactId>
+            <version>0.13.0-SNAPSHOT</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.plc4x</groupId>
+            <artifactId>plc4j-transport-pcap-replay</artifactId>
+            <version>0.13.0-SNAPSHOT</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.plc4x</groupId>
+            <artifactId>plc4j-transport-raw-socket</artifactId>
+            <version>0.13.0-SNAPSHOT</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.plc4x</groupId>
+            <artifactId>plc4j-transport-serial</artifactId>
+            <version>0.13.0-SNAPSHOT</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.plc4x</groupId>
+            <artifactId>plc4j-transport-tcp</artifactId>
+            <version>0.13.0-SNAPSHOT</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.plc4x</groupId>
+            <artifactId>plc4j-transport-udp</artifactId>
+            <version>0.13.0-SNAPSHOT</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+		<dependency>
+			<groupId>org.mockito</groupId>
+			<artifactId>mockito-inline</artifactId>
+			<version>4.11.0</version>
 			<scope>test</scope>
 		</dependency>
 
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-standard-nar</artifactId>
-			<type>nar</type>
-		</dependency>
-	</dependencies>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-standard-nar</artifactId>
+            <type>nar</type>
+        </dependency>
+    </dependencies>
 </project>
\ No newline at end of file
diff --git a/plc4j/integrations/apache-nifi/pom.xml b/plc4j/integrations/apache-nifi/pom.xml
index d44645a..521a7fa 100644
--- a/plc4j/integrations/apache-nifi/pom.xml
+++ b/plc4j/integrations/apache-nifi/pom.xml
@@ -84,7 +84,7 @@
             <dependency>
                 <groupId>org.junit</groupId>
                 <artifactId>junit-bom</artifactId>
-                <version>${junit.jupiter.version}</version>
+                <version>5.10.2</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
@@ -141,7 +141,7 @@
             <dependency>
                 <groupId>org.glassfish.jaxb</groupId>
                 <artifactId>jaxb-runtime</artifactId>
-                <version>${jaxb.version}</version>
+                <version>4.0.5</version>
             </dependency>
             <dependency>
                 <groupId>jakarta.xml.bind</groupId>
diff --git a/plc4j/integrations/pom.xml b/plc4j/integrations/pom.xml
index 3192c3f..4122b36 100644
--- a/plc4j/integrations/pom.xml
+++ b/plc4j/integrations/pom.xml
@@ -23,7 +23,7 @@
 
   <parent>
     <groupId>org.apache.plc4x</groupId>
-    <artifactId>plc4j</artifactId>
+    <artifactId>plc4j-extras</artifactId>
     <version>0.13.0-SNAPSHOT</version>
   </parent>
 
diff --git a/plc4j/pom.xml b/plc4j/pom.xml
new file mode 100644
index 0000000..ffb0a4a
--- /dev/null
+++ b/plc4j/pom.xml
@@ -0,0 +1,213 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      https://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.plc4x</groupId>
+    <artifactId>plc4x-extras-parent</artifactId>
+    <version>0.13.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>plc4j-extras</artifactId>
+  <packaging>pom</packaging>
+
+  <name>PLC4J-Extras</name>
+  <description>Examples, integration modules and tools for Java.</description>
+
+  <properties>
+    <project.build.outputTimestamp>2024-02-16T14:53:02Z</project.build.outputTimestamp>
+  </properties>
+
+  <modules>
+    <module>examples</module>
+    <module>integrations</module>
+    <module>tools</module>
+  </modules>
+
+  <build>
+    <plugins>
+      <!--
+        This plugin doesn't really do much, it makes sure the jacoco agent
+        is downloaded and that the path to this is saved in an environment
+        variable, so we can access this later on in the build.
+      -->
+      <plugin>
+        <groupId>org.jacoco</groupId>
+        <artifactId>jacoco-maven-plugin</artifactId>
+        <executions>
+          <!--
+              Prepares the property pointing to the JaCoCo runtime agent which
+              is passed as VM argument when Maven the Surefire plugin is executed.
+          -->
+          <execution>
+            <id>pre-unit-test</id>
+            <phase>generate-test-sources</phase>
+            <goals>
+              <goal>prepare-agent</goal>
+            </goals>
+            <configuration>
+              <!--
+                  Sets the name of the property containing the settings
+                  for JaCoCo runtime agent.
+              -->
+              <propertyName>surefireArgLine</propertyName>
+            </configuration>
+          </execution>
+          <!--
+              Prepares the property pointing to the JaCoCo runtime agent which
+              is passed as VM argument when Maven the Failsafe plugin is executed.
+          -->
+          <execution>
+            <id>pre-integration-test</id>
+            <phase>pre-integration-test</phase>
+            <goals>
+              <goal>prepare-agent-integration</goal>
+            </goals>
+            <configuration>
+              <!--
+                  Sets the name of the property containing the settings
+                  for JaCoCo runtime agent.
+              -->
+              <propertyName>failsafeArgLine</propertyName>
+            </configuration>
+          </execution>
+          <execution>
+            <id>report</id>
+            <phase>verify</phase>
+            <goals>
+              <goal>report</goal>
+            </goals>
+          </execution>
+          <!--
+              Check if the unit-test-coverage is at least a certain minimum.
+          -->
+          <execution>
+            <id>check-coverage</id>
+            <phase>verify</phase>
+            <goals>
+              <goal>check</goal>
+            </goals>
+            <configuration>
+              <!-- TODO: Turn this on as soon as possible. -->
+              <haltOnFailure>false</haltOnFailure>
+              <rules>
+                <rule implementation="org.jacoco.maven.RuleConfiguration">
+                  <element>BUNDLE</element>
+                  <limits>
+                    <!-- Fail the build if the instruction level coverage is below 80%. -->
+                    <limit implementation="org.jacoco.report.check.Limit">
+                      <counter>INSTRUCTION</counter>
+                      <value>COVEREDRATIO</value>
+                      <minimum>0.50</minimum>
+                    </limit>
+                    <!-- Fail the build if there are classes without any coverage. -->
+                    <limit implementation="org.jacoco.report.check.Limit">
+                      <counter>CLASS</counter>
+                      <value>MISSEDCOUNT</value>
+                      <maximum>0</maximum>
+                    </limit>
+                  </limits>
+                </rule>
+              </rules>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+
+      <!--
+        As our libraries should be consumable on Java 11, downgrade the compiler settings.
+      -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>default-compile</id>
+            <phase>compile</phase>
+            <goals>
+              <goal>compile</goal>
+            </goals>
+            <configuration>
+              <!-- Would have loved to suppress the warnings of generated code only -->
+              <showWarnings>false</showWarnings>
+              <release>11</release>
+            </configuration>
+          </execution>
+          <execution>
+            <id>default-testCompile</id>
+            <phase>test-compile</phase>
+            <goals>
+              <goal>testCompile</goal>
+            </goals>
+            <configuration>
+              <!-- Would have loved to suppress the warnings of generated code only -->
+              <showWarnings>false</showWarnings>
+              <release>11</release>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+
+      <!--
+        Make the surefire execute all unit-tests
+      -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <!--
+            We have to slightly increase the heap-size or some tests will fail.
+            Notice the @ instead of the $ as prefix? That's late evaluation.
+          -->
+          <argLine>-Xmx512m @{surefireArgLine}</argLine>
+          <includes>
+            <include>**/*Test.java</include>
+            <include>**/*Tests.java</include>
+            <include>**/*Spec.java</include>
+          </includes>
+        </configuration>
+      </plugin>
+
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-failsafe-plugin</artifactId>
+        <configuration>
+          <!--
+            The failsafe plugin would use the java jigsaw module path,
+            this would make loading the test XML files impossible.
+            So we simply disable this.
+          -->
+          <useModulePath>false</useModulePath>
+          <!--
+            We have to slightly increase the heap-size or some tests will fail.
+            Notice the @ instead of the $ as prefix? That's late evaluation.
+          -->
+          <argLine>-Xmx512m @{failsafeArgLine}</argLine>
+          <includes>
+            <include>**/*IT.java</include>
+          </includes>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
diff --git a/plc4j/tools/opcua-server/pom.xml b/plc4j/tools/opcua-server/pom.xml
index c7ff042..0742a2e 100644
--- a/plc4j/tools/opcua-server/pom.xml
+++ b/plc4j/tools/opcua-server/pom.xml
@@ -36,59 +36,66 @@
   </properties>
 
   <dependencies>
+    <!-- Milo OPC UA Dependencies -->
     <dependency>
       <groupId>org.eclipse.milo</groupId>
       <artifactId>dictionary-manager</artifactId>
+      <version>0.6.12</version>
     </dependency>
-
-    <!-- Milo OPC UA Dependencies -->
     <dependency>
       <groupId>org.eclipse.milo</groupId>
       <artifactId>sdk-server</artifactId>
+      <version>0.6.12</version>
     </dependency>
-
     <dependency>
       <groupId>org.eclipse.milo</groupId>
       <artifactId>stack-server</artifactId>
+      <version>0.6.12</version>
     </dependency>
-
     <dependency>
       <groupId>org.eclipse.milo</groupId>
       <artifactId>stack-core</artifactId>
+      <version>0.6.12</version>
     </dependency>
-
     <dependency>
       <groupId>org.eclipse.milo</groupId>
       <artifactId>sdk-core</artifactId>
+      <version>0.6.12</version>
     </dependency>
 
     <!-- Parsing Libraries -->
     <dependency>
       <groupId>com.fasterxml.jackson.dataformat</groupId>
       <artifactId>jackson-dataformat-yaml</artifactId>
+      <version>2.16.1</version>
     </dependency>
     <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
       <artifactId>jackson-databind</artifactId>
+      <version>2.16.1</version>
     </dependency>
     <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
       <artifactId>jackson-annotations</artifactId>
+      <version>2.16.1</version>
     </dependency>
 
     <dependency>
       <groupId>commons-cli</groupId>
       <artifactId>commons-cli</artifactId>
+      <version>1.6.0</version>
     </dependency>
 
     <dependency>
       <groupId>org.eclipse.jetty</groupId>
       <artifactId>jetty-util</artifactId>
+      <version>12.0.5</version>
     </dependency>
 
     <dependency>
       <groupId>commons-codec</groupId>
       <artifactId>commons-codec</artifactId>
+      <version>1.16.1</version>
     </dependency>
 
     <!-- PLC4X Dependencies -->
@@ -116,33 +123,47 @@
     <dependency>
       <groupId>org.bouncycastle</groupId>
       <artifactId>bcmail-jdk18on</artifactId>
+      <version>1.77</version>
     </dependency>
     <dependency>
       <groupId>org.bouncycastle</groupId>
       <artifactId>bcpkix-jdk18on</artifactId>
+      <version>1.77</version>
     </dependency>
     <dependency>
       <groupId>org.bouncycastle</groupId>
       <artifactId>bcprov-jdk18on</artifactId>
+      <version>1.77</version>
     </dependency>
 
     <!-- Logging dependencies -->
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
+      <version>2.0.12</version>
     </dependency>
     <dependency>
       <groupId>ch.qos.logback</groupId>
       <artifactId>logback-classic</artifactId>
+      <version>1.5.3</version>
     </dependency>
     <dependency>
       <groupId>commons-io</groupId>
       <artifactId>commons-io</artifactId>
+      <version>2.15.1</version>
     </dependency>
 
     <dependency>
       <groupId>io.vavr</groupId>
       <artifactId>vavr</artifactId>
+      <version>0.10.4</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-api</artifactId>
+      <version>5.10.2</version>
+      <scope>test</scope>
     </dependency>
   </dependencies>
 
@@ -160,6 +181,7 @@
               <goal>shade</goal>
             </goals>
             <configuration>
+              <createDependencyReducedPom>false</createDependencyReducedPom>
               <transformers combine.children="append">
                 <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                   <mainClass>org.apache.plc4x.java.opcuaserver.OPCUAServer</mainClass>
@@ -169,7 +191,7 @@
           </execution>
         </executions>
       </plugin>
-      <plugin>
+      <!--plugin>
         <groupId>org.codehaus.mojo</groupId>
         <artifactId>build-helper-maven-plugin</artifactId>
         <executions>
@@ -190,19 +212,8 @@
             </configuration>
           </execution>
         </executions>
-      </plugin>
-
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <configuration>
-          <usedDependencies combine.children="append">
-            <usedDependency>org.bouncycastle:bcmail-jdk18on</usedDependency>
-            <usedDependency>org.apache.plc4x:plc4j-driver-all</usedDependency>
-          </usedDependencies>
-        </configuration>
-      </plugin>
+      </plugin-->
     </plugins>
-
   </build>
+
 </project>
diff --git a/plc4j/tools/opcua-server/src/test/java/org/apache/plc4x/java/opcuaserver/OpcuaPlcDriverTest.java b/plc4j/tools/opcua-server/src/test/java/org/apache/plc4x/java/opcuaserver/OpcuaPlcDriverTest.java
index ec07e50..5e1c59c 100644
--- a/plc4j/tools/opcua-server/src/test/java/org/apache/plc4x/java/opcuaserver/OpcuaPlcDriverTest.java
+++ b/plc4j/tools/opcua-server/src/test/java/org/apache/plc4x/java/opcuaserver/OpcuaPlcDriverTest.java
@@ -35,8 +35,6 @@ import java.math.BigInteger;
 import org.apache.commons.io.FileUtils;
 import java.io.File;
 
-import static org.assertj.core.api.Assertions.fail;
-
 /**
  */
 @Disabled("We're getting strange OutOfMemoryErrors from this one")
@@ -117,13 +115,11 @@ public class OpcuaPlcDriverTest {
                     opcuaConnection.close();
                     assert !opcuaConnection.isConnected();
                 } catch (PlcConnectionException e) {
-                    fail("Exception during connectionNoParams while connecting Test EXCEPTION: " + e.getMessage());
+                    Assertions.fail("Exception during connectionNoParams while connecting Test EXCEPTION: " + e.getMessage());
                 } catch (Exception e) {
-                    fail("Exception during connectionNoParams while closing Test EXCEPTION: " + e.getMessage());
+                    Assertions.fail("Exception during connectionNoParams while closing Test EXCEPTION: " + e.getMessage());
                 }
-
         });
-
     }
 
     @Test
@@ -136,13 +132,11 @@ public class OpcuaPlcDriverTest {
                 opcuaConnection.close();
                 assert !opcuaConnection.isConnected();
             } catch (PlcConnectionException e) {
-                fail("Exception during connectionWithDiscoveryParam while connecting Test EXCEPTION: " + e.getMessage());
+                Assertions.fail("Exception during connectionWithDiscoveryParam while connecting Test EXCEPTION: " + e.getMessage());
             } catch (Exception e) {
-                fail("Exception during connectionWithDiscoveryParam while closing Test EXCEPTION: " + e.getMessage());
+                Assertions.fail("Exception during connectionWithDiscoveryParam while closing Test EXCEPTION: " + e.getMessage());
             }
         }));
-
-
     }
 
     @Test
diff --git a/plc4j/tools/plc4x-server/pom.xml b/plc4j/tools/plc4x-server/pom.xml
index 4a6bad4..96c3cbc 100644
--- a/plc4j/tools/plc4x-server/pom.xml
+++ b/plc4j/tools/plc4x-server/pom.xml
@@ -50,6 +50,7 @@
               <goal>shade</goal>
             </goals>
             <configuration>
+              <createDependencyReducedPom>false</createDependencyReducedPom>
               <transformers combine.children="append">
                 <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                   <mainClass>org.apache.plc4x.java.tools.plc4xserver.Plc4xServer</mainClass>
@@ -59,7 +60,7 @@
           </execution>
         </executions>
       </plugin>
-      <plugin>
+      <!--plugin>
         <groupId>org.codehaus.mojo</groupId>
         <artifactId>build-helper-maven-plugin</artifactId>
         <executions>
@@ -80,17 +81,7 @@
             </configuration>
           </execution>
         </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <configuration>
-          <usedDependencies combine.children="append">
-            <usedDependency>org.slf4j:log4j-over-slf4j</usedDependency>
-            <usedDependency>org.apache.plc4x:plc4j-driver-all</usedDependency>
-          </usedDependencies>
-        </configuration>
-      </plugin>
+      </plugin-->
     </plugins>
   </build>
 
@@ -131,31 +122,44 @@
     <dependency>
       <groupId>io.netty</groupId>
       <artifactId>netty-buffer</artifactId>
+      <version>4.1.107.Final</version>
     </dependency>
     <dependency>
       <groupId>io.netty</groupId>
       <artifactId>netty-transport</artifactId>
+      <version>4.1.107.Final</version>
     </dependency>
 
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
+      <version>2.0.12</version>
     </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>log4j-over-slf4j</artifactId>
+      <version>2.0.12</version>
     </dependency>
     <dependency>
       <groupId>ch.qos.logback</groupId>
       <artifactId>logback-classic</artifactId>
+      <version>1.5.3</version>
       <!-- Explicitly override the scope to compile to include these -->
       <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>ch.qos.logback</groupId>
       <artifactId>logback-core</artifactId>
+      <version>1.5.3</version>
       <scope>runtime</scope>
     </dependency>
+
+    <dependency>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-api</artifactId>
+      <version>5.10.2</version>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/plc4j/integrations/pom.xml b/plc4j/tools/pom.xml
similarity index 63%
copy from plc4j/integrations/pom.xml
copy to plc4j/tools/pom.xml
index 3192c3f..d66e647 100644
--- a/plc4j/integrations/pom.xml
+++ b/plc4j/tools/pom.xml
@@ -23,24 +23,40 @@
 
   <parent>
     <groupId>org.apache.plc4x</groupId>
-    <artifactId>plc4j</artifactId>
+    <artifactId>plc4j-extras</artifactId>
     <version>0.13.0-SNAPSHOT</version>
   </parent>
 
-  <artifactId>plc4j-integrations</artifactId>
+  <artifactId>plc4j-tools</artifactId>
   <packaging>pom</packaging>
 
-  <name>PLC4J: Integrations</name>
-  <description>Parent of all product specific integration modules.</description>
+  <name>PLC4J: Tools</name>
+  <description>A collection of tools that provide additional services to users.</description>
 
   <properties>
     <project.build.outputTimestamp>2024-02-16T14:53:02Z</project.build.outputTimestamp>
   </properties>
 
   <modules>
-    <module>apache-calcite</module>
-    <module>apache-nifi</module>
-    <module>apache-kafka</module>
+    <module>opcua-server</module>
+    <module>plc4x-server</module>
   </modules>
 
-</project>
+  <!--
+    As the UI is a standalone application, that is not meant for being integrated in anything
+    we don't want to limit us to old java versions and therefore be stuck with old Spring versions.
+    Therefore, at least Java 19 is needed in order to build this module.
+  -->
+  <profiles>
+    <profile>
+      <id>.above-or-equal-java-19</id>
+      <activation>
+        <jdk>[19,)</jdk>
+      </activation>
+      <modules>
+        <module>ui</module>
+      </modules>
+    </profile>
+  </profiles>
+
+</project>
\ No newline at end of file
diff --git a/plc4j/tools/ui/backend/pom.xml b/plc4j/tools/ui/backend/pom.xml
index 4923511..896068f 100644
--- a/plc4j/tools/ui/backend/pom.xml
+++ b/plc4j/tools/ui/backend/pom.xml
@@ -31,21 +31,6 @@
 
   <build>
     <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <configuration>
-          <usedDependencies combine.children="append">
-            <usedDependency>org.apache.plc4x:plc4j-driver-all</usedDependency>
-            <usedDependency>org.springframework.boot:spring-boot-starter-web</usedDependency>
-            <usedDependency>org.springframework.boot:spring-boot-starter-websocket</usedDependency>
-            <usedDependency>org.springframework.boot:spring-boot-starter-data-jpa</usedDependency>
-            <usedDependency>org.apache.derby:derby</usedDependency>
-            <usedDependency>org.apache.derby:derbytools</usedDependency>
-            <usedDependency>ch.qos.logback:logback-core</usedDependency>
-          </usedDependencies>
-        </configuration>
-      </plugin>
       <plugin>
         <groupId>org.apache.rat</groupId>
         <artifactId>apache-rat-plugin</artifactId>
@@ -149,12 +134,10 @@
     <dependency>
       <groupId>ch.qos.logback</groupId>
       <artifactId>logback-classic</artifactId>
-      <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>ch.qos.logback</groupId>
       <artifactId>logback-core</artifactId>
-      <scope>compile</scope>
     </dependency>
   </dependencies>
 
diff --git a/plc4j/tools/ui/frontend/pom.xml b/plc4j/tools/ui/frontend/pom.xml
index 1c6acc3..ebc067f 100644
--- a/plc4j/tools/ui/frontend/pom.xml
+++ b/plc4j/tools/ui/frontend/pom.xml
@@ -34,6 +34,93 @@
 
   <build>
     <plugins>
+      <plugin>
+        <groupId>cz.habarta.typescript-generator</groupId>
+        <artifactId>typescript-generator-maven-plugin</artifactId>
+        <version>3.2.1263</version>
+        <executions>
+          <execution>
+            <id>generate-rest-client</id>
+            <phase>generate-sources</phase>
+            <goals>
+              <goal>generate</goal>
+            </goals>
+            <configuration>
+              <skip>false</skip>
+              <classes>
+                <!-- These are the PLC4J API types -->
+                <!--class>org.apache.plc4x.java.api.messages.PlcBrowseItem</class>
+                <class>org.apache.plc4x.java.api.messages.PlcBrowseItemArrayInfo</class>
+                <class>org.apache.plc4x.java.api.messages.PlcBrowseRequest</class>
+                <class>org.apache.plc4x.java.api.messages.PlcBrowseResponse</class>
+                <class>org.apache.plc4x.java.api.messages.PlcDiscoveryItem</class>
+                <class>org.apache.plc4x.java.api.messages.PlcDiscoveryRequest</class>
+                <class>org.apache.plc4x.java.api.messages.PlcDiscoveryResponse</class>
+                <class>org.apache.plc4x.java.api.metadata.PlcConnectionMetadata</class>
+                <class>org.apache.plc4x.java.api.metadata.PlcDriverMetadata</class>
+                <class>org.apache.plc4x.java.api.model.ArrayInfo</class>
+                <class>org.apache.plc4x.java.api.model.PlcQuery</class>
+                <class>org.apache.plc4x.java.api.model.PlcTag</class>
+                <class>org.apache.plc4x.java.api.types.PlcResponseCode</class>
+                <class>org.apache.plc4x.java.api.types.PlcSubscriptionType</class>
+                <class>org.apache.plc4x.java.api.types.PlcValueType</class>
+                <class>org.apache.plc4x.java.api.value.PlcValue</class-->
+                <class>org.apache.plc4x.java.tools.ui.model.Device</class>
+                <class>org.apache.plc4x.java.tools.ui.model.Driver</class>
+                <class>org.apache.plc4x.java.tools.ui.event.EventType</class>
+                <class>org.apache.plc4x.java.tools.ui.event.UiApplicationEvent</class>
+                <class>org.apache.plc4x.java.tools.ui.event.DeviceEvent</class>
+                <!-- Here come the REST controllers -->
+                <class>org.apache.plc4x.java.tools.ui.controller.DeviceController</class>
+                <class>org.apache.plc4x.java.tools.ui.controller.DriverController</class>
+              </classes>
+              <excludeClasses>
+                <excludeClass>java.lang.Comparable</excludeClass>
+              </excludeClasses>
+              <extensions>
+                <extension>cz.habarta.typescript.generator.ext.AxiosClientExtension</extension>
+              </extensions>
+              <outputKind>module</outputKind>
+              <outputFileType>implementationFile</outputFileType>
+              <classesFromAutomaticJaxrsApplication>true</classesFromAutomaticJaxrsApplication>
+              <generateJaxrsApplicationClient>true</generateJaxrsApplicationClient>
+              <generateSpringApplicationClient>true</generateSpringApplicationClient>
+              <jsonLibrary>jackson2</jsonLibrary>
+              <restOptionsType>AxiosRequestConfig</restOptionsType>
+              <restResponseType>AxiosPromise</restResponseType>
+              <outputFile>project/src/generated/plc4j-tools-ui-frontend.ts</outputFile>
+              <noFileComment>true</noFileComment>
+            </configuration>
+          </execution>
+        </executions>
+        <dependencies>
+          <dependency>
+            <groupId>cz.habarta.typescript-generator</groupId>
+            <artifactId>typescript-generator-spring</artifactId>
+            <version>3.2.1263</version>
+          </dependency>
+        </dependencies>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>license-maven-plugin</artifactId>
+        <version>2.4.0</version>
+        <executions>
+          <execution>
+            <id>add-apache-headers</id>
+            <phase>process-sources</phase>
+            <goals>
+              <goal>update-file-header</goal>
+            </goals>
+            <configuration>
+              <licenseName>apache_v2</licenseName>
+              <roots>
+                <root>project/src/generated</root>
+              </roots>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
       <plugin>
         <groupId>com.github.eirslett</groupId>
         <artifactId>frontend-maven-plugin</artifactId>
@@ -122,101 +209,4 @@
     </dependency>
   </dependencies>
 
-  <profiles>
-    <profile>
-      <id>update-generated-code</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>cz.habarta.typescript-generator</groupId>
-            <artifactId>typescript-generator-maven-plugin</artifactId>
-            <version>3.2.1263</version>
-            <executions>
-              <execution>
-                <id>generate-rest-client</id>
-                <phase>generate-sources</phase>
-                <goals>
-                  <goal>generate</goal>
-                </goals>
-                <configuration>
-                  <skip>false</skip>
-                  <classes>
-                    <!-- These are the PLC4J API types -->
-                    <!--class>org.apache.plc4x.java.api.messages.PlcBrowseItem</class>
-                    <class>org.apache.plc4x.java.api.messages.PlcBrowseItemArrayInfo</class>
-                    <class>org.apache.plc4x.java.api.messages.PlcBrowseRequest</class>
-                    <class>org.apache.plc4x.java.api.messages.PlcBrowseResponse</class>
-                    <class>org.apache.plc4x.java.api.messages.PlcDiscoveryItem</class>
-                    <class>org.apache.plc4x.java.api.messages.PlcDiscoveryRequest</class>
-                    <class>org.apache.plc4x.java.api.messages.PlcDiscoveryResponse</class>
-                    <class>org.apache.plc4x.java.api.metadata.PlcConnectionMetadata</class>
-                    <class>org.apache.plc4x.java.api.metadata.PlcDriverMetadata</class>
-                    <class>org.apache.plc4x.java.api.model.ArrayInfo</class>
-                    <class>org.apache.plc4x.java.api.model.PlcQuery</class>
-                    <class>org.apache.plc4x.java.api.model.PlcTag</class>
-                    <class>org.apache.plc4x.java.api.types.PlcResponseCode</class>
-                    <class>org.apache.plc4x.java.api.types.PlcSubscriptionType</class>
-                    <class>org.apache.plc4x.java.api.types.PlcValueType</class>
-                    <class>org.apache.plc4x.java.api.value.PlcValue</class-->
-                    <class>org.apache.plc4x.java.tools.ui.model.Device</class>
-                    <class>org.apache.plc4x.java.tools.ui.model.Driver</class>
-                    <class>org.apache.plc4x.java.tools.ui.event.EventType</class>
-                    <class>org.apache.plc4x.java.tools.ui.event.UiApplicationEvent</class>
-                    <class>org.apache.plc4x.java.tools.ui.event.DeviceEvent</class>
-                    <!-- Here come the REST controllers -->
-                    <class>org.apache.plc4x.java.tools.ui.controller.DeviceController</class>
-                    <class>org.apache.plc4x.java.tools.ui.controller.DriverController</class>
-                  </classes>
-                  <excludeClasses>
-                    <excludeClass>java.lang.Comparable</excludeClass>
-                  </excludeClasses>
-                  <extensions>
-                    <extension>cz.habarta.typescript.generator.ext.AxiosClientExtension</extension>
-                  </extensions>
-                  <outputKind>module</outputKind>
-                  <outputFileType>implementationFile</outputFileType>
-                  <classesFromAutomaticJaxrsApplication>true</classesFromAutomaticJaxrsApplication>
-                  <generateJaxrsApplicationClient>true</generateJaxrsApplicationClient>
-                  <generateSpringApplicationClient>true</generateSpringApplicationClient>
-                  <jsonLibrary>jackson2</jsonLibrary>
-                  <restOptionsType>AxiosRequestConfig</restOptionsType>
-                  <restResponseType>AxiosPromise</restResponseType>
-                  <outputFile>project/src/generated/plc4j-tools-ui-frontend.ts</outputFile>
-                  <noFileComment>true</noFileComment>
-                </configuration>
-              </execution>
-            </executions>
-            <dependencies>
-              <dependency>
-                <groupId>cz.habarta.typescript-generator</groupId>
-                <artifactId>typescript-generator-spring</artifactId>
-                <version>3.2.1263</version>
-              </dependency>
-            </dependencies>
-          </plugin>
-          <plugin>
-            <groupId>org.codehaus.mojo</groupId>
-            <artifactId>license-maven-plugin</artifactId>
-            <version>2.4.0</version>
-            <executions>
-              <execution>
-                <id>add-apache-headers</id>
-                <phase>process-sources</phase>
-                <goals>
-                  <goal>update-file-header</goal>
-                </goals>
-                <configuration>
-                  <licenseName>apache_v2</licenseName>
-                  <roots>
-                    <root>project/src/generated</root>
-                  </roots>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-  </profiles>
-
 </project>
diff --git a/plc4j/tools/ui/frontend/project/src/generated/plc4j-tools-ui-frontend.ts b/plc4j/tools/ui/frontend/project/src/generated/plc4j-tools-ui-frontend.ts
index d4e7c4f..64a3dd0 100644
--- a/plc4j/tools/ui/frontend/project/src/generated/plc4j-tools-ui-frontend.ts
+++ b/plc4j/tools/ui/frontend/project/src/generated/plc4j-tools-ui-frontend.ts
@@ -46,8 +46,8 @@ export interface DeviceEvent extends UiApplicationEvent<Device> {
 }
 
 export interface PlcDriverMetadata {
-    protocolConfigurationOptionMetadata?: OptionMetadata;
     discoverySupported: boolean;
+    protocolConfigurationOptionMetadata?: OptionMetadata;
     defaultTransportCode?: string;
     supportedTransportCodes: string[];
 }
@@ -69,8 +69,8 @@ export interface Option {
     key: string;
     type: OptionType;
     defaultValue?: any;
-    required: boolean;
     description: string;
+    required: boolean;
 }
 
 export interface Serializable {
diff --git a/plc4j/tools/ui/pom.xml b/plc4j/tools/ui/pom.xml
index 369ac4b..4a071b3 100644
--- a/plc4j/tools/ui/pom.xml
+++ b/plc4j/tools/ui/pom.xml
@@ -73,6 +73,13 @@
             </configuration>
           </execution>
         </executions>
+        <dependencies>
+          <dependency>
+            <groupId>org.codehaus.mojo</groupId>
+            <artifactId>extra-enforcer-rules</artifactId>
+            <version>1.7.0</version>
+          </dependency>
+        </dependencies>
       </plugin>
     </plugins>
   </build>
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..e2f30d9
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,544 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      https://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache</groupId>
+    <artifactId>apache</artifactId>
+    <version>31</version>
+  </parent>
+
+  <groupId>org.apache.plc4x</groupId>
+  <artifactId>plc4x-extras-parent</artifactId>
+  <version>0.13.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <name>PLC4X-Extras</name>
+  <description>
+    PLC4X is an effort to create a universal library for accessing industrial programmable logic controllers
+    using a variety of protocols using a uniform API.
+
+    The Extras Repository contains all Integration modules, Tools and Examples.
+  </description>
+  <url>https://plc4x.apache.org</url>
+  <inceptionYear>2017</inceptionYear>
+
+  <scm>
+    <connection>scm:git:https://gitbox.apache.org/repos/asf/plc4x-extras.git</connection>
+    <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/plc4x-extras.git</developerConnection>
+    <url>https://github.com/apache/plc4x-extras</url>
+    <tag>HEAD</tag>
+  </scm>
+
+  <issueManagement>
+    <system>GitHub</system>
+    <url>https://github.com/apache/plc4x-extras/issues</url>
+  </issueManagement>
+
+  <mailingLists>
+    <mailingList>
+      <name>Apache PLC4X Developer List</name>
+      <subscribe>mailto:dev-subscribe@plc4x.apache.org</subscribe>
+      <unsubscribe>mailto:dev-unsubscribe@plc4x.apache.org</unsubscribe>
+      <post>mailto:dev@plc4x.apache.org</post>
+      <archive>https://mail-archives.apache.org/mod_mbox/plc4x-dev/</archive>
+    </mailingList>
+    <mailingList>
+      <name>PLC4X Commits List</name>
+      <subscribe>mailto:commits-subscribe@plc4x.apache.org</subscribe>
+      <unsubscribe>mailto:commits-unsubscribe@plc4x.apache.org</unsubscribe>
+      <post>mailto:commits@plc4x.apache.org</post>
+      <archive>https://mail-archives.apache.org/mod_mbox/plc4x-commits/</archive>
+    </mailingList>
+    <mailingList>
+      <name>PLC4X Jira Notifications List</name>
+      <subscribe>mailto:issues-subscribe@plc4x.apache.org</subscribe>
+      <unsubscribe>mailto:issues-unsubscribe@plc4x.apache.org</unsubscribe>
+      <post>mailto:issues@plc4x.apache.org</post>
+      <archive>https://mail-archives.apache.org/mod_mbox/plc4x-issues/</archive>
+    </mailingList>
+  </mailingLists>
+
+  <properties>
+    <java.version>11</java.version>
+
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <project.reporting.outputencoding>UTF-8</project.reporting.outputencoding>
+
+    <!-- Timestamp for the reproducible builds -->
+    <maven.build.timestamp.format>yyyy-MM-dd'T'HH:mm:ss'Z'</maven.build.timestamp.format>
+    <project.build.outputTimestamp>2024-02-16T14:53:02Z</project.build.outputTimestamp>
+
+    <plc4x.version>0.13.0-SNAPSHOT</plc4x.version>
+  </properties>
+
+  <build>
+    <plugins>
+      <!-- Check if all source files have the required apache license headers -->
+      <plugin>
+        <groupId>org.apache.rat</groupId>
+        <artifactId>apache-rat-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>license-check</id>
+            <phase>verify</phase>
+            <goals>
+              <goal>check</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <useMavenDefaultExcludes>true</useMavenDefaultExcludes>
+          <excludes>
+            <!-- Git related files -->
+            <exclude>**/.git/**</exclude>
+            <exclude>**/.gitignore</exclude>
+            <exclude>**/cmake-*/**</exclude>
+            <exclude>**/.lock/**</exclude>
+
+            <!-- Maven related files -->
+            <exclude>**/target/**</exclude>
+            <exclude>target/**</exclude>
+            <exclude>out/**</exclude>
+
+            <!-- Python related files -->
+            <exclude>**/.pytest_cache/**</exclude>
+            <exclude>**/.mypy_cache/**</exclude>
+            <exclude>**/Pipfile</exclude>
+            <exclude>**/Pipfile.lock</exclude>
+
+            <!-- Eclipse related files -->
+            <exclude>**/.project</exclude>
+            <exclude>**/.settings/**</exclude>
+            <exclude>**/.classpath</exclude>
+            <exclude>**/.factorypath</exclude>
+
+            <!-- IntelliJ related files -->
+            <exclude>**/.idea/**</exclude>
+            <exclude>**/*.iml</exclude>
+            <exclude>**/.attach_pid*</exclude>
+
+            <!-- CLion stuff (C++ IDE) -->
+            <exclude>**/cmake-build-debug/**</exclude>
+            <exclude>**/*.make</exclude>
+            <exclude>**/*.cmake</exclude>
+            <exclude>**/*.internal</exclude>
+            <exclude>**/link.txt</exclude>
+            <!-- Not sure why I can't exclude all Makefile's from just the plc4c directory -->
+            <!-- exclude>**/Makefile</exclude -->
+            <exclude>**/Makefile</exclude>
+            <exclude>**/*.includecache</exclude>
+            <exclude>**/CMakeFiles/**</exclude>
+            <exclude>**/CMakeCache.txt</exclude>
+            <exclude>**/DartConfiguration.tcl</exclude>
+
+            <!-- Temporarily exclude generated code from thrift in python modules -->
+            <!--exclude>generated/**</exclude-->
+            <!-- Temporary Python files -->
+            <exclude>**/.eggs/**</exclude>
+            <exclude>**/plc4py.egg-info/**</exclude>
+
+            <!-- Temporary Python virtualenv files-->
+            <exclude>**/venv/**</exclude>
+
+            <!-- Temporary pytest and mypy folders -->
+            <exclude>**/.mypy_cache/**</exclude>
+            <exclude>**/.pytest_cache/**</exclude>
+
+            <!-- Exclude a temp file needed by Docker -->
+            <exclude>project_version</exclude>
+
+            <!-- Exclude files generated by the go build system -->
+            <exclude>**/go.sum</exclude>
+
+            <!-- Exclude Node related files -->
+            <!--
+              This is actually only needed when having built with Java 19
+              or higher and then building with a version below 19. Because
+              in this case, the "ui" module is disabled, and the left-over
+              build files make rat complain.
+            -->
+            <exclude>ui/frontend/project/dist/**</exclude>
+            <exclude>ui/frontend/project/node/**</exclude>
+            <exclude>ui/frontend/project/node_modules/**</exclude>
+
+            <exclude>.mvn/**</exclude>
+
+            <!-- Exclude core dumps-->
+            <exclude>**/hs_err_pid*</exclude>
+            <exclude>**/replay_pid*</exclude>
+          </excludes>
+        </configuration>
+      </plugin>
+
+      <!-- Generate the legally required text files in the jars -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-remote-resources-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>process-resource-bundles</id>
+            <phase>prepare-package</phase>
+            <goals>
+              <goal>process</goal>
+            </goals>
+            <configuration>
+              <resourceBundles>
+                <!-- Will generate META-INF/{DEPENDENCIES,LICENSE,NOTICE} -->
+                <resourceBundle>org.apache.apache.resources:apache-jar-resource-bundle:1.5</resourceBundle>
+              </resourceBundles>
+              <!-- Content in this directory will be appended to generated resources -->
+              <appendedResourcesDirectory>${basedir}/src/remote-resources</appendedResourcesDirectory>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.rat</groupId>
+          <artifactId>apache-rat-plugin</artifactId>
+          <version>0.16.1</version>
+          <configuration>
+            <!--
+                Make rat output the files with missing licensed directly into the
+                build output (This way we don't have to look into the rat.txt to find
+                out which ones)
+            -->
+            <consoleOutput>true</consoleOutput>
+          </configuration>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+
+  <!-- Make Snapshots of Apache projects available -->
+  <repositories>
+    <repository>
+      <id>apache-snapshots</id>
+      <url>https://repository.apache.org/content/repositories/snapshots</url>
+      <releases>
+        <enabled>false</enabled>
+      </releases>
+      <snapshots>
+        <enabled>true</enabled>
+      </snapshots>
+    </repository>
+    <!-- When we release stuff like the site skin or the build tools, syncing to Maven Central usually takes some time -->
+    <repository>
+      <id>apache-releases</id>
+      <url>https://repository.apache.org/content/repositories/releases</url>
+      <releases>
+        <enabled>true</enabled>
+      </releases>
+      <snapshots>
+        <enabled>false</enabled>
+      </snapshots>
+    </repository>
+  </repositories>
+
+  <!-- Make Snapshots of Apache plugins available -->
+  <pluginRepositories>
+    <pluginRepository>
+      <id>apache-snapshots</id>
+      <url>https://repository.apache.org/content/repositories/snapshots</url>
+      <releases>
+        <enabled>false</enabled>
+      </releases>
+      <snapshots>
+        <enabled>true</enabled>
+      </snapshots>
+    </pluginRepository>
+    <!-- When we release stuff like the site skin or the build tools, syncing to Maven Central usually takes some time -->
+    <pluginRepository>
+      <id>apache-releases</id>
+      <url>https://repository.apache.org/content/repositories/releases</url>
+      <releases>
+        <enabled>true</enabled>
+      </releases>
+      <snapshots>
+        <enabled>false</enabled>
+      </snapshots>
+    </pluginRepository>
+  </pluginRepositories>
+
+  <profiles>
+    <!-- Build PLC4X including the C modules -->
+    <profile>
+      <id>with-c</id>
+      <modules>
+        <module>plc4c</module>
+      </modules>
+    </profile>
+
+    <!-- Build PLC4X including the Go modules -->
+    <profile>
+      <id>with-go</id>
+      <modules>
+        <module>plc4go</module>
+      </modules>
+    </profile>
+
+    <!-- Build PLC4X including the Java modules -->
+    <profile>
+      <id>with-java</id>
+      <modules>
+        <module>plc4j</module>
+      </modules>
+    </profile>
+
+    <!-- Profile for linux amd64 (Self-Enabling) -->
+    <profile>
+      <id>.os-linux-amd64</id>
+      <activation>
+        <os>
+          <family>unix</family>
+          <name>Linux</name>
+          <arch>amd64</arch>
+        </os>
+      </activation>
+      <properties>
+        <os.suffix>linux</os.suffix>
+        <os.classifier>linux-x86_64</os.classifier>
+        <cmake.generator>Unix Makefiles</cmake.generator>
+        <python.venv.bin>venv/bin/</python.venv.bin>
+        <python.exe.bin>python3</python.exe.bin>
+        <javafx.platform>linux</javafx.platform>
+      </properties>
+    </profile>
+    <!-- Profile for linux x86_64 (Self-Enabling) -->
+    <profile>
+      <id>.os-linux-x86_64</id>
+      <activation>
+        <os>
+          <family>unix</family>
+          <name>Linux</name>
+          <arch>x86_64</arch>
+        </os>
+      </activation>
+      <properties>
+        <os.suffix>linux</os.suffix>
+        <os.classifier>linux-x86_64</os.classifier>
+        <cmake.generator>Unix Makefiles</cmake.generator>
+        <python.venv.bin>venv/bin/</python.venv.bin>
+        <python.exe.bin>python3</python.exe.bin>
+        <javafx.platform>linux</javafx.platform>
+      </properties>
+    </profile>
+    <!-- Profile for linux aarch64 (Self-Enabling) -->
+    <profile>
+      <id>.os-linux-aarch64</id>
+      <activation>
+        <os>
+          <family>unix</family>
+          <name>Linux</name>
+          <arch>aarch64</arch>
+        </os>
+      </activation>
+      <properties>
+        <os.suffix>linux</os.suffix>
+        <os.classifier>linux-${os.arch}</os.classifier>
+        <cmake.generator>Unix Makefiles</cmake.generator>
+        <python.venv.bin>venv/bin/</python.venv.bin>
+        <python.exe.bin>python3</python.exe.bin>
+        <javafx.platform>linux-aarch64</javafx.platform>
+      </properties>
+    </profile>
+    <!-- Profile for mac amd64 (Self-Enabling) -->
+    <profile>
+      <id>.os-mac-amd64</id>
+      <activation>
+        <os>
+          <family>mac</family>
+          <arch>amd64</arch>
+        </os>
+      </activation>
+      <properties>
+        <os.suffix>mac</os.suffix>
+        <os.classifier>mac-x86_64</os.classifier>
+        <cmake.generator>Unix Makefiles</cmake.generator>
+        <python.venv.bin>venv/bin/</python.venv.bin>
+        <python.exe.bin>python3</python.exe.bin>
+        <javafx.platform>mac</javafx.platform>
+      </properties>
+    </profile>
+    <!-- Profile for mac x86_64 (Self-Enabling) -->
+    <profile>
+      <id>.os-mac-x86_64</id>
+      <activation>
+        <os>
+          <family>mac</family>
+          <arch>x86_64</arch>
+        </os>
+      </activation>
+      <properties>
+        <os.suffix>mac</os.suffix>
+        <os.classifier>mac-x86_64</os.classifier>
+        <cmake.generator>Unix Makefiles</cmake.generator>
+        <python.venv.bin>venv/bin/</python.venv.bin>
+        <python.exe.bin>python3</python.exe.bin>
+        <javafx.platform>mac</javafx.platform>
+      </properties>
+    </profile>
+    <!-- Profile for mac (Self-Enabling) -->
+    <profile>
+      <id>.os-mac-aarch64</id>
+      <activation>
+        <os>
+          <family>mac</family>
+          <arch>aarch64</arch>
+        </os>
+      </activation>
+      <properties>
+        <os.suffix>mac</os.suffix>
+        <os.classifier>mac-aarch64</os.classifier>
+        <cmake.generator>Unix Makefiles</cmake.generator>
+        <python.venv.bin>venv/bin/</python.venv.bin>
+        <python.exe.bin>python3</python.exe.bin>
+        <javafx.platform>mac-aarch64</javafx.platform>
+      </properties>
+    </profile>
+    <!-- profile for windows (Self-Enabling) -->
+    <profile>
+      <id>.os-windows</id>
+      <activation>
+        <os>
+          <family>windows</family>
+        </os>
+      </activation>
+      <properties>
+        <os.suffix>win</os.suffix>
+        <os.classifier>windows-x86_64</os.classifier>
+        <cmake.generator>MinGW Makefiles</cmake.generator>
+        <python.venv.bin>venv/Scripts/</python.venv.bin>
+        <python.exe.bin>python</python.exe.bin>
+        <javafx.platform>win-x86</javafx.platform>
+      </properties>
+    </profile>
+
+    <!--
+      This profile extends the default "apache-release" configuration with automatic checksum-
+      generation for the release source artifact. It is automatically activated during the
+      release build and only needed there.
+    -->
+    <profile>
+      <id>apache-release</id>
+      <!-- Ensure these are run as part of a release-build -->
+      <properties>
+        <skip-code-generation-tests>false</skip-code-generation-tests>
+        <skip-dependency-cve-scan>false</skip-dependency-cve-scan>
+      </properties>
+      <build>
+        <plugins>
+          <!--
+            Create MD5 and SHA512 checksum files for the release artifacts.
+          -->
+          <plugin>
+            <groupId>net.nicoulaj.maven.plugins</groupId>
+            <artifactId>checksum-maven-plugin</artifactId>
+            <version>1.11</version>
+            <!-- Only run this in the root module of the project -->
+            <inherited>false</inherited>
+            <executions>
+              <execution>
+                <phase>verify</phase>
+                <goals>
+                  <goal>files</goal>
+                </goals>
+                <configuration>
+                  <algorithms>
+                    <algorithm>SHA-512</algorithm>
+                  </algorithms>
+                  <includeRelativePath>true</includeRelativePath>
+                  <fileSets>
+                    <fileSet>
+                      <directory>${project.build.directory}</directory>
+                      <includes>
+                        <include>apache-plc4x-${project.version}-source-release.zip</include>
+                      </includes>
+                    </fileSet>
+                  </fileSets>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+          <!-- We want to sign the artifact, the POM, and all attached artifacts (except for SHA-512 checksum) -->
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-gpg-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>sign-release-artifacts</id>
+                <goals>
+                  <goal>sign</goal>
+                </goals>
+                <configuration>
+                  <skip>${skip-pgp-signing}</skip>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-deploy-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>default-deploy</id>
+                <phase>deploy</phase>
+                <goals>
+                  <goal>deploy</goal>
+                </goals>
+                <configuration>
+                  <altReleaseDeploymentRepository>apache.releases.https::file:/ws/out/.local-artifacts-dir</altReleaseDeploymentRepository>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+          <!--
+            Generate an SBOM for the project
+          -->
+          <plugin>
+            <groupId>org.cyclonedx</groupId>
+            <artifactId>cyclonedx-maven-plugin</artifactId>
+            <version>2.8.0</version>
+            <!-- Only run this in the root module of the project -->
+            <inherited>false</inherited>
+            <configuration>
+              <outputName>apache-${project.artifactId}-${project.version}-sbom</outputName>
+            </configuration>
+            <executions>
+              <execution>
+                <phase>package</phase>
+                <goals>
+                  <goal>makeAggregateBom</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+  </profiles>
+
+</project>