2 つの jar パッケージ commons-fileupload-1.3.2.jar と commons-io-2.5.jar があります。
私は最初にこれら 2 つのパッケージを他のパッケージ、つまり外部ライブラリと同様に外部に置きました
関連するクラス、web.xml
その後、Tomcat は起動に失敗し、次のプロンプトが表示されます:
重大: ContainerBase.addChild: 開始:
org.apache.catalina.LifecycleException: コンポーネントの開始に失敗しました
java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileUploadException
質問:
2 つの jar commons-fileupload と commons-io は WEB-INF の下に配置する必要がありますか?なぜですか?
外部ライブラリに配置できないのはなぜですか?他のすべてのパッケージは外部で使用できます。
なぜこれら 2 つは外部で使用できないのでしょうか?
WEB-INF に新しいライブラリを作成し、そこにこれら 2 つのパッケージを入れました。リリースしたときに存在していましたが、その後は正常に実行されました。
これら 2 つのパッケージの特別な点は何ですか?なぜ WEB-INF
idea の Tomcat プラグイン公開アプリケーションはこの Artifact です
現在のプロジェクトのアーティファクトに、外部ライブラリに依存する jar パッケージがないか確認してください
次に、このアーティファクトに lib を追加します (プロジェクト
web/WEB-INF/lib
下放入jar包会自动加到Artifact里面。这就是为什么你说的为什么放到WEB-INF才行的原因。当然你完全可以把依赖jar包还放在External Libraries,在Artifact这里添加上就行,不过还是推荐把依赖的jar包放在项目web/WEB-INF/lib
で、このフォルダーを外部ライブラリの jar ライブラリとして配置します)Tomcatを起動すると依存関係の問題が解決されました
まず最初に訂正してください。これは WEB-INFI ではなく
WEB-INF
ディレクトリです。公開する前に Maven を使用してプロジェクトをパッケージ化しましたか? Maven に
commons-fileupload
的依赖,打包时会放在WEB-INF/lib
がある場合。ランタイム依存パッケージ
WEB-INF/lib に配置された jar パッケージは、依存関係として導入されていなくても、パッケージ化時にデフォルトで最終的な war パッケージに含まれます (場所は依然として WEB-INF/lib です)。 WEB-INF/lib に配置されていない jar パッケージについては、パッケージ中に最終 war パッケージが入力される前に、依存関係として導入する必要があります (引き続き WEB-INF/lib に配置されます)。依存関係の導入方法は3階の回答を参考にしてください
私もこの問題に遭遇しました。リリース時にインポートされた Jar が WEB-INF/lib に追加されていなかったので、Tomcat ディレクトリに対応する Jar が見つからなかったので、毎回コピーして貼り付けていました。インポート後、WEB-INF/lib の下で、インポートせずに参照ライブラリと WEB-INF/lib に直接貼り付けることもあります。