2013-10-29 30 views
41

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

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 

后来我发现我能避免Maven的通过将根据插件安装到pom.xml的编译错误:

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

回答

65

我在日食类似的麻烦和只有解决它,我的办法是

  • 删除网络模块
  • 应用
  • 更改模块版本
  • 添加模块
  • 配置(在该对话框的底部还配置中提供的链接)
  • 应用

只要确保你把它当成由之前配置的Web模块默认它会在/ WebContent /中查找你的web文件,这不是Maven项目结构应该是的。

编辑

这里是情况没有别的第二种方式帮助

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

您的意思是删除Project Facets中的Dynamic Web Module? 我不能这样做。 Eclipse说它不能被删除。 –

+3

@ user233552那么,你必须这么做......退出eclipse,转到文件系统中的项目,然后转到.settings forlder。打开org.eclipse.wst.common.project.facet.core.xml并删除Web模块条目。进行文件备份,因为它很可能会破坏事情。您也可以在那里修改版本,我不确定它是否能够正常工作... – dimoniy

+0

感谢@dimoniy非常感谢您 – kasinavijay

56

如果你想使用3.1版本,你需要使用以下模式:

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

注意,3.0和3.1是不同的:在3.1没有太阳提及,所以只需将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> 
+2

这是一个清洁maven项目(没有那些.settings和其他eclipse垃圾)的实际解决方案,eclipse的人仍然可以正确打开。也适用于javax:javaee-api依赖项。 –

+0

在我的web.xml文件中更改Web应用程序模式引用(并告诉Eclipse更新Maven项目)的技巧。 – Chris

+2

这个答案应该被标记为正确的解决方案。干净和直的maven的基础! –

9

我有同样的问题,并通过编辑org.eclipse固定这一点。 wst.common.project.facet.core.xml。

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

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

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

这似乎解决这个问题对我来说。

+0

嗨,谢谢,它为我工作... – Madhuri

+0

你救了我的一天!非常感谢你!! – Celtik

0

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

3

我在Win7,Tomcat7上运行maven项目并在Eclipse Mars上使用maven-pom安装。 在未运行的服务器我只有从3.1改为3.0介绍: enter image description here

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

1

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

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

要解决它,您必须从项目构面配置中设置默认配置。至少要使用/ src/main/resources和/ src/test/java来创建/ src/main/java文件夹,然后进入Java Build Path符合标准)重新转换为您所需的配置(3.0,3.1),然后进行应用。

2

打开Eclipse项目性质,项目Facet取消选择 “动态Web模块”,...点击OK 的Maven - >更新项目

0

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>