当我在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
是我的项目结构有问题还是我遗漏了什么?将感谢任何帮助
1条答案
按热度按时间nbysray51#
1.尝试使用另一个JDK版本,如AWS Corette 11示例https://aws.amazon.com/corretto/ 2.检查您是否正确导入项目3尝试mvn clean,mvn install