我正在使用Maven在Eclipse中创建动态Web应用程序。我添加了一些文件夹,例如src/test/java
和src/test/resources
。我还更改了Java Build Path中的库以获得JavaSE-1.7。到这里都可以。
当我尝试更改Projects Facet动态Web模块时,出现了问题。我在同一位置将Java更改为1.7。而且它仍然告诉我,无法将Project Facet动态Web模块的版本更改为3.0。
我已经改变了所有会影响我认为的改变的事物。
我正在使用Maven在Eclipse中创建动态Web应用程序。我添加了一些文件夹,例如src/test/java
和src/test/resources
。我还更改了Java Build Path中的库以获得JavaSE-1.7。到这里都可以。
当我尝试更改Projects Facet动态Web模块时,出现了问题。我在同一位置将Java更改为1.7。而且它仍然告诉我,无法将Project Facet动态Web模块的版本更改为3.0。
我已经改变了所有会影响我认为的改变的事物。
Answers:
我更新了我的 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->更新项目...
另一种方法是编辑项目构型配置文件本身: org.eclipse.wst.common.project.facet.core.xml
将此行中的动态Web模块版本更改为3.0- <installed facet="jst.web" version="2.5"/>
然后:
您将.settings
在Eclipse项目的目录中找到此文件。
我想我和你有同样的问题。我的web.xml的版本为2.5,而该项目的动态Web模块2.3为(右键单击Project-> Properties-> Project Facets->)。
尽管我尝试将版本从2.3更改为2.5,但ECLIPSE不允许这样做。解决方案:我删除了“动态Web模块”标题下的复选标记,保存并拥有“更新项目”。自动重新唤醒将输入具有正确版本的框。我使用Eclipse Kepler。
开启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
目录。
对我有用的是:
在您的POM中-您必须在以下部分中将编译器插件设置为版本1.8(或1.7)<build>
:
<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- > 更新项目。
您请打开“导航器”视图,然后执行以下步骤
从项目结构中打开web.xml http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd“ version =” 3.0“> Servlet 3.0 Web应用程序
并更新web.xml文件,例如change version =“ 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
该解决方案带有图像插图
之所以使用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模块版本中更改servlet版本,或者如先前所写,通过手动编辑org.eclipse.wst.common.project.facet.core来更改。项目的.settings文件夹中的xml。
如果悉尼的回答仍然不能解决问题,请尝试以下操作。遵循悉尼的答案后,转到“属性”>“项目构面”,取消选择“动态Web模块”,然后更改版本以匹配您的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>
对于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哪个版本是一个很好的说明。
当我尝试将常规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版本相同的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更新或重新导入项目无济于事。@悉尼的答案是正确的;此外,我还必须按照JavaServer Faces 2.2中所述要求Dynamic Web Module 2.5或更高版本,在不同的工作空间中重新创建项目。
我的是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中,直到我按照先前的答案直接编辑org.eclipse.wst.common.project.facet.core.xml文件之前,JSF 2.3才可用-最高为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,但出现错误。
在此过程中,我经常在帖子标题中看到错误:“无法将Project Facet Dynamic Web Module的版本更改为3.0”,并且Eclipse拒绝编译项目或在Project Facets中提供JSF 2.3。当我按照指示编辑org.eclipse.wst.common.project.facet.core.xml文件时,错误消失了,Eclipse在Project Facets中提供了JSF 2.3,并且该项目在Tomcat 9.0.8上编译并运行良好。但是,Project Facets仍然警告“找不到项目facet jst.jsf 2.3版的实现。功能将受到限制。” 我怀疑这仅仅是意味着自动完成功能和其他Eclipse便利性将不可用,因为它找不到我的POM中声明的JSF 2.3实现。