【问题标题】:Why does "WEB-INF/lib" folder appear to be empty after a Maven project is built within Eclipse?为什么在 Eclipse 中构建 Maven 项目后,“WEB-INF/lib”文件夹似乎为空?
【发布时间】:2015-10-23 22:09:44
【问题描述】:

我使用 Eclipse 关注了this spring-mvc-tutorial,但是在我调用 Maven / Update Projects 之后,我的 WEB-INF/lib 目录仍然是空的。

这是我的项目浏览器的外观:

我的部署程序集设置也没有错误:

这是我使用的 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>CrunchifySpringMVCTutorial</groupId>
<artifactId>CrunchifySpringMVCTutorial</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.2.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>4.2.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.2.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.2.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>4.2.0.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>

    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>
</dependencies> 
<build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <warSourceDirectory>WebContent</warSourceDirectory>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
    </plugins>
</build>

我什至按照this link 中的建议切换到新工作区,但没有任何帮助

编辑: 当我启动服务器时,我收到错误: java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet

【问题讨论】:

  • 你的问题是?
  • 如何解决maven依赖没有复制到WEB-INF/lib的问题
  • 您是如何构建项目的?通过 eclipse build 命令或 maven package 命令?
  • 带有上下文菜单 Maven / 更新项目
  • 我只是按照上面提到的教程然后调用了 maven / update project

标签: java eclipse maven spring-mvc


【解决方案1】:

Eclipse 从显示 Maven 管理的动态 Web 项目项目中的 WEB-INF/lib 文件夹的视图中虚拟隐藏文件。正如您的第一个屏幕截图所示,“Maven 依赖项”库条目已通过 Eclipse 在后台成功添加到您的类路径中 - 它包含您的 pom.xml 中引用的每个依赖项。

这种行为背后的意图是/可能是:作为开发人员,您不应该手动将任何 .jar 文件复制到 WEB-INF/lib,因为这样您会在 ( Maven-) 托管项目。

在某种程度上,这是有道理的,因为 Maven 会为您执行任何依赖管理,从而解析和“捆绑”任何第三方(或您自己的)工件。

如果您运行带有目标clean package(甚至:clean install)的mvn,它将在项目的“目标”文件夹中为您生成一个.war 文件。如果您提取该 .war 文件,您应该会找到一个 WEB-INF/lib 文件夹,其中包含捆绑到您的可部署工件中的所有依赖项。

【讨论】:

  • 所以你知道为什么我在启动服务器时会出现这个异常吗? java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
  • 您可以尝试:从配置的 Tomcat8 服务器中完全删除您的 Web 应用程序,在(!)通过 Maven 的“干净安装”目标的完整构建之后重新部署 - 仍然很难说是什么在您的设置中丢失。至少,WEB-INF/lib 文件夹的“空”视图对我来说是可以解释的。
  • 您找到解决方案了吗?我有 java.lang.ClassNotFoundException 完全相同的问题:org.springframework.web.servlet.DispatcherServlet
【解决方案2】:

我认为是正确的。

库在构建后复制到目标中,而不是复制到项目本身中。

您粘贴的教程中的第 8 步也显示相同(空的 lib 文件夹)

【讨论】:

    猜你喜欢
    • 2012-04-11
    • 2017-03-24
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 2022-06-30
    • 1970-01-01
    • 2011-08-03
    • 2012-04-22
    相关资源
    最近更新 更多