java.lang.NoClassDefFoundError:jakarta/persistence/持久性

d7v8vwbk  于 2023-04-10  发布在  Java
关注(0)|答案(1)|浏览(216)

当我在Intelij IDEA中运行应用程序(Hibernate,JPA)时,一切正常,但Maven在服务器上启动时创建的jar文件给出了一个错误:java.lang.NoClassDefFoundError:jakarta/persistence/持久性
我不知道太多关于在服务器上运行的应用程序,请告诉我我错过了什么.依赖关系已被添加,配置似乎都在那里太..
下面是我的代码:
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>

型号:

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>

这是我的项目结构:
project structure
我得到的错误:
error
是我的项目结构有问题还是我遗漏了什么?将感谢任何帮助

nbysray5

nbysray51#

1.尝试使用另一个JDK版本,如AWS Corette 11示例https://aws.amazon.com/corretto/ 2.检查您是否正确导入项目3尝试mvn clean,mvn install

相关问题