プロジェクト・ファセットのバージョンを 動的 Web モジュール からx.xに変更できません。


# 事象 : Cannot change version of project facet Dynamic Web Module to 2.5.

- 環境
    - CentOS Linux release 7.8.2003 (Core)
    - Payara Server  5.194
    - Eclipse IDE for Enterprise Java Developers.Version: 2020-03 (4.15.0)
    - openjdk version "11.0.7" 2020-04-14 LTS

Mavenを更新したらエラーが出た:cold_sweat:

```bash:Eclipseの「Problems」タブのメッセージ
Cannot change version of project facet Dynamic Web Module to 2.5.
```

`org.eclipse.wst.common.project.facet.core.xml`で`facet="wst.jsdt.web"`はPreferenceの[Project Facet]の[Dynamic Web Module]で設定したとおり`4.0`になっている・・・

```xml:org.eclipse.wst.common.project.facet.core.xml
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
  <runtime name="Payara Server 5 (5.194)"/>
  <fixed facet="wst.jsdt.web"/>
  <installed facet="wst.jsdt.web" version="1.0"/>
  <installed facet="java" version="11"/>
  <installed facet="jst.jsf" version="2.3"/>
  <installed facet="jst.web" version="4.0"/>
  <installed facet="jst.jaxrs" version="2.1"/>
</faceted-project>
```

## 原因 : web.xmlで定義しているServletのバージョンが2.5だから
参考 : [java - Cannot change version of project facet Dynamic Web Module to 3.0? - Stack Overflow](https://stackoverflow.com/questions/18122336/cannot-change-version-of-project-facet-dynamic-web-module-to-3-0)

```xml: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"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">
<!-- 省略 -->
```

### 対応 : ServletのバージョンをDynamic Web Moduleのバージョンに変更する
参考 : [web.xmlのバージョン別DTD・XSDの宣言方法 | KATSUMI KOKUZAWA&#39;S BLOG](https://kokuzawa.github.io/blog/2015/04/07/web-dot-xmlfalsebaziyonbie-dtdxsdfalsexuan-yan-fang-fa/)

1. web.xmlに定義されているServletのバージョンをDynamic Web Moduleのバージョンに変更する
1. [Package Explorer]でプロジェクトを選択 > 「Alt + F5」でダイアログを表示 > [OK]ボタンでMavenを更新する

```xml:web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app 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_4_0.xsd"
    version="4.0">
<!-- 省略 -->
```





# 事象 : プロジェクト・ファセットのバージョンを 動的 Web モジュール から 3.0 に変更できません。
- 環境
    - macOS Mojave バージョン10.14.5
    - Eclipse 2019-03 Java Mac 64bit Full Edition(Java)

既存のMavenプロジェクトをインポートしたら怒られた:cold_sweat:

```bash:Eclipseの「問題」タブのメッセージ
(日本語版)
プロジェクト・ファセットのバージョンを 動的 Web モジュール から 3.0 に変更できません。
(英語版)
Cannot change version of project facet Dynamic Web Module to 3.0.
```

## 原因 : 動的モジュールをバージョンを下げることができないから？
[Eclipseの動的Webモジュール設定の値を間違えて起動できなくなる | つかびーの技術日記](http://tech-blog.tsukaby.com/archives/537)
下げられない理由がよくわからない・・・バージョンを下げたつもりもない・・・最初からweb.xmlに3.0って書いてあったのに・・・

```xml: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" 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">
<!-- 省略 -->
```

### 対応 : `org.eclipse.wst.common.project.facet.core.xml`でバージョンを変更する
1. Eclipseを一旦落とす
1. 以下
に記載されている`jst.web`のバージョンを変更する。
    - `{プロジェクトのディレクトリ}/.settings/org.eclipse.wst.common.project.facet.core.xml`
2. Eclipseをクリーン起動する

```xml: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="3.0"/> <!-- ここのversionを変更する -->
  <installed facet="wst.jsdt.web" version="1.0"/>
  <installed facet="java" version="1.6"/>
</faceted-project>
```