私はクラス用の単純なJSP/Servlet/Tomcat webappに取り組んでいます。教授は、デフォルトの動的Webプロジェクト構造とは少し異なるフォルダー構造を使用するように依頼しました。 webcontentフォルダーを使用するのではなく、src/main/Javaおよびsrc/main/webappの下にすべてのソースコードが必要です。
アプリを実行すると、ウェルカムファイルは正常に表示されますが、サーブレットにアクセスしようとすると次のようになります。
Http 500 SEVERE: Allocate exception for servlet InitDb
Java.lang.ClassNotFoundException。私はそれがビルドパスエラーだと確信しています。ビルドパスにfinal/srcがありますが、警告が表示されます
"Cannot nest 'final/src/main/webapp/WEB-INF/classes' inside 'final/src'. To enable the nesting exclude 'main/' from 'final/src'
展開アセンブリにこれがあります:
<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
Main /を除外すると警告は消えますが、問題は解決しません。アドバイスをお願いします。ありがとう。
新しいプロジェクトを作成したときでも、同じ問題がありました。 Eclipse内でJavaプロジェクトを作成し、それをMaven化してから、Javaビルドパスプロパティに入り、src/
を削除し、src/main/Java
とsrc/test/Java
を追加しました。 Maven更新を実行すると、ネストパスエラーが発生していました。
その後、ついに気づきました-以前にそのエントリを見たことがないので、pomファイルに<sourceDirectory>src</sourceDirectory>
行があります。削除後に解決されました。
私はこのスレッドに対して非マヴェニズムの答えを投げ入れたかった。
バージョン管理と厳密なディレクトリ構造の理由により、src/
を削除してビルドパスにsrc/main/Java
とsrc/test/Java
を追加するのと同じようなことをするというAcheronの答え(ベストアンサー)をフォローできませんでした。
私は実際に、このネストされたビルドパスの問題と数週間にわたって断続的に戦っていました。エラーメッセージに問題の答えが示されています。
To enable the nesting exclude 'main/' from 'final/src'
修正
ビルドパスで、Excluded: (None)
をクリックしてからInclusion and Exclusion Patterns
をクリックして、Edit...
を編集する必要があります。
main/webapp/WEB-INF/classes
としてExclusion Pattern
を追加できます。次に、main/webapp/WEB-INF/classes
を個別のソースフォルダーとしてビルドパスに追加できるようにします。
これを試して:
[ライブラリ]タブから:
Eclipse -> right click on project name in sidebar -> configure build path -> Libraries
Webアプリライブラリを削除します。
click on "Web App Libraries" -> click "remove"
それらを再び追加します。
click "Add Library" -> click to highlight "Web App Libraries" -> click "next" -> confirm your desired project is the selected option -> click "Finish"
「Webアプリライブラリ」の強調表示:
私の場合、私はEclipseにgradle natureプロジェクトがあり、問題はbuild.gradle
にあり、このsourceSets
が指定されています:
sourceSets {
main {
Java {
srcDir 'src'
}
}
}
これはintelliJでうまく機能するようですが、Eclipseはsrc
、src/Java
、src/resources
のネストを好みません。 Eclipseでは、次のように変更する必要があります。
sourceSets {
main {
Java {
srcDir 'src/main/Java'
}
}
}
私は同じ問題を抱えていて、上記の正しい答えは私にはうまくいきませんでした。私がそれを解決するために行ったのは、Build Path->Configure Build Path
に移動し、ソースタブですべてのソース(ソースが1つしかなかった)を削除し、そこから再構成したことです。最終的にEclipseからプロジェクトを削除し、エラーを解消するためにMavenプロジェクトを再度インポートしました。
ビルドの出力先となるソースとターゲットディレクトリを分離する必要があります。また、クラスファイルがソースディレクトリに配置されないことに注意することも重要です。これは教授のアドバイスに反するものではありません。実際、彼は./src/main/Javaと./src/main/webappのMaven標準ソース構造を推進しています。 2つ目は、たとえば必須のWEB-INF/web.xmlファイルですが、実際のクラスをそこに配置することはありません。
変更する必要があるのは、ターゲットディレクトリです。同じ標準を使用して、このために「./target」という名前を選択することをお勧めします。ビルドされたすべてのファイルがここに入り、それをパッケージ化することで正しいデプロイ可能なアーティファクトが作成されます。後でMavenを使用するように移行する場合は、スクリプト化された繰り返し可能な方法でこれを行うことも役立ちます。
これで問題が解決することを願っています。
受け入れられた解決策は私にはうまくいきませんでしたが、プロジェクトの設定を少し掘り下げました。
少なくとも動的Webプロジェクトを使用している場合は、次のソリューションで修正されました。
Src/main/Javaを追加できるはずです。また、自動的にDeployment Assemblyに追加します。
警告:src/test/Javaを追加した場合、Deployment Assemblyにも追加されることに注意してください。通常、これは必要ありません。削除してもかまいません。
Eclipseコンパイラが正常に動作するには、ソースパスからfinal/srcを削除し、代わりにfinal/src/main/Javaを追加する必要があります。これにより、ビルドディレクトリがJavaソースフォルダー内にないため、問題が解決する場合もあります。
これにより、Eclipseでグリッチを修正するという巨大なうさぎの穴に落ち始めましたが、Eclipseからプロジェクトを削除し、それを修正するために再インポートしました。
簡単なソリューションを次に示します。