1

When I run the application (Hibernate, JPA) in IntelliJ IDEA, everything works without errors, but the jar file created by Maven when launched on the server gives an error:

java.lang.NoClassDefFoundError: jakarta/persistence/Persistence

I don't know much about running the application on the server, please tell me what I'm missing. Dependencies have been added, the configuration seems to be all there too.

Here is my code:

pom.xml

<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>

    <distributionManagement>
        <repository>
            <uniqueVersion>false</uniqueVersion>
            <id>corp1</id>
            <name>DataModel</name>
            <url>file:///home/sgt-user/.m2</url>
            <layout>default</layout>
        </repository>
    </distributionManagement>

    <groupId>org.example</groupId>
    <artifactId>port-reader</artifactId>
    <version>1.0-SNAPSHOT</version>

    <build>
        <plugins>
            <plugin>
                <!-- Build an executable JAR -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.sgt.EchoMultiServer</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core-jakarta</artifactId>
            <version>5.6.15.Final</version>
        </dependency>
        <dependency>
            <groupId>org.mariadb.jdbc</groupId>
            <artifactId>mariadb-java-client</artifactId>
            <version>3.1.3</version>
        </dependency>
        <dependency>
            <groupId>jakarta.persistence</groupId>
            <artifactId>jakarta.persistence-api</artifactId>
            <version>3.1.0</version>
        </dependency>

    </dependencies>


    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

</project>

Model:

import jakarta.persistence.*;

import java.util.Objects;

@Entity
@Table(name = "meter")
public class DataModel {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="id", nullable=false, unique=true)
    private Long id;

    @Column(name="imei")
    private String imei;

    @Column(name="readCycle")
    private int readCycle;

    @Column(name="dataCount")
    private int dataCount;

    @Column(name="volume")
    private double volume;

    @Column(name="interval1")
    private int interval1;

    @Column(name="interval2")
    private int interval2;

    @Column(name="interval3")
    private int interval3;

    @Column(name="batP")
    private int batP;

    @Column(name="batV")
    private int batV;

    @Column(name="chsum")
    private int chsum;

    public DataModel(){}

    public DataModel(String imei, int readCycle, int dataCount, double volume, int interval1, int interval2, int interval3, int batP, int batV, int chsum) {
        this.imei = imei;
        this.readCycle = readCycle;
        this.dataCount = dataCount;
        this.volume = volume;
        this.interval1 = interval1;
        this.interval2 = interval2;
        this.interval3 = interval3;
        this.batP = batP;
        this.batV = batV;
        this.chsum = chsum;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof DataModel dataModel)) return false;
        return readCycle == dataModel.readCycle && dataCount == dataModel.dataCount && Double.compare(dataModel.volume, volume) == 0 && interval1 == dataModel.interval1 && interval2 == dataModel.interval2 && interval3 == dataModel.interval3 && batP == dataModel.batP && batV == dataModel.batV && chsum == dataModel.chsum && Objects.equals(id, dataModel.id) && Objects.equals(imei, dataModel.imei);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, imei, readCycle, dataCount, volume, interval1, interval2, interval3, batP, batV, chsum);
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getImei() {
        return imei;
    }

    public void setImei(String imei) {
        this.imei = imei;
    }

    public int getReadCycle() {
        return readCycle;
    }

    public void setReadCycle(int readCycle) {
        this.readCycle = readCycle;
    }

    public int getDataCount() {
        return dataCount;
    }

    public void setDataCount(int dataCount) {
        this.dataCount = dataCount;
    }

    public double getVolume() {
        return volume;
    }

    public void setVolume(double volume) {
        this.volume = volume;
    }

    public int getInterval1() {
        return interval1;
    }

    public void setInterval1(int interval1) {
        this.interval1 = interval1;
    }

    public int getInterval2() {
        return interval2;
    }

    public void setInterval2(int interval2) {
        this.interval2 = interval2;
    }

    public int getInterval3() {
        return interval3;
    }

    public void setInterval3(int interval3) {
        this.interval3 = interval3;
    }

    public int getBatP() {
        return batP;
    }

    public void setBatP(int batP) {
        this.batP = batP;
    }

    public int getBatV() {
        return batV;
    }

    public void setBatV(int batV) {
        this.batV = batV;
    }

    public int getChsum() {
        return chsum;
    }

    public void setChsum(int chsum) {
        this.chsum = chsum;
    }
}

JpaService:

import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;


public class JpaService {

    private static JpaService instance;

    private EntityManagerFactory entityManagerFactory;

    private JpaService(){
        entityManagerFactory = Persistence.createEntityManagerFactory("port-reader");

    }

    public static synchronized JpaService getInstance() {
        return instance == null ? instance = new JpaService() : instance;
    }

    public void shutdown(){
        if(entityManagerFactory != null){
            entityManagerFactory.close();
        }

    }

    public EntityManagerFactory getEntityManagerFactory(){
        return entityManagerFactory;
    }
}

persistence.xml:

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
             version="2.0">
    <persistence-unit name="port-reader" transaction-type="RESOURCE_LOCAL">
<!--        <provider>org.hibernate.ejb.HibernatePersistence</provider>-->
        <properties>
            <property name="jakarta.persistence.jdbc.url" value="jdbc:mariadb://localhost:3306/sgt"/>
            <property name="jakarta.persistence.jdbc.user" value="sgt-user"/>
            <property name="jakarta.persistence.jdbc.password" value="sgtpass"/>
            <property name="jakarta.persistence.schema-generation.database.action" value="none"/>
        </properties>
    </persistence-unit>
</persistence> 

This is my project structure:

project structure

and the error I get:

error

Is there's something wrong with my project structure or what am I missing?

13
  • How do you deploy on the server?
    – Erwin
    Commented Apr 7, 2023 at 4:04
  • @Erwin, im just running it with java -jar nameofjar.jar
    – Elena
    Commented Apr 10, 2023 at 0:02
  • can you check if the jakarta.persistence jar actually exist in the server?
    – Erwin
    Commented Apr 10, 2023 at 2:15
  • @Erwin i have to have it on server? i thought it has to be provided with my java application in builded jar.. sorry if im wrong. can you tell me where do i have to put it?
    – Elena
    Commented Apr 10, 2023 at 4:29
  • 1
    @DamienCooke not only re-ordering, i deleted all dependencies and add again, and make sure i put jakarta.persistence in the first order and it worked
    – Elena
    Commented May 11, 2023 at 1:42

1 Answer 1

-3

1.Try With Another JDK Version like AWS Corette 11 example https://aws.amazon.com/corretto/ 2.Check did you Correct Import Project 3Try to mvn clean ,mvn install

2
  • Thanks for advice, but i can only use JDK 16 or higher. And i also try mvn clean, mvn install - still same error
    – Elena
    Commented Apr 10, 2023 at 1:11
  • 1
    This is in no way a solution for the question. Commented Apr 11, 2023 at 9:27

Not the answer you're looking for? Browse other questions tagged or ask your own question.