无法将项目方面动态 Web 模块的版本更改为 3.0?
Posted
技术标签:
【中文标题】无法将项目方面动态 Web 模块的版本更改为 3.0?【英文标题】:Cannot change version of project facet Dynamic Web Module to 3.0? 【发布时间】:2013-08-09 22:45:21 【问题描述】:我正在使用 maven 在 Eclipse 中创建一个动态 webapp。我添加了一些文件夹,例如 src/test/java
和 src/test/resources
。我还更改了 Java Build Path 中的库以获取 JavaSE-1.7。到这里为止一切正常。
当我尝试更改 Projects Facet 动态 Web 模块时出现问题。我在同一个地方将 Java 更改为 1.7。它仍然告诉我,不能将项目方面动态 Web 模块的版本更改为 3.0。
我已经改变了一切会影响我认为的改变的东西。
【问题讨论】:
好的。我对此感到抱歉。当我创建新的 Maven 项目时,原型是 maven-archetype-webapp,而在我创建项目后,Project Facets 中的动态 Web 模块是 2.3。我想将动态 Web 模块的版本更改为 3.0,我得到“无法将项目方面动态 Web 模块的版本更改为 3.0” 这对我有用:***.com/questions/19661135/dynamic-web-module-3-0-3-1 在 Eclipse Kepler 中,当我右键单击“动态 Web 模块”方面时,它会显示“解锁”选项。解锁后,我可以更改构面版本。仅供参考。 这是 Eclipse 的错误吗? Cannot change version of project facet Dynamic Web Module to 2.5的可能重复 【参考方案1】:另一种方法是编辑项目构面配置文件本身:org.eclipse.wst.common.project.facet.core.xml
将此行中的动态web模块版本改为3.0 - <installed facet="jst.web" version="2.5"/>
然后:
-
右键单击项目(在 Project Explorer 面板中)。
选择 Maven » 更新项目(或按 Alt+F5)
您将在 Eclipse 项目的 .settings
目录中找到此文件。
【讨论】:
谢谢。其实我认为我们应该像上面那样做点别的,改变web.xml中web模块的版本,如果没有,'Deployment Descriptor'版本不会更改为3.0。这是 maven 插件中的错误吗? 当您的项目中没有 web.xml 时,这似乎是解决此问题的唯一方法。 我已经在 web.xml 中有 3.0 并且 STS 仍然无法更新并且 mvn update 也没有帮助。但是,这种方法有效。 这有帮助,实际上去 -> org.eclipse.wst.common.project.facet.core.xml -> 删除所有条目 -> maven 更新项目。 您可以在应用程序/项目的 .settings 文件夹中找到 org.eclipse.wst.common.project.facet.core.xml 文件。【参考方案2】:我更新了我的web.xml
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>Servlet 3.0 Web Application</display-name>
</web-app>
然后只是 Maven -> 更新项目 ...
【讨论】:
web.xml 的更新对我不起作用。 @enkor 给出的解决方案有效:***.com/a/18632054/378633 这是 3.1 web.xml 文件的有效标头我想我和你有同样的问题。我的 web.xml 有 2.5 版,而项目有(右键单击 Project-> Properties-> Project Facets->)Dynamic Web Module 2.3。
虽然我尝试将版本从 2.3 更改为 2.5,但 ECLIPSE 不允许这样做。 解决方案:我删除了标题动态 Web 模块下的复选标记,我保存了更新项目。自动重新唤醒是输入正确版本的框。我使用 Eclipse 开普勒。
p.s.:看看下面的comments of Jonathan,很有用。
【讨论】:
太棒了!它解决了我的问题,但你能告诉我为什么它最初不允许设置动态模块。 @Suresh,我认为不允许更改版本的问题是因为它被锁定了。如果您右键单击“动态 Web 模块”方面,它将显示“解锁”选项。解锁后,取消检查 DWM 方面,重新应用方面,并进行项目 maven 更新,错误就消失了。 +1。没有这个极其重要的一点,其他人在这里的答案都是徒劳的。只有我认为乔纳森的评论不应该包含在答案中。 +1 @Jonathan 你的小费成功了。您必须将此作为答案发布,我们也应该将其提交给 Eclipse! 在我的情况下,为什么在 web 模块 pom 中为 Dnamic web 模块设置了另一个版本,所以这与项目配置冲突【参考方案4】:-
单击您的项目文件夹。
转到窗口 > 显示视图 > 导航器
转到导航器并展开 .settings 文件夹
打开org.eclipse.wst.common.project.facet.core.xml
文件
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
<fixed facet="wst.jsdt.web"/>
<installed facet="jst.web" version="2.3"/>
<installed facet="wst.jsdt.web" version="1.0"/>
<installed facet="java" version="1.8"/>
</faceted-project>
这样改版本<installed facet="jst.web" version="3.1"/>
这对我有用。
【讨论】:
【参考方案5】:我遇到了同样的问题,我什至尝试删除该项目并重新添加它。诀窍是删除.settings
目录。
【讨论】:
我也必须这样做。我正在使用基于 Java 的配置的 Spring Web 项目,因此无法更新 web.xml。 为什么在删除 .setting 后会起作用,请您解释一下 那个 .settings 目录包含很多东西,也许其中一些随着时间的推移而改变。我不知道究竟是什么部分影响了这种行为,但这就像一个重置。其他答案都不适合我,但这个答案。在这种情况下,似乎不止我一个人。 为我工作,我遇到了这个错误:“无法将项目方面 EAR 的版本更改为 1.3。” 为我工作!我遇到了错误:“无法将项目方面动态 Web 模块的版本更改为 3.0”【参考方案6】:删除
.settings
.classpatch
.projejct
target
然后再次导入 maven 项目。
【讨论】:
如何再次导入 Maven 项目。我是新手。【参考方案7】:什么对我有用:
-
将 Java 更改为 1.8(或 1.7)
在您的 POM 中 - 您必须在 <build>
部分将编译器插件设置为版本 1.8(或 1.7):
<build>
...
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
确保更改 Java Build 显示 1.8。如果没有 - 单击编辑并选择它应该是什么。
-
修改 web.xml,以便在版本和链接中引用 3.0
-
确保您在 Project Facets 中将 Java 设置为 1.8
-
现阶段我仍然无法更改动态 Web 模块;
而不是改变它:
a) 取消选中动态网络模块
b) 申请
c) 再检查一遍。应该设置新版本3.0。**
申请并再次检查后:
希望这会有所帮助。
【讨论】:
【参考方案8】:右击项目 → 属性;在Project Facets中,取消选择Dynamic Web Module(版本应为3.1)并取消选择JavaServer Faces(版本为2.2)。
改变这个:
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
到这里:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:javaee="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
然后去掉param-name
等前面的前缀。
最后,Maven -> 更新项目。
【讨论】:
【参考方案9】:请打开导航器视图并执行以下步骤
-
(Window > Show View > Other > General) 发现你的项目下有一个.settings文件夹,展开后打开文件“org.eclipse.wst.common.project.facet.core.xml” ,进行以下更改并保存文件。
将此行中的动态web模块版本改为2.5 -
将此行中的 Java 版本更改为 1.5 或更高版本 - 。
【讨论】:
您忘记在“显示视图”对话框的“常规”文件夹下选择哪个视图。是“导航器”视图吗?【参考方案10】:从项目结构打开 web.xml http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 版本="3.0"> Servlet 3.0 网络应用程序
并更新 web.xml 文件 例如更改版本=“2.5”
同时更改项目 .settings 文件中的 org.eclipse.wst.common.project.facet.core.xml 文件 按照步骤 1. 窗口 > 显示视图 > 其他 > 常规 > 导航器
你的项目目录下有一个.settings文件夹
将此行中的动态 Web 模块版本更改为 2.5 4.将此行中的Java版本更改为1.5或更高版本
现在刷新您的项目并设置为在您的服务器上运行。
请关注博客以获取解决方案 http://scrapillars.blogspot.in/2014/02/how-to-change-project-facet-in-eclipse.html
解决方案是用图片插图制作的
【讨论】:
虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。 我在 pom.xml 文件中进行了更改,如 crunchify.com/… 所示。然而这还不够。我还必须按照建议打开 .settings 文件夹并编辑文件或 .eclipse.wst.common.project.facet.core.xml 文件。【参考方案11】:为我解决这个问题的最佳和简单的步骤是 1) Properties -> Project Facets -> 取消选中/取消勾选Dynamic Web Module -> Apply 2)现在更改为所需的版本应用 3)勾选Dynamic web Module复选框。 --现在你已经完成了--
【讨论】:
工作得很好,但这样做的后果是什么?【参考方案12】:他们是解决此问题的另一种方法(检查一下,希望它能帮助您解决问题)
问题
无法将项目构面动态 Web 模块 2.3 的版本更改为 3.0
解决方案
-
转到您的项目位置(例如-D:/maven/todo)
进入.setting文件夹
检查此文件:org.eclipse.wst.common.project.facet.core.xml
打开文件并将“jst.web”属性从 2.3 更改为 3.0,然后保存
右键项目刷新项目并更新maven
完成!!!....
【讨论】:
【参考方案13】:web.xml 技巧有效,因为您现在明确告诉 WTP 您正在使用该特定 servlet 版本,而不管容器支持什么。
在我的例子中,我在一个 Maven 项目中使用注解配置并且我没有 web.xml 文件。事实证明,在没有 web.xml 的情况下,WTP 会查看您的 Maven 依赖项以确定要使用的 Servlet 版本。就我而言,我定义了以下内容:
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
将其更改为 6.0 解决了问题,它现在使用 Servlet 3.0 而不是 3.1,这是 JavaEE 7 的默认设置。由于我必须从 Tomcat 8 转到 Tomcat 7,因此 Tomcat 7 仅支持 JavaEE 6 Web 配置文件。现在一切都很顺利。
【讨论】:
【参考方案14】:我遇到了同样的问题,仅编辑 web.xml 以及更改 .settings 文件夹中的文件并没有帮助。我的解决方案是通过编辑 pom.xml 直接指向 maven 编译器插件以使用所需的 java 版本:
<build>
...
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
现在运行 Maven->更新项目,然后您可以在属性->项目方面->动态 Web 模块版本中更改 servlet 版本,或者如前所述,通过手动编辑 org.eclipse.wst.common.project.facet .core.xml 在项目的 .settings 文件夹中。
【讨论】:
【参考方案15】:在我的例子中,web.xml 被 dtd 引用。在我将其更改为 xsd 参考后,就像悉尼发布的那样。
【讨论】:
【参考方案16】:我有同样的问题,删除 .settings 文件夹解决了问题
【讨论】:
【参考方案17】:对于不允许我在 Eclipse (Mars) 中更改项目 facet Dynamic Web Module 版本的问题,我的解决方案是:
禁用 Maven Nature 确保 web.xml 命名空间指向正确的版本 重新启用 Maven Nature Maven » 更新项目(或按 Alt+F5)【讨论】:
【参考方案18】:如果悉尼的回答仍然没有帮助,请在下面尝试。 按照悉尼的回答后,转到 Properties > Projects Facets 取消选择 Dynamic Web Module 然后更改版本以匹配您的 web.config 然后再次选择。应用 > 保存 然后是 Maven 更新。
web.xml
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:web="http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="Web_App_1" version="3.1">
<display-name>JavaServerFaces</display-name>
<!-- Change to "Production" when you are ready to deploy -->
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<!-- Welcome page -->
<welcome-file-list>
<welcome-file>jsfs/hello.xhtml</welcome-file>
</welcome-file-list>
<!-- JSF mapping -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Map these files with JSF -->
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>jsfs/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
【讨论】:
【参考方案19】:我在这里尝试了很多答案,但没有一个对我有用。 然后我找到了一篇关于我的问题的文章here。我也想在这里分享。
以下是简要介绍的步骤。
-
设置编译器合规级别。
更新项目方面
从首选项更新已安装的 JRE
在 pom.xml 中添加配置以使用 java 1.7,最后
从 Maven 更新项目。
【讨论】:
【参考方案20】:对于一个 maven eclipse web 项目,更改动态 web 模块版本需要检查三个地方。如果有人使用 eclipse,并且在您检查了以下内容之后: 1) web.xml
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
2) 行家:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope> ## ensure you have tomcat 7 not other version
</dependency>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.7</source> ## at least 6
<target>1.7</target>
</configuration>
</plugin>
3) eclipse构建路径和编译器版本为1.7
你在 maven 上仍然有一个错误标记:
cannot change version of project facet dynamic web module to 3.0 one or more constrants have not been satisfied
然后你可以: 取消选中动态 Web 模块,然后重新选中它。 我认为这是因为 eclipse 文件的 .settings 以某种方式损坏。关于第二个提示tomcat which version 是一个很好的说明。
【讨论】:
【参考方案21】:当我尝试将一般 Java 项目转换为 Maven 项目时出现此错误。
我所做的是确定我的项目所需的 Java 编译器版本。对于我的项目,最低 Java 版本是1.8
。
通过将版本降低到低于1.8
的任何值,我的 IDE 将开始抱怨它无法识别一堆导入的库,因此我将我的最低 Java 版本确定为1.8
1. Right click your project
2. Go to Properties
3. Left hand-side panel, click "Project Facets"
4. For Java, set the version according to your minimum version
现在确保 Java 编译器版本使用与您在 Project Facets 中设置的相同的 Java 版本。
1. Right click your project
2. Go to Porperties
3. Left hand-side panel, click "Java Compiler"
4. Make sure Java Compiler version is the same.
5. If it is not the same, change the version. (Uncheck "Use compliance from execution environment' if needed to make the changes.
更改后,错误应该得到解决。如果错误仍然存在,请右键单击项目 -> Maven -> 更新项目
【讨论】:
【参考方案22】:进行 maven 更新或重新导入项目没有帮助。 @Sydney 的回答是对的;此外,我必须在 JavaServer Faces 2.2 requires Dynamic Web Module 2.5 or newer 中所说的在不同的工作区重新创建项目@
【讨论】:
【参考方案23】:打开 org.eclipse.wst.common.project.facet.core.xml 文件并将 jst.web 版本更改为 3.0。还将 web.xml 更新到 3.0 版。保存并更新项目。希望这可以帮助。我正在使用 Eclipse Juno
【讨论】:
【参考方案24】:这是 pagurix 答案的变体,但使用的是 Eclipse Mars。
将您的 web.xml 文件更改为 web.bak
忽略错误,接下来我们将重新生成它。
进入项目属性 -> 项目方面并将动态 Web 模块版本设置为您需要的版本。 Eclipse 现在允许您保存。
现在右键单击该项目。选择 Java EE 工具 -> 生成部署描述符存根。
这将创建一个具有所需版本的新 web.xml。
打开新的 web.xml 并将 XML 标头和完整的 web-app 开始标记复制到原始 web.bak,删除新的 web.xml 并将 web.bak 重命名回 web.xml。
完成。
【讨论】:
【参考方案25】:我在web.xml
中是Web Module 3.0
,但在properties>Dynamic Web Module
中是3.1
我将web.xml
更改为:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
更改后,执行:right click on project>Maven>Update Project...
【讨论】:
【参考方案26】:这个问题与版本右键单击项目->属性->项目方面->右键单击动态Web模块->解锁它->取消选中->选择2.5版本->应用->更新maven
【讨论】:
【参考方案27】:我通过使用正确的版本、xsd 位置修改 web.xml 并修改 org.eclipse.wst.common.project.facet.core.xml 解决了这个问题正确的版本并进行 maven 更新。
【讨论】:
【参考方案28】:更新 maven 对我有用
选择项目然后按ALT+F5然后选择项目点击确定
【讨论】:
【参考方案29】:我有同样的症状,但用了不同的治疗方法。我试图将我的 JSF 2.2.4/Spring 3.0 webapp 升级到 JSF 2.3,以便在那里享受新的 JSF websocket 钩子,而 Eclipse(实际上是 STS)不会合作。在 Eclipse 的 Project Facets 中,JSF 2.3 一直不可用,直到我按照之前的答案直接编辑了 org.eclipse.wst.common.project.facet.core.xml 文件——它的最高版本是 2.2。
这是我跳过的圈子。我不知道所有这些都是必要的,因为我根本不了解所有这些配置。
在 Eclipse 中,我经常收到一个可怕的警告,“当一个或多个已安装的构面的实现不可用时修改构面项目可能会导致项目损坏。您确定要继续吗?”这促使我进行更频繁的提交,但没有发生损坏。
-
在 POM、Eclipse 编译器和 Eclipse Project Facets 中将 JDK 从 1.7 升级到 1.8。
更新以下 Maven 依赖项:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
...到:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
<scope>provided</scope>
</dependency>
...和...
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.2.4</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.2.4</version>
</dependency>
...到:
<dependency>
<groupId>javax.faces</groupId>
<artifactId>javax.faces-api</artifactId>
<version>2.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.faces</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>2.0</version>
</dependency>
我必须从以下位置更新我的 web.xml 命名空间声明:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
...到:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
我不得不将 Project Facets -> Dynamic Web Module 从 2.5 更新到 3.0。我尝试了 3.1,但出现错误。
在此过程中,我经常收到这篇文章标题中的错误“无法将项目构面动态 Web 模块的版本更改为 3.0”,并且 Eclipse 拒绝编译项目或在项目构面中提供 JSF 2.3。当我按照指示编辑 org.eclipse.wst.common.project.facet.core.xml 文件时,错误消失了,Eclipse 在 Project Facets 中提供了 JSF 2.3,并且项目在 Tomcat 9.0.8 上编译并运行良好。但是,Project Facets 仍然警告“无法找到 project facet jst.jsf 的 2.3 版本的实现。功能将受到限制。”我怀疑这只是意味着自动完成和其他 Eclipse 便利将不可用,因为它找不到在我的 POM 中声明的 JSF 2.3 实现。
希望这对某人有所帮助。 Google 搜索只产生了 Ali Bassam 的 this post 和间接帮助的 BalusC。
【讨论】:
【参考方案30】:只是想分享一下自己的经验,发现我的Dynamic Web Module被锁定了,通过以下步骤解决:
第一
右键单击项目 > 属性 > 项目构面 > 右键单击动态 Web 模块 > 解锁 > 应用并关闭第二
右键项目>Maven>更新项目>确定【讨论】:
以上是关于无法将项目方面动态 Web 模块的版本更改为 3.0?的主要内容,如果未能解决你的问题,请参考以下文章
Eclipse 动态 Web 模块 3.0 的 Apache tomcat 问题
将 webapp 从 Eclipse 部署到 Tomcat 根上下文
如何将现有的 eclipse GWT 项目转换为动态 Web 项目?