diff --git a/hawkbit-repository/hawkbit-repository-jpa-api/pom.xml b/hawkbit-repository/hawkbit-repository-jpa-api/pom.xml
index 78c884cd9c..0c0bf37ecc 100644
--- a/hawkbit-repository/hawkbit-repository-jpa-api/pom.xml
+++ b/hawkbit-repository/hawkbit-repository-jpa-api/pom.xml
@@ -33,6 +33,11 @@
${project.version}
+
+ jakarta.persistence
+ jakarta.persistence-api
+
+
org.springframework.boot
spring-boot-starter-data-jpa
@@ -43,12 +48,5 @@
-
-
-
- org.hibernate.orm
- hibernate-jpamodelgen
- true
-
diff --git a/hawkbit-repository/hawkbit-repository-jpa-api/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractBaseEntity.java b/hawkbit-repository/hawkbit-repository-jpa-api/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractBaseEntity.java
deleted file mode 100644
index 820c24f042..0000000000
--- a/hawkbit-repository/hawkbit-repository-jpa-api/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractBaseEntity.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/**
- * 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
- */
-package org.eclipse.hawkbit.repository.jpa.model;
-
-import java.io.Serializable;
-
-import jakarta.persistence.EntityListeners;
-import jakarta.persistence.MappedSuperclass;
-import jakarta.persistence.PostPersist;
-import jakarta.persistence.PostRemove;
-import jakarta.persistence.PostUpdate;
-
-import org.eclipse.hawkbit.repository.jpa.model.helper.AfterTransactionCommitExecutorHolder;
-import org.eclipse.hawkbit.repository.model.BaseEntity;
-import org.eclipse.hawkbit.tenancy.TenantAwareAuthenticationDetails;
-import org.springframework.data.jpa.domain.support.AuditingEntityListener;
-import org.springframework.security.core.context.SecurityContextHolder;
-
-/**
- * Core information of all entities.
- */
-@MappedSuperclass
-@EntityListeners({ AuditingEntityListener.class, EntityInterceptorListener.class })
-public abstract class AbstractBaseEntity implements BaseEntity, Serializable {
-
- /**
- * Defined equals/hashcode strategy for the repository in general is that an entity is equal if it has the same {@link #getId()} and
- * {@link #getOptLockRevision()} and class.
- */
- @Override
- // Exception squid:S864 - generated code
- @SuppressWarnings({ "squid:S864" })
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + (getId() == null ? 0 : getId().hashCode());
- result = prime * result + getOptLockRevision();
- result = prime * result + getClass().getName().hashCode();
- return result;
- }
-
- /**
- * Defined equals/hashcode strategy for the repository in general is that an entity is equal if it has the same {@link #getId()} and
- * {@link #getOptLockRevision()} and class.
- */
- @Override
- public boolean equals(final Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (!getClass().isInstance(obj)) {
- return false;
- }
- final BaseEntity other = (BaseEntity) obj;
- final Long id = getId();
- final Long otherId = other.getId();
- if (id == null) {
- if (otherId != null) {
- return false;
- }
- } else if (!id.equals(otherId)) {
- return false;
- }
- return getOptLockRevision() == other.getOptLockRevision();
- }
-
- @Override
- public String toString() {
- return getClass().getSimpleName() + " [id=" + getId() + "]";
- }
-
- @PostPersist
- public void postInsert() {
- if (this instanceof EventAwareEntity eventAwareEntity) {
- doNotify(eventAwareEntity::fireCreateEvent);
- }
- }
-
- @PostUpdate
- public void postUpdate() {
- if (this instanceof EventAwareEntity eventAwareEntity) {
- doNotify(eventAwareEntity::fireUpdateEvent);
- }
- }
-
- @PostRemove
- public void postDelete() {
- if (this instanceof EventAwareEntity eventAwareEntity) {
- doNotify(eventAwareEntity::fireDeleteEvent);
- }
- }
-
- protected static void doNotify(final Runnable runnable) {
- // fire events onl AFTER transaction commit
- AfterTransactionCommitExecutorHolder.getInstance().getAfterCommit().afterCommit(runnable);
- }
-
- protected boolean isController() {
- return SecurityContextHolder.getContext().getAuthentication() != null
- && SecurityContextHolder.getContext().getAuthentication()
- .getDetails() instanceof TenantAwareAuthenticationDetails tenantAwareDetails
- && tenantAwareDetails.isController();
- }
-}
\ No newline at end of file
diff --git a/hawkbit-repository/hawkbit-repository-jpa-eclipselink/README.md b/hawkbit-repository/hawkbit-repository-jpa-eclipselink/README.md
index dd3c4c1798..9906258052 100644
--- a/hawkbit-repository/hawkbit-repository-jpa-eclipselink/README.md
+++ b/hawkbit-repository/hawkbit-repository-jpa-eclipselink/README.md
@@ -1,3 +1,5 @@
# hawkBit JPA EclipseLink Vendor integration
-Implementation of [EclipseLink](http://www.eclipse.org/eclipselink/) JPA vendor.
\ No newline at end of file
+Implementation of [EclipseLink](http://www.eclipse.org/eclipselink/) JPA vendor.
+
+Since there seem to be bug in eclipselink static weaver or eclipselink-maven-plugin - don't weave properly the abstract classes when no non-abstract entity into the maven module - we use to have fake entity in the module to make it work.
\ No newline at end of file
diff --git a/hawkbit-repository/hawkbit-repository-jpa-eclipselink/pom.xml b/hawkbit-repository/hawkbit-repository-jpa-eclipselink/pom.xml
index ba228354ad..d9a4cec713 100644
--- a/hawkbit-repository/hawkbit-repository-jpa-eclipselink/pom.xml
+++ b/hawkbit-repository/hawkbit-repository-jpa-eclipselink/pom.xml
@@ -52,4 +52,33 @@
${eclipselink.version}
+
+
+
+
+
+ com.ethlo.persistence.tools
+ eclipselink-maven-plugin
+ ${eclipselink.maven.plugin.version}
+
+
+ process-classes
+
+ weave
+
+
+
+
+ org.eclipse.hawkbit.repository.jpa.model
+
+
+
+ org.eclipse.persistence
+ org.eclipse.persistence.jpa
+ ${eclipselink.version}
+
+
+
+
+
diff --git a/hawkbit-repository/hawkbit-repository-jpa-eclipselink/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaBaseEntity.java b/hawkbit-repository/hawkbit-repository-jpa-eclipselink/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaBaseEntity.java
index 0771489b04..f4f55db5da 100644
--- a/hawkbit-repository/hawkbit-repository-jpa-eclipselink/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaBaseEntity.java
+++ b/hawkbit-repository/hawkbit-repository-jpa-eclipselink/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaBaseEntity.java
@@ -14,29 +14,39 @@
import jakarta.persistence.Access;
import jakarta.persistence.AccessType;
import jakarta.persistence.Column;
+import jakarta.persistence.EntityListeners;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.MappedSuperclass;
+import jakarta.persistence.PostPersist;
+import jakarta.persistence.PostRemove;
+import jakarta.persistence.PostUpdate;
import jakarta.persistence.Version;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
+import org.eclipse.hawkbit.repository.jpa.model.helper.AfterTransactionCommitExecutorHolder;
+import org.eclipse.hawkbit.repository.model.BaseEntity;
+import org.eclipse.hawkbit.tenancy.TenantAwareAuthenticationDetails;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
+import org.springframework.data.jpa.domain.support.AuditingEntityListener;
+import org.springframework.security.core.context.SecurityContextHolder;
/**
* Base hawkBit entity class containing the common attributes for EclipseLink.
*/
@NoArgsConstructor(access = AccessLevel.PROTECTED) // Default constructor needed for JPA entities.
@MappedSuperclass
+@EntityListeners({ AuditingEntityListener.class, EntityInterceptorListener.class })
// exception squid:S2160 - BaseEntity equals/hashcode is handling correctly for sub entities
@SuppressWarnings("squid:S2160")
-public abstract class AbstractJpaBaseEntity extends AbstractBaseEntity {
+public abstract class AbstractJpaBaseEntity implements BaseEntity {
protected static final int USERNAME_FIELD_LENGTH = 64;
@@ -116,4 +126,86 @@ public void setLastModifiedAt(final long lastModifiedAt) {
public long getLastModifiedAt() {
return lastModifiedAt == 0 ? createdAt : lastModifiedAt;
}
+
+ /**
+ * Defined equals/hashcode strategy for the repository in general is that an entity is equal if it has the same {@link #getId()} and
+ * {@link #getOptLockRevision()} and class.
+ */
+ @Override
+ // Exception squid:S864 - generated code
+ @SuppressWarnings({ "squid:S864" })
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + (getId() == null ? 0 : getId().hashCode());
+ result = prime * result + getOptLockRevision();
+ result = prime * result + getClass().getName().hashCode();
+ return result;
+ }
+
+ /**
+ * Defined equals/hashcode strategy for the repository in general is that an entity is equal if it has the same {@link #getId()} and
+ * {@link #getOptLockRevision()} and class.
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (!getClass().isInstance(obj)) {
+ return false;
+ }
+ final BaseEntity other = (BaseEntity) obj;
+ final Long id = getId();
+ final Long otherId = other.getId();
+ if (id == null) {
+ if (otherId != null) {
+ return false;
+ }
+ } else if (!id.equals(otherId)) {
+ return false;
+ }
+ return getOptLockRevision() == other.getOptLockRevision();
+ }
+
+ @Override
+ public String toString() {
+ return getClass().getSimpleName() + " [id=" + getId() + "]";
+ }
+
+ @PostPersist
+ public void postInsert() {
+ if (this instanceof EventAwareEntity eventAwareEntity) {
+ doNotify(eventAwareEntity::fireCreateEvent);
+ }
+ }
+
+ @PostUpdate
+ public void postUpdate() {
+ if (this instanceof EventAwareEntity eventAwareEntity) {
+ doNotify(eventAwareEntity::fireUpdateEvent);
+ }
+ }
+
+ @PostRemove
+ public void postDelete() {
+ if (this instanceof EventAwareEntity eventAwareEntity) {
+ doNotify(eventAwareEntity::fireDeleteEvent);
+ }
+ }
+
+ protected static void doNotify(final Runnable runnable) {
+ // fire events onl AFTER transaction commit
+ AfterTransactionCommitExecutorHolder.getInstance().getAfterCommit().afterCommit(runnable);
+ }
+
+ protected boolean isController() {
+ return SecurityContextHolder.getContext().getAuthentication() != null
+ && SecurityContextHolder.getContext().getAuthentication()
+ .getDetails() instanceof TenantAwareAuthenticationDetails tenantAwareDetails
+ && tenantAwareDetails.isController();
+ }
}
\ No newline at end of file
diff --git a/hawkbit-repository/hawkbit-repository-jpa-eclipselink/src/main/java/org/eclipse/hawkbit/repository/jpa/model/EntityPropertyChangeListener.java b/hawkbit-repository/hawkbit-repository-jpa-eclipselink/src/main/java/org/eclipse/hawkbit/repository/jpa/model/EntityPropertyChangeListener.java
index 28d7ea03b0..8dc8117615 100644
--- a/hawkbit-repository/hawkbit-repository-jpa-eclipselink/src/main/java/org/eclipse/hawkbit/repository/jpa/model/EntityPropertyChangeListener.java
+++ b/hawkbit-repository/hawkbit-repository-jpa-eclipselink/src/main/java/org/eclipse/hawkbit/repository/jpa/model/EntityPropertyChangeListener.java
@@ -31,7 +31,7 @@ public void postUpdate(final DescriptorEvent event) {
final Object object = event.getObject();
if (((UpdateObjectQuery) event.getQuery()).getObjectChangeSet().getChangedAttributeNames().stream()
.anyMatch(field -> !TARGET_UPDATE_EVENT_IGNORE_FIELDS.contains(field))) {
- AbstractBaseEntity.doNotify(((EventAwareEntity) object)::fireUpdateEvent);
+ AbstractJpaBaseEntity.doNotify(((EventAwareEntity) object)::fireUpdateEvent);
}
}
}
\ No newline at end of file
diff --git a/hawkbit-repository/hawkbit-repository-jpa-eclipselink/src/main/java/org/eclipse/hawkbit/repository/jpa/model/FakeJpaEntityForStaticCompilation.java b/hawkbit-repository/hawkbit-repository-jpa-eclipselink/src/main/java/org/eclipse/hawkbit/repository/jpa/model/FakeJpaEntityForStaticCompilation.java
new file mode 100644
index 0000000000..80248e971a
--- /dev/null
+++ b/hawkbit-repository/hawkbit-repository-jpa-eclipselink/src/main/java/org/eclipse/hawkbit/repository/jpa/model/FakeJpaEntityForStaticCompilation.java
@@ -0,0 +1,30 @@
+/**
+ * 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
+ */
+package org.eclipse.hawkbit.repository.jpa.model;
+
+import java.io.Serial;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.Table;
+
+import lombok.NoArgsConstructor;
+
+/**
+ * Fake JPA entity to allow proper static compilation. It seems that if there is no actual (class) entity using AbstractJpaBaseEntity,
+ * the static compilation is not proper.
+ */
+@NoArgsConstructor(access = lombok.AccessLevel.PACKAGE)
+@Table(name = "fake_for_static_compilation")
+@Entity
+public class FakeJpaEntityForStaticCompilation extends AbstractJpaTenantAwareBaseEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/hawkbit-repository/hawkbit-repository-jpa-hibernate/pom.xml b/hawkbit-repository/hawkbit-repository-jpa-hibernate/pom.xml
index 36c1d0f9e4..5aa6942b1d 100644
--- a/hawkbit-repository/hawkbit-repository-jpa-hibernate/pom.xml
+++ b/hawkbit-repository/hawkbit-repository-jpa-hibernate/pom.xml
@@ -31,6 +31,7 @@
hawkbit-repository-jpa-api
${project.version}
+
org.hibernate.orm
hibernate-core
diff --git a/hawkbit-repository/hawkbit-repository-jpa-hibernate/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaBaseEntity.java b/hawkbit-repository/hawkbit-repository-jpa-hibernate/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaBaseEntity.java
index 7d0d673457..434c217383 100644
--- a/hawkbit-repository/hawkbit-repository-jpa-hibernate/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaBaseEntity.java
+++ b/hawkbit-repository/hawkbit-repository-jpa-hibernate/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaBaseEntity.java
@@ -14,29 +14,39 @@
import jakarta.persistence.Access;
import jakarta.persistence.AccessType;
import jakarta.persistence.Column;
+import jakarta.persistence.EntityListeners;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.MappedSuperclass;
+import jakarta.persistence.PostPersist;
+import jakarta.persistence.PostRemove;
+import jakarta.persistence.PostUpdate;
import jakarta.persistence.Version;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
+import org.eclipse.hawkbit.repository.jpa.model.helper.AfterTransactionCommitExecutorHolder;
+import org.eclipse.hawkbit.repository.model.BaseEntity;
+import org.eclipse.hawkbit.tenancy.TenantAwareAuthenticationDetails;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
+import org.springframework.data.jpa.domain.support.AuditingEntityListener;
+import org.springframework.security.core.context.SecurityContextHolder;
/**
* Base hawkBit entity class containing the common attributes for Hibernate.
*/
@NoArgsConstructor(access = AccessLevel.PROTECTED) // Default constructor needed for JPA entities.
@MappedSuperclass
+@EntityListeners({ AuditingEntityListener.class, EntityInterceptorListener.class })
// exception squid:S2160 - BaseEntity equals/hashcode is handling correctly for sub entities
@SuppressWarnings("squid:S2160")
-public abstract class AbstractJpaBaseEntity extends AbstractBaseEntity {
+public abstract class AbstractJpaBaseEntity implements BaseEntity {
protected static final int USERNAME_FIELD_LENGTH = 64;
@@ -116,4 +126,86 @@ public void setLastModifiedAt(final long lastModifiedAt) {
public long getLastModifiedAt() {
return lastModifiedAt == 0 ? createdAt : lastModifiedAt;
}
+
+ /**
+ * Defined equals/hashcode strategy for the repository in general is that an entity is equal if it has the same {@link #getId()} and
+ * {@link #getOptLockRevision()} and class.
+ */
+ @Override
+ // Exception squid:S864 - generated code
+ @SuppressWarnings({ "squid:S864" })
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + (getId() == null ? 0 : getId().hashCode());
+ result = prime * result + getOptLockRevision();
+ result = prime * result + getClass().getName().hashCode();
+ return result;
+ }
+
+ /**
+ * Defined equals/hashcode strategy for the repository in general is that an entity is equal if it has the same {@link #getId()} and
+ * {@link #getOptLockRevision()} and class.
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (!getClass().isInstance(obj)) {
+ return false;
+ }
+ final BaseEntity other = (BaseEntity) obj;
+ final Long id = getId();
+ final Long otherId = other.getId();
+ if (id == null) {
+ if (otherId != null) {
+ return false;
+ }
+ } else if (!id.equals(otherId)) {
+ return false;
+ }
+ return getOptLockRevision() == other.getOptLockRevision();
+ }
+
+ @Override
+ public String toString() {
+ return getClass().getSimpleName() + " [id=" + getId() + "]";
+ }
+
+ @PostPersist
+ public void postInsert() {
+ if (this instanceof EventAwareEntity eventAwareEntity) {
+ doNotify(eventAwareEntity::fireCreateEvent);
+ }
+ }
+
+ @PostUpdate
+ public void postUpdate() {
+ if (this instanceof EventAwareEntity eventAwareEntity) {
+ doNotify(eventAwareEntity::fireUpdateEvent);
+ }
+ }
+
+ @PostRemove
+ public void postDelete() {
+ if (this instanceof EventAwareEntity eventAwareEntity) {
+ doNotify(eventAwareEntity::fireDeleteEvent);
+ }
+ }
+
+ protected static void doNotify(final Runnable runnable) {
+ // fire events onl AFTER transaction commit
+ AfterTransactionCommitExecutorHolder.getInstance().getAfterCommit().afterCommit(runnable);
+ }
+
+ protected boolean isController() {
+ return SecurityContextHolder.getContext().getAuthentication() != null
+ && SecurityContextHolder.getContext().getAuthentication()
+ .getDetails() instanceof TenantAwareAuthenticationDetails tenantAwareDetails
+ && tenantAwareDetails.isController();
+ }
}
\ No newline at end of file
diff --git a/hawkbit-repository/hawkbit-repository-jpa-hibernate/src/main/java/org/eclipse/hawkbit/repository/jpa/model/EntityPropertyChangeListener.java b/hawkbit-repository/hawkbit-repository-jpa-hibernate/src/main/java/org/eclipse/hawkbit/repository/jpa/model/EntityPropertyChangeListener.java
index b7e4b7a46d..94bf857226 100644
--- a/hawkbit-repository/hawkbit-repository-jpa-hibernate/src/main/java/org/eclipse/hawkbit/repository/jpa/model/EntityPropertyChangeListener.java
+++ b/hawkbit-repository/hawkbit-repository-jpa-hibernate/src/main/java/org/eclipse/hawkbit/repository/jpa/model/EntityPropertyChangeListener.java
@@ -57,7 +57,7 @@ public void onPostUpdate(final PostUpdateEvent event) {
}
if (hasNonIgnoredChanges || !lastTargetQueryChanged) {
- AbstractBaseEntity.doNotify(((EventAwareEntity) event.getEntity())::fireUpdateEvent);
+ AbstractJpaBaseEntity.doNotify(((EventAwareEntity) event.getEntity())::fireUpdateEvent);
}
}
diff --git a/hawkbit-repository/hawkbit-repository-jpa/pom.xml b/hawkbit-repository/hawkbit-repository-jpa/pom.xml
index cfb435be22..046934c84b 100644
--- a/hawkbit-repository/hawkbit-repository-jpa/pom.xml
+++ b/hawkbit-repository/hawkbit-repository-jpa/pom.xml
@@ -44,6 +44,35 @@
${project.version}
+
+
+
+
+
+ com.ethlo.persistence.tools
+ eclipselink-maven-plugin
+ ${eclipselink.maven.plugin.version}
+
+
+ process-classes
+
+ weave
+
+
+
+
+ org.eclipse.hawkbit.repository.jpa.model
+
+
+
+ org.eclipse.persistence
+ org.eclipse.persistence.jpa
+ ${eclipselink.version}
+
+
+
+
+
hibernate
diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaActionManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaActionManagement.java
index dc23125ce8..c697841ab7 100644
--- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaActionManagement.java
+++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaActionManagement.java
@@ -22,7 +22,6 @@
import org.eclipse.hawkbit.repository.RepositoryProperties;
import org.eclipse.hawkbit.repository.exception.EntityNotFoundException;
import org.eclipse.hawkbit.repository.jpa.builder.JpaActionStatusCreate;
-import org.eclipse.hawkbit.repository.jpa.model.AbstractBaseEntity;
import org.eclipse.hawkbit.repository.jpa.model.AbstractJpaBaseEntity_;
import org.eclipse.hawkbit.repository.jpa.model.JpaAction;
import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus;
diff --git a/hawkbit-simple-ui/.gitignore b/hawkbit-simple-ui/.gitignore
index b8b790e37f..59e48e1c2a 100644
--- a/hawkbit-simple-ui/.gitignore
+++ b/hawkbit-simple-ui/.gitignore
@@ -1,3 +1,9 @@
-frontend
bundles
-package-lock.json
\ No newline at end of file
+frontend
+node_modules
+package.json
+package-lock.json
+tsconfig.json
+types.d.ts
+vite.config.ts
+vite.generated.ts
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 4294f4e02b..3b6fcbff56 100644
--- a/pom.xml
+++ b/pom.xml
@@ -51,8 +51,7 @@
4.0.5
-
- 3.0.1
+ 3.0.2