web-dev-qa-db-ja.com

Eclipseビルドパスネストエラー

私はクラス用の単純な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'

enter image description here

展開アセンブリにこれがあります:

<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/> 

Main /を除外すると警告は消えますが、問題は解決しません。アドバイスをお願いします。ありがとう。

112
Bitfrenzy

新しいプロジェクトを作成したときでも、同じ問題がありました。 Eclipse内でJavaプロジェクトを作成し、それをMaven化してから、Javaビルドパスプロパティに入り、src/を削除し、src/main/Javasrc/test/Javaを追加しました。 Maven更新を実行すると、ネストパスエラーが発生していました。
その後、ついに気づきました-以前にそのエントリを見たことがないので、pomファイルに<sourceDirectory>src</sourceDirectory>行があります。削除後に解決されました。

292
acheron55

私はこのスレッドに対して非マヴェニズムの答えを投げ入れたかった。

バージョン管理と厳密なディレクトリ構造の理由により、src/を削除してビルドパスにsrc/main/Javasrc/test/Javaを追加するのと同じようなことをするというAcheronの答え(ベストアンサー)をフォローできませんでした。

私は実際に、このネストされたビルドパスの問題と数週間にわたって断続的に戦っていました。エラーメッセージに問題の答えが示されています。

To enable the nesting exclude 'main/' from 'final/src'

修正

ビルドパスで、Excluded: (None)をクリックしてからInclusion and Exclusion Patternsをクリックして、Edit...を編集する必要があります。

  1. ナビゲーターに移動して、プロジェクトを右クリックします
  2. ビルドパス
  3. ビルドパスを構成する
  4. ソース(タブ)

Exclusion Patterns

main/webapp/WEB-INF/classesとしてExclusion Patternを追加できます。次に、main/webapp/WEB-INF/classesを個別のソースフォルダーとしてビルドパスに追加できるようにします。

17
heez

これを試して:

[ライブラリ]タブから:

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アプリライブラリ」の強調表示:

Highlighting "Web App Libraries"

10

私の場合、私はEclipseにgradle natureプロジェクトがあり、問題はbuild.gradleにあり、このsourceSetsが指定されています:

sourceSets {
    main {
        Java {
            srcDir 'src'
        }
    }
 }

これはintelliJでうまく機能するようですが、Eclipsesrcsrc/Javasrc/resourcesのネストを好みません。 Eclipseでは、次のように変更する必要があります。

sourceSets {
    main {
        Java {
            srcDir 'src/main/Java'
        }
    }
}
3
albciff

私は同じ問題を抱えていて、上記の正しい答えは私にはうまくいきませんでした。私がそれを解決するために行ったのは、Build Path->Configure Build Pathに移動し、ソースタブですべてのソース(ソースが1つしかなかった)を削除し、そこから再構成したことです。最終的にEclipseからプロジェクトを削除し、エラーを解消するためにMavenプロジェクトを再度インポートしました。

2
Hatem Jaber

ビルドの出力先となるソースとターゲットディレクトリを分離する必要があります。また、クラスファイルがソースディレクトリに配置されないことに注意することも重要です。これは教授のアドバイスに反するものではありません。実際、彼は./src/main/Javaと./src/main/webappのMaven標準ソース構造を推進しています。 2つ目は、たとえば必須のWEB-INF/web.xmlファイルですが、実際のクラスをそこに配置することはありません。

変更する必要があるのは、ターゲットディレクトリです。同じ標準を使用して、このために「./target」という名前を選択することをお勧めします。ビルドされたすべてのファイルがここに入り、それをパッケージ化することで正しいデプロイ可能なアーティファクトが作成されます。後でMavenを使用するように移行する場合は、スクリプト化された繰り返し可能な方法でこれを行うことも役立ちます。

これで問題が解決することを願っています。

2
Kristof Jozsa

受け入れられた解決策は私にはうまくいきませんでしたが、プロジェクトの設定を少し掘り下げました。

少なくとも動的Webプロジェクトを使用している場合は、次のソリューションで修正されました。

  1. プロジェクトを右クリックし、プロパティを選択します。 (またはプロジェクトでalt-enter)
  2. 展開アセンブリで「src」を削除します。

Src/main/Javaを追加できるはずです。また、自動的にDeployment Assemblyに追加します。

警告:src/test/Javaを追加した場合、Deployment Assemblyにも追加されることに注意してください。通常、これは必要ありません。削除してもかまいません。

1
Chad

Eclipseコンパイラが正常に動作するには、ソースパスからfinal/srcを削除し、代わりにfinal/src/main/Javaを追加する必要があります。これにより、ビルドディレクトリがJavaソースフォルダー内にないため、問題が解決する場合もあります。

0
Sasha O

これにより、Eclipseでグリッチを修正するという巨大なうさぎの穴に落ち始めましたが、Eclipseからプロジェクトを削除し、それを修正するために再インポートしました。

0
Carson

簡単なソリューションを次に示します。

  1. プロジェクト>>プロパティ>>ビルドパスを右クリックします。
  2. [ソース]タブで、すべてのソースフォルダーを選択します。
  3. それらを削除します。
  4. プロジェクトを右クリックし、Maven >>プロジェクトを更新します。
0
abhijeet104