web-dev-qa-db-ja.com

Eclipseの不可逆的なDynamic Web Module 4.0の選択。 Tomcat 9はサポートしていません

Java 8.でWindows 10でEclipse Oxygen.2(4.7.2)を使用しています。Tomcatを使用してEclipse内で実行するファセットプロジェクトがあります。Tomcat8.5を使用していましたが、 Tomcat 9にアップグレードした新しいシステム。もちろん、Eclipse内でTomcat 8.5サーバーとサーバーランタイムを削除し、Tomcat 9サーバーランタイムを追加しました。

EclipseにTomcat 9サーバーを追加する前に、プロジェクトのプロジェクトファセットを確認しました。 Dynamic Web Moduleは「3.1」に設定されていましたが、現在は「4.0」が使用可能になっています。 「4.0」に変更し、これにより新しいAPIにアクセスできるようになると考えました。

次に、Tomcat 9サーバーを追加しようとしました。プロセス中、「追加および削除」で、どのプロジェクトを追加してサーバーに構成するかを尋ねられます。 Webプロジェクトを選択しましたが、Eclipseは「Tomcatバージョン9.0はJ2EE 1.2、1.3、1.4、およびJava EE 5、6、7、および8のWebモジュールのみをサポートします。

今私が知っている限り、それはまさに私が使用しているものです。しかし、私が変更したのは、ダイナミックWebモジュールだけでした。そこで、プロジェクト構成に戻り、「動的Webモジュール」を「3.1」に戻そうとしました。 Eclipseは私に言う:

プロジェクトファセットダイナミックWebモジュールのバージョンを3.1に変更できません。

ええと…だから私はそれを削除します。 「動的Webモジュール」の横にあるボックスのチェックを外したところ、Eclipseは次のように表示します。

Dynamic Web Module 4.0はアンインストールできません。

まあそれは魚の素晴らしいやかんです。明らかに動的Webモジュールのため、プロジェクトをTomcatにデプロイできません。ダイナミックWebモジュールを元の状態に戻すことはできません。私は何をしますか?問題はどこにありますか?

Eclipse Bug 530844 を開いて、この動作の何らかの理由が得られるかどうかを確認しました。

8
Garret Wilson

私はあなたと同じ環境で問題を再現しました。 4.0から3.1に回帰しようとすると、次のエラーが発生しました。

CannotDowngradeTo31

このブログは解決策を提供しました (ちょっとしたハックですが、動作します):

  • プロジェクトの。settingsディレクトリにあるファイルorg.Eclipse.wst.common.project.facet.core.xmlを編集します。
  • facet = "jst.web" version = "4.0"を含む行の場合、バージョンを3.1に変更します。

こちらもご覧くださいSO question: Dynamic Web Module 3.0-3.1


関連するいくつかの問題:

  • 「Tomcatバージョン9.0はJ2EE 1.2、1.3、1.4、およびJava EE 5、6、7、および8 Webモジュール」。サーブレット4.0を使用するようにプロジェクトが構成されていますか?Mavenプロジェクトの場合、 POMにこの依存関係を追加 サーブレット4が必要でした。

  • Dynamic Web Moduleのバージョンを3.1に変更した後でも、私のWebアプリはバージョン4.0を使用し続けたため、そのファセットが何を達成するのかわかりません。

7
skomisa

私の解決策は、このメッセージへの応答です。

Dynamic Web Module 4.0 cannot be uninstalled.

1-それで; Dynamic Web Moduleをアンインストールできない場合(「バージョンの変更」ではなく「アンインストール」を繰り返します)、プロジェクトディレクトリでファイルを最初に編集できます:.settings/org.Eclipse.wst.common.project.facet.core.xmlそして次の行を削除して手動でアンインストールします。

<installed facet="jst.web" version="4.0"/>

2-この後、動的Webモジュール4.0を使用する場合は、少なくとも同じファセット内でファセットJava 1.8を使用する.settings/org.Eclipse.wst.common.project.facet.core.xml

<installed facet="Java" version="1.8"/>

または、「Project Facets configuration」パネルで変更することもできます

3-問題が解決しない場合は、pomファイルを見て、Java version to 1.7、これらのプロパティがあるはずです。

    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>

Pomファイルを変更する場合は、必ずプロジェクトを更新してください。Maven> Update Projects

4-最後に、まだDynamic Web Module 4.0を使用できない場合は、WEB-INF\web.xmlファイルは、次のような別の動的なWebバージョンの構成を持つことができます。

<?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">
...

それ以外の場合は、サポートされているバージョンを手動で変更できます。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">
...

project Facets構成パネルに戻り、もう一度Dynamic Web Module 4.0を選択してみてください。動作するはずです

この助けを願っています。

1
Benfarhat

私にとっては、pomファイルからこの依存関係を削除すると、この問題はなくなりました。私の場合、サーブレットを使用していないため、この依存関係は必要ありませんでした

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.0</version>
    <scope>provided</scope>
</dependency>

それが役立つことを願って