我正在使用 maven 在 Eclipse 中创建动态 webapp。我添加了一些文件夹,例如src/test/java
和src/test/resources
。我还更改了 Java Build Path 中的库以获取 JavaSE-1.7。到这里一切都好。
当我尝试更改 Projects Facet 动态 Web 模块时出现问题。我在同一个地方将 Java 更改为 1.7。它仍然告诉我,不能将项目方面动态 Web 模块的版本更改为 3.0。
我已经改变了一切会影响我认为的改变的东西。
另一种方法是编辑项目方面配置文件本身:org.eclipse.wst.common.project.facet.core.xml
将此行中的动态 Web 模块版本更改为 3.0 -<installed facet="jst.web" version="2.5"/>
接着:
您将.settings
在 Eclipse 项目的目录中找到该文件。
我更新了我的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 有 2.5 版,而项目有(右键单击 Project-> Properties-> Project Facets->)Dynamic Web Module 2.3。
虽然我试图将版本从 2.3 更改为 2.5,但 ECLIPSE 不允许这样做。解决方案:我删除了标题动态 Web 模块下的复选标记,我保存了更新项目。自动重新唤醒是输入正确版本的框。我使用 Eclipse 开普勒。
ps:看看下面乔纳森的评论,很有用。
打开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"/>
只是这对我有用。
我遇到了同样的问题,我什至尝试删除该项目并再次添加它。诀窍是删除.settings
目录。
删除
.settings
.classpatch
.projejct
target
并再次导入 Maven 项目。
什么对我有用:
在您的 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。如果没有 - 单击编辑并选择它应该是什么。
而不是改变它:
a)取消选中动态 Web 模块
b)申请
c)再次检查。应设置新版本 3.0。**
申请并再次检查后:
希望这可以帮助。
右键单击项目→属性;在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 ->更新项目。
请打开导航器视图并执行以下步骤
从项目结构 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> Servlet 3.0 Web Application 打开 web.xml
并更新 web.xml 文件,例如更改 version = "2.5"
还要从您的项目 .settings 文件中更改 org.eclipse.wst.common.project.facet.core.xml 文件按照步骤 1. Window > Show View > Other > General > Navigator
您的项目目录下有一个 .settings 文件夹
将此行中的动态 Web 模块版本更改为 2.5 4.将此行中的 Java 版本更改为 1.5 或更高版本
现在刷新您的项目并设置为在您的服务器上运行。
请关注解决方案的博客 http://scrapillars.blogspot.in/2014/02/how-to-change-project-facet-in-eclipse.html
解决方案是用图像插图制作的
对我来说解决这个问题的最佳和简单的步骤是 1)属性->项目方面-> 取消选择/取消选中动态 Web 模块的复选框-> 应用 2) 现在更改为所需的版本应用 3) 选中动态 Web 模块复选框..--现在你完成了--
他们是解决此问题的另一种方法(检查一下,希望它可以帮助您解决问题)
问题
无法将项目方面动态 Web 模块 2.3 的版本更改为 3.0
解决方案
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 配置文件。现在一切都很好。
我遇到了同样的问题,仅编辑 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->Update project,然后您可以在 properties->project facets->Dynamic Web module version 中更改 servlet 版本,或者如前所述,通过手动编辑 org.eclipse.wst.common.project.facet.core。 xml 在项目的 .settings 文件夹中。
在我的例子中,web.xml 被一个 dtd 引用。在我将其更改为 xsd 参考后,就像悉尼发布的那样,它起作用了。
我有同样的问题,删除 .settings 文件夹解决了这个问题
当我尝试将一般 Java Project 转换为Maven Project时出现此错误。
我所做的是确定我的项目所需的 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 -> 更新项目
对于 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哪个版本好记。
我在这里尝试了很多答案,但没有一个对我有用。然后我在这里找到了一篇关于我的问题的文章。我也想在这里分享。
以下是简要采取的步骤。
我对不允许我在 Eclipse (Mars) 中更改项目方面 Dynamic Web Module 的版本的问题的解决方案是:
如果悉尼的回答仍然没有帮助,请在下面尝试。按照悉尼的回答后,转到 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>
Doing maven update or reimporting the project did not help. @Sydney's answer is right; in addition I have to recreate the project in different workspace as said in JavaServer Faces 2.2 requires Dynamic Web Module 2.5 or newer
打开 org.eclipse.wst.common.project.facet.core.xml 文件并将 jst.web 版本更改为 3.0。还将 web.xml 更新到 3.0 版。保存并更新项目。希望这可以帮助。我正在使用 Eclipse Juno
我通过使用正确的版本、xsd 位置修改 web.xml并使用正确的版本修改 org.eclipse.wst.common.project.facet.core.xml并执行maven update解决了这个问题。
只是想分享一下我自己的经验,发现我的Dynamic Web Module被锁定了,通过以下步骤解决:
第一的
第二
我的Web Module 3.0
在web.xml
,但在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...
我有同样的症状,但用了不同的治疗方法。我试图将我的 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 中,我经常收到一个可怕的警告,“当一个或多个已安装的分面的实现不可用时修改分面项目可能会导致项目损坏。您确定要继续吗?” 这促使我进行更频繁的提交,但没有发生损坏。
更新以下 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 实现。
希望这可以帮助某人。谷歌搜索只产生了 Ali Bassam 的这篇文章,而 BalusC 也间接提供了帮助。
这是 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。
完毕。
更新 Maven对我有用
选择项目然后按ALT+F5然后选择项目点击确定
这个问题版本右键单击项目->属性->项目方面->右键单击动态Web模块->解锁它->取消选中->选择2.5版本->应用->更新maven
我遇到了同样的问题 - 我刚刚从我的工作区中删除了该项目,然后清理了“eclipse 文件/文件夹,例如:.project、.settings 等)然后再次导入了 maven 项目,它工作正常。