如何在Eclipse中将“项目Facet”从Tomcat 6更改为Tomcat 5.5?

56

我在Eclipse中有一个现有的动态Web应用程序项目。创建该项目时,在“配置”下拉菜单中指定了“Apache Tomcat v6的默认配置”。

经过一个月或两个月,我现在想将配置更改为Tomcat“v5.5”。 (这将是生产服务器上Tomcat的版本。)

我尝试了以下步骤(但没有成功):

  • 我在项目“属性”下选择了“目标运行时”
    选择“Tomcat v5.5”选项被禁用,并显示以下消息:
    如果要选择的运行时未显示或已禁用,则可能需要卸载一个或多个当前安装的项目面貌。
  • 然后我单击了“卸载面貌…”链接。
    在“运行时”选项卡下,只显示了“Tomcat 6”。
    对于“Dynamic Web Module”,我选择了版本2.4而不是2.5。
    在“运行时”选项卡下,现在显示了“Tomcat 5.5”。
    但是,界面现在显示以下消息:
    无法将项目面貌Dynamic Web Module的版本更改为2.4。
    “完成”按钮被禁用 - 因此我陷入了死局。

我可以成功地创建一个具有Tomcat v5.5配置的新项目。不过,由于某种原因,它不允许我“降级”现有项目。

作为解决方法,我创建了一个新项目,并从旧项目中复制了源文件。尽管如此,这种解决方法相当痛苦且有些笨拙。

有人能解释一下我如何将项目配置从“Tomcat 6”“降级”到“Tomcat 5”吗?或者解释一下为什么会发生这种情况?

谢谢
Pete

7个回答

87

这种方法可能会破坏Eclipse,你这样做可能会惹上麻烦,但是这应该能够解决问题:

打开导航视图,并查找项目下的.settings文件夹并展开它,然后打开文件:org.eclipse.wst.common.project.facet.core.xml。您应该看到一行代码,其中包含以下内容: <installed facet="jst.web" version="2.5"/> 将其更改为2.4并保存。

请确保您的项目没有使用2.5特定的任何东西,这样就可以了。

还要检查您的web.xml是否具有正确的配置:

<web-app version="2.4" 
        xmlns="http://java.sun.com/xml/ns/j2ee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

1
谢谢。实际上在我发问题之前,我已经尝试了你的hack,但只有部分成功。当我试图在Eclipse中(在Tomcat 5.5下)运行项目时,出现了一堆异常。所以我启动了Eclipse来复制异常堆栈...然后它奇迹般地工作了!你知道为什么需要这个hack吗? - user13360
我遇到你的答案之前非常恐慌。 - abiieez
可以了,谢谢!但是有人知道为什么会出现这种情况吗? - kboom

7

这可能有点过时,但我尝试并在Eclipse Galilio中找到以下内容。

打开导航器视图并查找您的项目下的.settings文件夹,展开它,然后打开文件:org.eclipse.wst.common.project.facet.core。删除此文件的内容,右键单击项目并单击属性。在弹出窗口中转到“项目Facats”,您可以单击运行时选项卡并将项目转换为您想要的新Facet。


1
我在Eclipse Juno中遇到了同样的问题,我也做了同样的事情,结果也起作用了。谢谢! - CatsAndCode
不需要创建动态Web项目来完成此操作,Eclipse Juno允许我们添加一个facet。然后,右键单击Dynamic Web Module并将版本更改为2.5。 第一次确定可能会给您一个NullPointerException,请保持冷静并重试。 - Minh Triet

5
如果您正在使用Maven,则需要关闭eclipse,然后输入>mvn eclipse:eclipse -Dwtpversion=2.0,最后重新启动eclipse。

0

我看到了同样的问题,然后我在web.xml中更改了Web应用程序版本值。这样做可能会为您解决此问题。


0

您可以尝试取消勾选该方面,应用更改,更改方面的值并进行检查。在Eclipse Helios SR1中,这对我有效。

因此,主要区别在于我使用“动态Web模块”执行此操作。

希望这对您也有用。


0

抱歉,似乎我没有足够的声望来发表评论...

我认为对于Eclipse来说,安全地降级到较低标准太困难了,因为它无法确定您是否使用了新的Web标准中的某些内容。因此,如果它允许您这样做,可能会导致您的程序在旧版本上失败。

您始终可以向后兼容,但不能向前兼容。


有点奇怪(更不用说烦人了)。无论如何,非常感谢您的回答。 - user13360
1
你也不能反过来做 2.4 -> 2.5 :'( - scottyab

-1
如果您正在使用Maven,您可以使用Maven Eclipse插件生成Eclipse设置。
对于jst.web版本,Maven Eclipse插件考虑了项目的依赖关系。如果您定义了servlet api依赖项:
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>servlet-api</artifactId>
    <version>6.0.32</version>
</dependency> 

你的 jst.web 参数将会是 6.0

<faceted-project>
  ...
  <installed facet="jst.web" version="6.0"/>
  ...
</faceted-project>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接