题 动态Web模块3.0 - 3.1


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

enter image description here

另外我无法删除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>

45
2017-10-29 14:31


起源




答案:


我在日食中遇到了类似的麻烦,唯一可以解决这个问题的方法就是

  • 删除Web模块
  • 应用
  • 更改模块版本
  • 添加模块
  • 配置(对话框底部的其他配置可用链接)
  • 应用

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

编辑

这是第二种方式,以防其他任何事情都没有帮助

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

67
2017-10-29 15:53



您的意思是删除Project Facets中的Dynamic Web Module吗?我不被允许这样做。 Eclipse说它无法删除。 - du-it
@ user233552那么,你必须以艰难的方式去做...退出eclipse,转到文件系统中的项目,然后转到.settings forlder。打开org.eclipse.wst.common.project.facet.core.xml并删除Web模块条目。进行文件备份,因为它可能会破坏事物。你也可以修改那里的版本,我不确定它是否会起作用... - dimoniy
谢谢@dimoniy非常感谢你 - kasinavijay
+1为第二个解决方案。我修改了模块条目。 - aboger
第一个解决方案有效,但为什么需要这么奇怪的approch? - Jakob Alexander Eichler


如果要使用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>

58
2017-07-25 18:08



这是一个实际的解决方案,有一个干净的maven项目(没有那些.settings和其他日食垃圾),eclipse的人仍然能够正确打开。也适用于javax:javaee-api依赖。 - Lorenzo Boccaccia
更改我的web.xml文件中的web-app模式引用(并告诉Eclipse更新Maven项目)就可以了。 - Chris
这个答案应该被标记为正确的解决方案。干净而直的maven基础! - Tom Fink
这不回答原始问题,如何恢复到3.0,而是建议升级到3.1的方法。 - Javier Villa
请注意,当前的maven-war-plugin版本是2.6,而maven-compiler-plugin的版本是3.3(并且您不需要 groupId)。另外,你应该添加 <!DOCTYPE xml>。然后,你应该使用两个URI xsi:schemaLocation:改变一下 " xmlns:web=" 部分到一个空间。 - Marcel Korpel


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

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

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

回到

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

这似乎解决了我的问题。


9
2017-12-09 17:26



嗨,谢谢,它对我有用...... - Madhuri
你救了我的一天!非常感谢你!! - Celtik


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

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


3
2017-08-30 17:57





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


2
2018-01-03 14:22





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

这就是为什么如果应用更改,您将面临空指针异常。

要解决此问题,您必须从项目构面配置中设置默认配置。应用更改,然后进入Java Build Path你必须删除/ src文件夹并至少创建/ src / main / java文件夹(它还需要/ src / main / resources和/ src / test / java)兼容)重新更改为您想要的所需配置(3.0,3.1)然后再应用。


1
2017-10-07 10:01





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


0
2018-06-08 18:41





1)转到您的项目并找到“.settings”目录 这个
2)打开文件名为:
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.xml 文件下 WEB-INF 目录,请参考这篇文章:
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>  

0
2018-04-30 03:52