【问题标题】:Dynamic Web Module 3.0 -- 3.1动态 Web 模块 3.0 -- 3.1
【发布时间】:2013-11-08 18:43:16
【问题描述】:

我有一个基于代码的 mavenized 配置 Spring 3.2.4 Web 应用程序。 当我首先使用 Maven/pom.xml 构建应用程序时,出现 web.xml 丢失的错误。 首先我尝试创建一个空的 web.xml。这是项目方面发生变化的时刻(我不知道为什么)。它从动态 Web 模块 3.0 切换到 3.1,这是不可逆转的。 我怎样才能再次将其更改为 Dynamic Web Modules 3.0 ???

此外,我无法删除 JAX-RS。尝试这样做会导致:

Failed while uninstalling JAX-RS (REST Web Services) 1.0.
org.eclipse.jst.javaee.web.internal.impl.WebAppImpl cannot be cast to org.eclipse.jst.j2ee.webapplication.WebApp

后来发现可以通过在pom.xml中插入相应的插件来避免Maven编译错误:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
</plugin>

【问题讨论】:

    标签: eclipse spring maven spring-mvc


    【解决方案1】:

    我在 eclipse 中遇到了类似的问题,唯一能解决的方法就是

    • 移除网络模块
    • 申请
    • 更改模块版本
    • 添加模块
    • 配置(对话框底部的更多配置链接)
    • 申请

    只需确保在应用之前配置 web 模块,因为默认情况下它将在 /WebContent/ 中查找您的 web 文件,这不是 Maven 项目结构应该是的。

    编辑

    这是第二种方法,以防万一

    • 退出 Eclipse,进入文件系统中的项目,然后进入 .settings 文件夹。
    • 打开org.eclipse.wst.common.project.facet.core.xml制作备份,并删除网络模块条目。
    • 您也可以在那里修改 Web 模块版本,但同样不能保证。

    【讨论】:

    • 您的意思是删除项目构面中的动态 Web 模块吗?我不允许这样做。 Eclipse 说不能删除。
    • @user233552 好吧,那么你必须努力做到这一点......退出eclipse,转到文件系统中的项目,然后转到.settings forlder。打开 org.eclipse.wst.common.project.facet.core.xml 并删除 Web 模块条目。进行文件备份,因为它可能会破坏事情。您也可以在那里修改版本,但我不确定它是否可以工作......
    • +1 表示第二种解决方案。我修改了模块条目。
    • 第一个解决方案有效,但为什么需要这么奇怪的方法??
    【解决方案2】:

    如果要使用 3.1 版,则需要使用以下架构:

    • http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd

    请注意,3.0 和 3.1 是不同的:在 3.1 中没有提到 Sun,因此只需将 3_0.xsd 更改为 3_1.xsd 将不起作用。

    它应该是这样的:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee" 
             xmlns:web="http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee">
    
    </web-app>
    

    另外,请确保您使用 pom.xml 中的最新版本。也就是说,

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.6</version>
        <configuration>
            ...
        </configuration>
    </plugin>
    

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    

    最后,您应该使用 Java 7 或 8 进行编译:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.3</version>
        <configuration>
            <source>1.7</source>
            <target>1.7</target>
        </configuration>
    </plugin>
    

    【讨论】:

    • 这是拥有一个干净的 maven 项目(没有那些 .settings 和其他 eclipse 垃圾)的实际解决方案,使用 eclipse 的人仍然能够正确打开。也适用于 javax:javaee-api 依赖项。
    • 在我的 web.xml 文件中更改 web-app 架构引用(并告诉 Eclipse 更新 Maven 项目)就成功了。
    • 这个答案应该被标记为正确的解决方案,因为它是。干净而直接的基于 Maven 的!
    • 这并没有回答最初的问题,如何恢复到 3.0,而是提出了一种升级到 3.1 的方法。
    • 注意当前的maven-war-plugin版本是2.6,maven-compiler-plugin是3.3(不用groupId)。另外,您应该添加&lt;!DOCTYPE xml&gt;。然后,您应该在 xsi:schemaLocation 中使用两个 URI:只需将 " xmlns:web=" 部分更改为一个空格即可。
    【解决方案3】:

    我遇到了同样的问题,并通过编辑 org.eclipse.wst.common.project.facet.core.xml 解决了这个问题。

    在这个文件中,我可以更改以下行

    <installed facet="jst.web" version="3.1"/>
    

    返回

    <installed facet="jst.web" version="3.0"/>
    

    这似乎解决了我的问题。

    【讨论】:

    • 你拯救了我的一天!非常感谢!!
    【解决方案4】:

    我在 Win7、Tomcat7 上运行,在 Eclipse Mars 上设置了 maven-pom,并启用了 maven 项目。 在未运行的服务器上,我只需在此屏幕上从 3.1 更改为 3.0:

    对我来说,禁用动态 Web 模块很重要!然后更改版本,然后再次启用动态 Web 模块。

    【讨论】:

      【解决方案5】:

      打开 Eclipse 项目属性,在 Project Facets 中取消选择“Dynamic Web Module”,...点击确定 Maven -> 更新项目

      【讨论】:

        【解决方案6】:

        在特定情况下,问题是由于为动态 webapp 发布的 maven-archetype-webapp,面向 ver.2.5(请参阅生成的 web.xml 和相关的 xsd),并且与 eclipse 相关。 当您尝试将项目方面更改为动态 webapp > 2.5 时,src 文件夹结构将在语法上发生变化(2.5 与 3.1 不同),但不会在本质上发生变化。

        这就是为什么如果你应用更改会遇到空指针异常。

        要解决这个问题,您必须从项目方面配置中设置默认配置。应用更改,然后进入 Java 构建路径,您必须删除 /src 文件夹并至少创建 /src/main/java 文件夹(还需要 /src/main/resources 和 /src/test/java合规)重新更改为您想要的所需配置(3.0、3.1),然后应用。

        【讨论】:

          【解决方案7】:

          我打开项目 org.eclipse.wst.common.project.facet.core.xml 并首先更改然后删除带有 web 模块标记的行。每次清理项目并在 Tomcat 上启动,但它仍然没有运行。返回线路(原样)并清理项目。在 Eclipse 中打开 Tomcat 设置并手动将项目添加到 Tomcat 启动中(右键单击 + 添加和删除)。单击项目并选择在服务器上运行....一切都很好。

          【讨论】:

            【解决方案8】:

            1) 进入你的项目,找到“.settings”目录this one
            2) 打开文件 xml 命名为:
            org.eclipse.wst.common.project.facet.core.xml
            3)

            <?xml version="1.0" encoding="UTF-8"?>
                <faceted-project>
                <fixed facet="wst.jsdt.web"/>
                <installed facet="java" version="1.5"/>
                <installed facet="jst.web" version="2.3"/>
                <installed facet="wst.jsdt.web" version="1.0"/>
             </faceted-project>
            

            将 jst.web 版本更改为 3.0,将 java 版本更改为 1.7 或 1.8(基于您当前使用的 jdk 版本)

            4) 更改WEB-INF目录下的web.xml文件,请参考这篇文章:
            https://www.mkyong.com/web-development/the-web-xml-deployment-descriptor-examples/
            5) 转到pom.xml 文件并粘贴以下行:

            <build>
                <finalName>YOUR_PROJECT_NAME</finalName>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <version>3.3</version>
                        <configuration>
                            <source>1.8</source> THIS IS YOUR USING JDK's VERSION
                            <target>1.8</target> SAME AS ABOVE
                        </configuration>
                    </plugin>
                </plugins>
            </build>  
            

            【讨论】:

              【解决方案9】:
              1. 转到工作区位置
              2. 选择您的项目文件夹
              3. .setting 文件夹
              4. 编辑“org.eclipse.wst.common.project.facet.core”
              5. 更改已安装的 facet="jst.web" version="3.0"

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2013-01-26
                • 2018-10-26
                • 2014-02-24
                • 2013-08-09
                • 2016-09-05
                • 2016-07-03
                • 1970-01-01
                相关资源
                最近更新 更多