You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

独立Java SE应用使用JPA遇类未找到异常,求助依赖配置

问题解决:Java SE环境下JPA运行时ClassNotFoundException

问题原因

编译正常但运行时报jakarta.persistence.Persistence找不到,核心原因是运行时类路径缺少JPA API及Hibernate相关依赖的JAR包。Maven编译阶段会自动把依赖加入编译类路径,但直接用java命令运行target/classes下的类时,并没有将依赖的JAR包包含进来。

解决方案

方案1:使用Maven Exec插件运行(推荐)

在pom.xml中添加Exec插件配置,它会自动处理依赖类路径:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>3.1.0</version>
            <configuration>
                <mainClass>org.example.Main</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>

执行命令直接运行程序:

mvn exec:java

方案2:手动管理类路径运行

  1. 先通过Maven把所有依赖JAR复制到target/lib目录:
mvn dependency:copy-dependencies -DoutputDirectory=target/lib
  1. 用java命令指定完整类路径运行:
# Linux/macOS
cd target
java -cp "classes:lib/*" org.example.Main

# Windows
cd target
java -cp "classes;lib/*" org.example.Main

方案3:显式添加JPA API依赖(可选)

虽然hibernate-core-jakarta已间接依赖Jakarta Persistence API,但显式添加可避免依赖传递问题:

<dependencies>
    <!-- 原有的Hibernate和PostgreSQL依赖保留 -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core-jakarta</artifactId>
        <version>5.6.14.Final</version>
    </dependency>
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>42.6.0</version>
    </dependency>
    <!-- 显式添加Jakarta Persistence API -->
    <dependency>
        <groupId>jakarta.persistence</groupId>
        <artifactId>jakarta.persistence-api</artifactId>
        <version>2.2.3</version>
    </dependency>
</dependencies>

添加后仍需按方案2的方式处理运行类路径,或用方案1的Exec插件。

关键说明

不需要添加GlassFish的JAR包,Hibernate本身就是JPA的实现提供者,只要确保JPA API和Hibernate的JAR在运行类路径中即可。

内容的提问来源于stack exchange,提问作者Damien Cooke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 12:07:05