Files
hawkbit/pom.xml
Avgustin Marinov 1be473b22c [#2845] Bump Spring boot to 4.x (#2941)
Notes:
1. (!) Eclipselink shall be migrated to 5.0 (in 4.0.8 there are incompatible classes, e.g EJBQueryImpl doesn't implement some newer methods). In the moment is with beta (5.0.0-B12) - JUST for testing!
2. (!) Ethlo plugin doesn't work with Eclipselink 5.0, it builds with Eclipselink 4.0.8 (could be a problem)
3. Dependencies - new starters, test starters changes, some dependencies refactoring
4. Auto-configs split - package changes, some properties classes changes
5. Spring nullable org.springframework.lang.Nullable/NonNull are depecated and replaced with jspcify -> org.jspecify.annotations.Nullable/NonNull (NullMarked)
6. Lombok config - adding lombok.addNullAnnotations=jspecify - to do not mess annotations
7. Distributed lock table changes - SP_LOCK table db migration
8. Spring Retry replaced with Spring Core Retry - does repace retry in hawkbit
9. Specifications -> added Update/Delete(/Predicate) Specifications and JpaSpecificationExecutor changed
10. HawkbitBaseRepositoryFactoryBean modified to register properly
11. Jackson - 2 -> 3, package migrations, finals are not deserialized by default(enable finals deserialization, consider make non-final), too ‘smart’ tries to set complex objects instead of using non args constructor (-> @JsonIgnore), some other default configs made

Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
2026-04-14 11:31:41 +03:00

785 lines
35 KiB
XML

<!--
Copyright (c) 2015 Bosch Software Innovations GmbH and others
This program and the accompanying materials are made
available under the terms of the Eclipse Public License 2.0
which is available at https://www.eclipse.org/legal/epl-2.0/
SPDX-License-Identifier: EPL-2.0
-->
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
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.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>4.0.5</version>
</parent>
<groupId>org.eclipse.hawkbit</groupId>
<artifactId>hawkbit-parent</artifactId>
<version>${revision}</version>
<packaging>pom</packaging>
<name>hawkBit :: Parent</name>
<licenses>
<license>
<name>EPL-2.0</name>
<url>https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt</url>
<comments>Eclipse Public License - Version 2.0</comments>
</license>
</licenses>
<scm>
<connection>scm:git:git@github.com:eclipse-hawkbit/hawkbit.git</connection>
<developerConnection>scm:git:https://github.com/eclipse-hawkbit/hawkbit.git</developerConnection>
<url>https://github.com/eclipse-hawkbit/hawkbit.git</url>
</scm>
<properties>
<!-- Overrides START - to be reviewed regularly -->
<!-- Override vulnerable commons-fileupload used by feign-form-spring (via spring-cloud-starter-openfeign) -->
<commons-fileupload.version>1.6.0</commons-fileupload.version>
<!-- Override commons-lang3 version since 3.17 is vulnerable -->
<commons-lang.version>3.20.0</commons-lang.version>
<!-- Overrides END -->
<revision>0-SNAPSHOT</revision>
<java.version>17</java.version>
<!-- java.version is used to build the hawkbit in general, however, some artifacts which could be used
as libraries in other projects might be compiled with a different, lower, java version. -->
<java.client.version>17</java.client.version>
<!-- must be the same as the parent version -->
<spring.boot.version>4.0.5</spring.boot.version>
<spring.cloud.version>2025.1.1</spring.cloud.version>
<springdoc-openapi.version>3.0.3</springdoc-openapi.version>
<!-- openfeign versions -->
<spring-cloud-openfeign.version>5.0.1</spring-cloud-openfeign.version>
<openfeign-hc5.version>13.11</openfeign-hc5.version>
<!-- Spring boot version overrides (should be reviewed with every Spring boot upgrade) - START -->
<!-- Newer versions needed than defined in the Spring boot -->
<!-- Spring boot version overrides - END -->
<!-- Eclipselink - START -->
<!--
Ethlo plugin uses 4.x dependencies - since it only does static weaving - it should be fine - but should eventually upgrade its dependencies.
-->
<eclipselink.version>5.0.0</eclipselink.version>
<eclipselink.maven.plugin.version>3.0.2</eclipselink.maven.plugin.version>
<!-- Eclipselink - END -->
<!-- Spring AI for MCP support -->
<spring-ai.version>1.1.4</spring-ai.version>
<!-- Misc libraries versions - START -->
<cron-utils.version>9.2.1</cron-utils.version>
<jsoup.version>1.22.1</jsoup.version>
<rsql-parser.version>2.1.0</rsql-parser.version>
<commons-io.version>2.21.0</commons-io.version>
<commons-collections4.version>4.5.0</commons-collections4.version>
<io-protostuff.version>1.8.0</io-protostuff.version>
<!-- test -->
<rabbitmq.http-client.version>5.5.0</rabbitmq.http-client.version>
<classgraph.version>4.8.184</classgraph.version>
<awaitility.version>4.3.0</awaitility.version>
<!-- Misc libraries versions - END -->
<!-- Maven Plugin versions - START -->
<maven.enforcer.plugin.version>3.6.2</maven.enforcer.plugin.version>
<flatten.maven.plugin.version>1.7.3</flatten.maven.plugin.version>
<maven.surefire.plugin.version>3.5.5</maven.surefire.plugin.version>
<jacoco.maven.plugin.version>0.8.14</jacoco.maven.plugin.version>
<license.tool.plugin.version>1.1.0</license.tool.plugin.version>
<license.maven.plugin.version>5.0.0</license.maven.plugin.version>
<central.publishing.maven.plugin.version>0.10.0</central.publishing.maven.plugin.version>
<maven.gpg.plugin.version>3.2.8</maven.gpg.plugin.version>
<spotless-maven-plugin.version>3.4.0</spotless-maven-plugin.version>
<!-- Maven Plugin versions - END -->
<!-- Test - START -->
<surefire.forkcount>1</surefire.forkcount>
<surefire.jvm.args/>
<!-- Test - END -->
<!-- Sonar - START -->
<sonar.host.url>https://sonarcloud.io</sonar.host.url>
<sonar.branch.name>LOCAL_SCAN</sonar.branch.name>
<sonar.qualitygate.wait>true</sonar.qualitygate.wait>
<sonar.qualitygate.timeout>600</sonar.qualitygate.timeout>
<sonar.links.homepage>https://hawkbit.eclipse.dev/</sonar.links.homepage>
<sonar.links.ci>https://github.com/eclipse-hawkbit/hawkbit/actions</sonar.links.ci>
<sonar.coverage.exclusions>
**/*Configuration.java,
**/*Properties.java,
**/*Exception.java,
**/src/test/**,
**/src/main/java/org/eclipse/hawkbit/repository/test/**,
**/src/main/java/org/eclipse/hawkbit/rabbitmq/test/**,
**/src/main/java/org/eclipse/hawkbit/ui/**
</sonar.coverage.exclusions>
<sonar.coverage.jacoco.xmlReportPaths>
${project.basedir}/../target/jacoco-aggregate/jacoco.xml,
${project.basedir}/../../target/jacoco-aggregate/jacoco.xml
</sonar.coverage.jacoco.xmlReportPaths>
<!-- Sonar - END -->
<!-- Dash tool integration - START -->
<dash.skip>false</dash.skip>
<dash.fail>true</dash.fail>
<dash.projectId>iot.hawkbit</dash.projectId>
<dash.summary>.3rd-party/DEPENDENCIES</dash.summary>
<!-- To automatically create IP Team review requests for identified content call with -Ddash.iplab.token=<token> (do not share your access token) -->
<dash.review.summary>${project.build.directory}/.3rd-party/DEPENDENCIES_REVIEW</dash.review.summary>
<excludeGroupIds>org.eclipse,org.junit</excludeGroupIds>
<!-- Dash tool integration - END -->
<skipPublishing>false</skipPublishing>
<ratchetFrom>origin/master</ratchetFrom>
</properties>
<developers>
<developer>
<id>avgustinmm</id>
<email>Avgustin.Marinov@bosch.com</email>
<organization>Bosch Digital</organization>
<organizationUrl>https://www.bosch-digital.com/</organizationUrl>
<roles>
<role>Lead</role>
<role>Committer</role>
</roles>
</developer>
<developer>
<id>laverman</id>
<email>Jeroen.Laverman@bosch.io</email>
<organization>Bosch Digital</organization>
<organizationUrl>https://www.bosch-digital.com/</organizationUrl>
<roles>
<role>Lead</role>
<role>Committer</role>
</roles>
</developer>
<developer>
<id>stefbehl</id>
<email>Stefan.Behl@bosch.io</email>
<organization>Bosch Digital</organization>
<organizationUrl>https://www.bosch-digital.com/</organizationUrl>
<roles>
<role>Committer</role>
</roles>
</developer>
<developer>
<id>michahirsch</id>
<roles>
<role>Committer</role>
</roles>
</developer>
</developers>
<pluginRepositories>
<pluginRepository>
<id>dash-licenses</id>
<url>https://repo.eclipse.org/content/repositories/dash-maven2-releases</url>
</pluginRepository>
</pluginRepositories>
<!-- Dependencies for all hawkBit modules -->
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!-- Overrides START -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${commons-fileupload.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang.version}</version>
</dependency>
<!-- Overrides END -->
<!-- Misc -->
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>http-client</artifactId>
<version>${rabbitmq.http-client.version}</version>
</dependency>
<dependency>
<groupId>com.cronutils</groupId>
<artifactId>cron-utils</artifactId>
<version>${cron-utils.version}</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>${jsoup.version}</version>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring AI for MCP Server -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>${spring-ai.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>${spring.boot.version}</version>
<exclusions>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>${spring.boot.version}</version>
<exclusions>
<exclusion>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-api</artifactId>
<version>${springdoc-openapi.version}</version>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>${springdoc-openapi.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>${spring-cloud-openfeign.version}</version>
<!--
CVE-2025-48976: override commons-fileupload dependency - 1.5 -> 1.6.0,
remove it when spring-cloud-openfeign start bringing it down,
commons-fileupload 1.6.0(+) shall be added explicitly if needed
-->
<exclusions>
<exclusion>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-hc5</artifactId>
<version>${openfeign-hc5.version}</version>
</dependency>
<!-- Protostuff Io -->
<dependency>
<groupId>io.protostuff</groupId>
<artifactId>protostuff-core</artifactId>
<version>${io-protostuff.version}</version>
</dependency>
<dependency>
<groupId>io.protostuff</groupId>
<artifactId>protostuff-runtime</artifactId>
<version>${io-protostuff.version}</version>
</dependency>
<!-- RSQL / FIQL parser -->
<dependency>
<groupId>cz.jirutka.rsql</groupId>
<artifactId>rsql-parser</artifactId>
<version>${rsql-parser.version}</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${commons-io.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>${commons-collections4.version}</version>
</dependency>
<!-- Test -->
<dependency>
<groupId>io.github.classgraph</groupId>
<artifactId>classgraph</artifactId>
<version>${classgraph.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit-junit</artifactId>
<version>${spring-amqp.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit-test</artifactId>
<version>${spring-amqp.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.awaitility</groupId>
<artifactId>awaitility</artifactId>
<version>${awaitility.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
</plugin>
<plugin>
<!--
https://github.com/diffplug/spotless/tree/main/plugin-maven#-spotless-keep-your-code-spotless-with-maven
Usage:
mvn spotless:apply
mvn spotless:check
-->
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
<version>${spotless-maven-plugin.version}</version>
<configuration>
<ratchetFrom>${ratchetFrom}</ratchetFrom>
<java>
<eclipse>
<file>${maven.multiModuleProjectDirectory}/eclipse_codeformatter.xml</file>
</eclipse>
</java>
</configuration>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>${maven.enforcer.plugin.version}</version>
<executions>
<execution>
<id>enforce-maven-and-java</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireMavenVersion>
<version>3.8.6</version>
</requireMavenVersion>
<requireJavaVersion>
<version>17</version>
</requireJavaVersion>
</rules>
</configuration>
</execution>
<execution>
<id>enforce-no-snapshots-deps</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireReleaseDeps>
<message>No Snapshots Allowed!</message>
<onlyWhenRelease>true</onlyWhenRelease>
</requireReleaseDeps>
<requireReleaseDeps>
<message>No Snapshots Allowed!</message>
<onlyWhenRelease>false</onlyWhenRelease>
<excludes>
<exclude>org.eclipse.hawkbit:*</exclude>
<!-- if used in child poms with different groupId -->
<exclude>${project.groupId}:*</exclude>
</excludes>
</requireReleaseDeps>
</rules>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>${flatten.maven.plugin.version}</version>
<configuration>
<flattenMode>resolveCiFriendliesOnly</flattenMode>
<updatePomFile>true</updatePomFile>
</configuration>
<executions>
<execution>
<id>flatten</id>
<phase>process-resources</phase>
<goals>
<goal>flatten</goal>
</goals>
</execution>
<execution>
<id>flatten.clean</id>
<phase>clean</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<parameters>true</parameters>
<proc>full</proc>
<compilerArgument>-Xlint:all,-processing</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<doclint>syntax</doclint>
</configuration>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.maven.plugin.version}</version>
<executions>
<execution>
<id>prepare-ut-agent</id>
<phase>process-test-classes</phase>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<propertyName>jacoco.agent.args</propertyName>
</configuration>
</execution>
<execution>
<id>prepare-it-agent</id>
<phase>pre-integration-test</phase>
<goals>
<goal>prepare-agent-integration</goal>
</goals>
<configuration>
<propertyName>jacoco.agent.integration.args</propertyName>
</configuration>
</execution>
<execution>
<id>report-ut</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
<execution>
<id>report-it</id>
<phase>post-integration-test</phase>
<goals>
<goal>report-integration</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven.surefire.plugin.version}</version>
<configuration>
<reuseForks>true</reuseForks>
<forkCount>${surefire.forkcount}</forkCount>
<argLine>${jacoco.agent.args} ${surefire.jvm.args}</argLine>
<excludes>
<exclude>**/Abstract*.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<profiles>
<profile>
<id>checkLicense</id>
<build>
<plugins>
<plugin>
<groupId>com.mycila</groupId>
<artifactId>license-maven-plugin</artifactId>
<version>${license.maven.plugin.version}</version>
<configuration>
<licenseSets>
<licenseSet>
<header>licenses/LICENSE_HEADER_TEMPLATE.txt</header>
<validHeaders>
<validHeader>licenses/LICENSE_HEADER_TEMPLATE_CONTRIBUTORS_23.txt</validHeader>
<validHeader>licenses/LICENSE_HEADER_TEMPLATE_CONTRIBUTORS_24.txt</validHeader>
<validHeader>licenses/LICENSE_HEADER_TEMPLATE_CONTRIBUTORS_25.txt</validHeader>
<validHeader>licenses/LICENSE_HEADER_TEMPLATE_BOSCH_15.txt</validHeader>
<validHeader>licenses/LICENSE_HEADER_TEMPLATE_BOSCH_18.txt</validHeader>
<validHeader>licenses/LICENSE_HEADER_TEMPLATE_BOSCH_19.txt</validHeader>
<validHeader>licenses/LICENSE_HEADER_TEMPLATE_BOSCH_20.txt</validHeader>
<validHeader>licenses/LICENSE_HEADER_TEMPLATE_BOSCH_21.txt</validHeader>
<validHeader>licenses/LICENSE_HEADER_TEMPLATE_BOSCH_22.txt</validHeader>
<validHeader>licenses/LICENSE_HEADER_TEMPLATE_BOSCH_23.txt</validHeader>
<validHeader>licenses/LICENSE_HEADER_TEMPLATE_MICROSOFT_18.txt</validHeader>
<validHeader>licenses/LICENSE_HEADER_TEMPLATE_MICROSOFT_20.txt</validHeader>
<validHeader>licenses/LICENSE_HEADER_TEMPLATE_SIEMENS.txt</validHeader>
<validHeader>licenses/LICENSE_HEADER_TEMPLATE_SIEMENS_18.txt</validHeader>
<validHeader>licenses/LICENSE_HEADER_TEMPLATE_DEVOLO_19.txt</validHeader>
<validHeader>licenses/LICENSE_HEADER_TEMPLATE_DEVOLO_20.txt</validHeader>
<validHeader>licenses/LICENSE_HEADER_TEMPLATE_KIWIGRID_19.txt</validHeader>
<validHeader>licenses/LICENSE_HEADER_TEMPLATE_ENAPTER.txt</validHeader>
<validHeader>licenses/LICENSE_HEADER_TEMPLATE_BLUEZONE_25.txt</validHeader>
</validHeaders>
<excludes>
<exclude>docker/**</exclude>
<exclude>licenses/LICENSE*</exclude>
<exclude>docs/**</exclude>
<exclude>eclipse_codeformatter.xml</exclude>
<exclude>intellij_codeformatter.xml</exclude>
<exclude>**/*.sql</exclude>
<!-- hawkbit-ui - start-->
<exclude>**/banner.txt</exclude>
<exclude>**/robots.txt</exclude>
<exclude>**/frontend/**</exclude>
<exclude>**/generated/**</exclude>
<exclude>**/tsconfig.json</exclude>
<exclude>**/types.d.ts</exclude>
<exclude>**/vite.config.ts</exclude>
<exclude>**/vite.generated.ts</exclude>
<!-- hawkbit-ui - end -->
<!-- development files -->
<exclude>**/application-local.properties</exclude>
</excludes>
</licenseSet>
</licenseSets>
<mapping>
<java>JAVADOC_STYLE</java>
<scss>JAVADOC_STYLE</scss>
</mapping>
</configuration>
</plugin>
<plugin>
<groupId>org.eclipse.dash</groupId>
<artifactId>license-tool-plugin</artifactId>
<version>${license.tool.plugin.version}</version>
<executions>
<execution>
<id>license-check</id>
<goals>
<goal>license-check</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<!-- follows https://eclipse-cbi.github.io/cbi-website/best-practices/github-actions/central-portal/index.html#prerequisites -->
<id>publish</id>
<activation>
<property>
<name>publish</name>
</property>
</activation>
<build>
<plugins>
<!-- This enables javadoc packaging for sonatype central publishing - javadoc is required for releases with hard versions-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
<execution>
<id>javadoc-jar</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>${maven.gpg.plugin.version}</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.sonatype.central</groupId>
<artifactId>central-publishing-maven-plugin</artifactId>
<version>${central.publishing.maven.plugin.version}</version>
<extensions>true</extensions>
<configuration>
<publishingServerId>central</publishingServerId>
<autoPublish>true</autoPublish>
<waitUntil>published</waitUntil>
<skipPublishing>${skipPublishing}</skipPublishing>
</configuration>
</plugin>
</plugins>
</build>
<modules>
<module>hawkbit-test-report</module>
</modules>
</profile>
<profile>
<id>generateTestReport</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
<version>${maven.surefire.plugin.version}</version>
<executions>
<execution>
<id>generate-surefire-report</id>
<phase>verify</phase>
<goals>
<goal>report</goal>
</goals>
<inherited>false</inherited>
<configuration>
<outputDirectory>${project.build.directory}/surefire-reports</outputDirectory>
<aggregate>true</aggregate>
<linkXRef>true</linkXRef>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
<modules>
<module>hawkbit-test-report</module>
</modules>
</profile>
</profiles>
<modules>
<module>hawkbit-ql-jpa</module>
<module>hawkbit-core</module>
<module>hawkbit-artifact</module>
<module>hawkbit-rest</module>
<module>hawkbit-repository</module>
<module>hawkbit-autoconfigure</module>
<module>hawkbit-mgmt</module>
<module>hawkbit-ddi</module>
<module>hawkbit-dmf</module>
<module>hawkbit-mcp</module>
<module>hawkbit-monolith</module>
<module>hawkbit-ui</module>
<module>hawkbit-sdk</module>
</modules>
</project>