我正在尝试运行 Hibernate 应用程序。我可以从 NetBeans IDE 执行此操作,当我要使用 mvn install 命令行时,它会成功构建,但是当我尝试在目标文件夹 (java -jar hibernate-1.0-SNAPSHOT.jar) 中运行 jar 文件时,我得到以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/hibernate/cfg/Configuration
at hibernate.HibernateUtil.getSessionFactory(HibernateUtil.java:11)
at hibernate.SmartDevice.main(SmartDevice.java:13)
Caused by: java.lang.ClassNotFoundException: org.hibernate.cfg.Configuration
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 2 more
它没有找到Hibernate的Configuration类,但是我在我的pom.xml中添加了hibernate-core依赖:
<?xml version="1.0" encoding="UTF-8"?>
<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>
<groupId>hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.1.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.197</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.persistence/persistence-api -->
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
</plugin>
<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>hibernate.SmartDevice</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
<name>hibernate</name>
</project>
这是我的 hibernate.cfg.xml:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">org.h2.Driver</property>
<property name="connection.url">jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</property>
<property name="dialect">org.hibernate.dialect.H2Dialect</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">create</property>
<mapping class="hibernate.User"/>
</session-factory>
</hibernate-configuration>
我应该添加其他东西吗?或者为什么会出现这个错误?谢谢您的帮助!
ClassNotFoundException
意味着org.hibernate.cfg.Configuration
该类未包含在您的类路径中。在 IDE 中查找该类,我们看到它包含在hibernate-core-5.4.1-Final.jar
文件中。
通过运行java -jar hibernate-1.0-SNAPSHOT.jar
,附加的依赖项会丢失。
有一些方法可以使用所需的依赖项打包 jar,一种是使用maven-assembly-plugin
,或者使用 shade 插件。
作为“手动”替代方案,您可以 cd 到您的项目根文件夹(包含pom.xml
文件),然后执行
mvn clean package
mvn dependency:copy-dependencies
java -cp target/*;target/dependency/* hibernate.SmartDevice
该dependency
插件将所有需要的 jars 复制到target\dependency
文件夹中,最后一个命令将所有 jars 添加到类路径并运行您的 java 类。
编辑以上命令适用于Windows;在 Linux 上,您将使用“:”代替“;”
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句