【问题标题】:How to include hibernate jars into WEB-INF如何将休眠 jars 包含到 WEB-INF 中
【发布时间】:2015-10-03 11:06:37
【问题描述】:

我有一个使用 Hibernate 和 Maven 的 J2EE 项目。

休眠部分工作正常,我可以从几个类中做我需要的事情。 但是,当我尝试从 servlet 使用 Hibernate 工具时,我得到:

SEVERE: Servlet.service() for servlet [servlets.ImproServletTest] in context with path [/ImproDB] threw exception [Servlet execution threw an exception] with root cause
java.lang.ClassNotFoundException: org.hibernate.HibernateException

我想这指向 WEB-INF 中不可用的休眠类。 我假设我需要硬拷贝 WEB-INF 目录中的 jar 来进行排序。

但是,休眠类是通过 Maven 导入的。 我可以在 Eclipse 项目资源管理器中看到它们: “项目名称/Java 资源/库/Maven 依赖项”。 但是我的项目工作区中似乎没有这样的目录(我的意思是在我的硬盘上)。 这些罐子应该位于硬盘驱动器的什么位置? 将它们包含到 WEB-INF 中希望这能解决我的问题的最佳做法是什么?

提前致谢。

编辑: 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>
  <groupId>ImproDB</groupId>
  <artifactId>ImproDB</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencies>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>4.3.10.Final</version>
    </dependency>
  </dependencies>
</project>

【问题讨论】:

  • 我可以看看你的 pom.xml,我可以在这里做适当的处理
  • 默认的 Maven 依赖范围(即根本没有&lt;scope&gt;)应该这样做。

标签: eclipse hibernate maven jakarta-ee


【解决方案1】:

你必须添加 servlet 依赖..

<dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency>

试试这个

【讨论】:

  • 添加后出现同样的错误。
【解决方案2】:

像这样编辑你的 pom.xml 并在你的 pom.xml 所在的位置运行命令mvn clean package。这会将 web 应用程序构建到 war 包和 hibernate 也将包含在 WEB-INF/lib 文件夹中:

<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>ImproDB</groupId>
  <artifactId>ImproDB</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <build>
    <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-war-plugin</artifactId>
      <version>2.4</version>
      <configuration>
      </configuration>
    </plugin>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencies>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>4.3.10.Final</version>
    </dependency>
  </dependencies>
</project>

【讨论】:

  • 添加后出现同样的错误。
  • 向我显示您在服务器上部署的 war 包中的 WEB-INF\lib 中的 jar 列表。
  • WEB-INF\lib 中什么都没有。我的理解是,Maven 应该在您在 pom.xml 中建议的更改之后进行必要的导入?
  • 要在 JEE 容器中运行您的应用程序,在这种情况下可能是 Tomcat,您需要构建 war 包。为此,我发布了 pom.xml,您可以从中构建包含hibernate-core jar 的战争。所以我的另一个问题是,您现在如何在没有必需的强制库的情况下运行此应用程序?
  • 是的,我确实使用 Tomcat 作为服务器环境。因此,当我从本地测试类调用休眠类时,项目运行良好(因为 Maven 正确导入了 jar 以供本地使用)。只有当我从 servlet(服务器端)调用它们时它才会失败。
猜你喜欢
  • 2021-06-30
  • 2018-02-24
  • 1970-01-01
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
  • 2011-07-24
  • 2012-01-24
  • 1970-01-01
相关资源
最近更新 更多