Errori di annidamento del percorso di creazione di Eclipse


122

Sto lavorando a una semplice webapp JSP / Servlet / Tomcat per la mia classe. Il professore ci ha chiesto di utilizzare una struttura di cartelle leggermente diversa dalla struttura del progetto web dinamico predefinito. Piuttosto che usare la cartella webcontent, vuole tutto il nostro codice sorgente sotto src / main / java e src / main / webapp.

Quando eseguo l'app il mio file di benvenuto viene visualizzato correttamente, ma quando provo ad accedere ai miei servlet ottengo:

 Http 500 SEVERE: Allocate exception for servlet InitDb

java.lang.ClassNotFoundException. Sono abbastanza sicuro che sia un errore del percorso di compilazione. Ho final / src sul percorso di compilazione ma ricevo l'avviso

"Cannot nest 'final/src/main/webapp/WEB-INF/classes' inside 'final/src'. To enable the    nesting exclude 'main/' from 'final/src'

inserisci qui la descrizione dell'immagine

Ho questo nel mio assembly di distribuzione:

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

Quando escludo main / l'avviso scompare, ma non risolve il problema. Apprezzerei qualsiasi consiglio. Grazie.

Risposte:


309

Ho avuto lo stesso problema anche quando ho creato un nuovo progetto. Stavo creando il progetto Java all'interno di Eclipse, quindi modificarlo, quindi entrare nelle proprietà del percorso di compilazione java rimuovendo src/e aggiungendo src/main/javae src/test/java. Quando eseguo l'aggiornamento Maven, viene utilizzato per fornire un errore di percorso nidificato.
Poi ho finalmente capito -perché non avevo visto quella voce prima- che c'è una <sourceDirectory>src</sourceDirectory>riga nel file pom scritta quando lo muovo. È stato risolto dopo averlo rimosso.


1
Questo è solo uno dei tanti trucchi casuali. Senza spiegare perché. Quindi meno utile.
smwikipedia

4
Ho appena rinominato la voce pom in scr / main / java ed è andato tutto bene. Grazie per il post acheron55
Beezer

l'hai messo lì? o da dove viene?
Linea

23

Volevo dare una risposta non stucchevole a questo thread.

A causa del controllo della versione e dei motivi rigorosi della struttura delle directory, non sono stato in grado di seguire la risposta di Acheron (la risposta migliore) di fare qualcosa di simile alla rimozione src/e all'aggiunta src/main/javae src/test/javaal percorso di compilazione.

In realtà avevo combattuto continuamente questo problema del percorso di compilazione annidato per un paio di settimane. La risposta al problema è suggerita nel messaggio di errore:

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

fix

Nel tuo percorso di costruzione, devi modificare il tuo Inclusion and Exclusion Patternsfacendo clic su Excluded: (None)e quindi Edit...:

  1. Vai al navigatore e premi il tasto destro del mouse sul progetto
  2. Crea percorso
  3. Configura percorso build
  4. Fonte (scheda)

Modelli di esclusione

Lì puoi aggiungere main/webapp/WEB-INF/classescome file Exclusion Pattern. Quindi dovrebbe consentirti di aggiungere main/webapp/WEB-INF/classesal percorso di build come una cartella di origine separata.


10

Prova questo:

Dalla scheda librerie:

Eclipse -> right click on project name in sidebar -> configure build path -> Libraries

Rimuovi le tue raccolte di app web:

click on "Web App Libraries" -> click "remove"

Aggiungili di nuovo in:

click "Add Library" -> click to highlight "Web App Libraries" -> click "next" -> confirm your desired project is the selected option -> click "Finish"

Evidenziazione di "Librerie di app Web":

Evidenziazione di "Librerie di app Web"


3

Ho avuto lo stesso problema e la risposta corretta sopra non ha funzionato per me. Quello che ho fatto per risolverlo è stato andare Build Path->Configure Build Pathe sotto la scheda sorgente ho rimosso tutte le sorgenti (che aveva solo una sorgente) e le ho riconfigurate da lì. Ho finito per rimuovere il progetto da eclipse e importare di nuovo il progetto Maven per eliminare l'errore.


3

Nel mio caso ho un progetto gradle nature in eclipse , il problema era in a build.gradle, dove questo sourceSetsè specificato:

sourceSets {
    main {
        java {
            srcDir 'src'
        }
    }
 }

Questo sembra funziona bene con IntelliJ , tuttavia sembra che eclisse non come un nido src, src/java, src/resources. In eclipse devo cambiarlo in:

sourceSets {
    main {
        java {
            srcDir 'src/main/java'
        }
    }
}

3

Ecco una semplice soluzione:

  1. Fare clic con il pulsante destro del mouse sul progetto >> proprietà >> percorso di creazione;
  2. Nella scheda Origine, seleziona tutte le cartelle di origine;
  3. Rimuovili;
  4. Fare clic con il tasto destro sul progetto, Maven >> Aggiorna il progetto.

2

Devi separare i tuoi sorgenti e la tua directory di destinazione dove va l'output della build. È anche importante notare che nessun file di classe può mai finire nella directory di origine. Questo non è contro il consiglio del tuo professore - in realtà sta promuovendo la struttura dei sorgenti standard di Maven per ./src/main/java e ./src/main/webapp. Il secondo dovrebbe contenere ad es. il file WEB-INF / web.xml obbligatorio ma non inserirete mai le classi effettive lì.

Quello che devi cambiare è la tua directory di destinazione. Suggerisco di seguire gli stessi standard e di scegliere il nome "./target" per questo. Tutti i file compilati verranno inseriti qui e la loro impacchettatura risulterà un artefatto distribuibile corretto. Se migrerai a Maven in un secondo momento, ti aiuterà anche a farlo in modo ripetibile e con script.

Spero che questo risolva il tuo problema.


1

La soluzione accettata non ha funzionato per me, ma ho approfondito le impostazioni del progetto.

La seguente soluzione lo ha risolto per me almeno SE stai utilizzando un progetto Web dinamico:

  1. Fare clic con il tasto destro sul progetto, quindi su Proprietà. (o alt-invio nel progetto)
  2. In Deployment Assembly rimuovere "src".

Dovresti essere in grado di aggiungere il file src / main / java. Inoltre, lo aggiunge automaticamente a Deployment Assembly.

Avvertenza: se hai aggiunto un src / test / java, nota che lo aggiungi anche a Deployment Assembly. Generalmente non ne hai bisogno. Puoi rimuoverlo.


1

Questo ha iniziato a farmi cadere in un enorme buco nel coniglio di risoluzione dei problemi con Eclipse, tuttavia ho appena eliminato il progetto da Eclipse e l'ho reimportato per risolverlo.


0

Affinché il compilatore Eclipse funzioni correttamente, è necessario rimuovere final / src dal percorso di origine e aggiungere invece final / src / main / java. Questo potrebbe anche risolvere il tuo problema poiché ora la directory di build non sarà all'interno della cartella dei sorgenti di Java.


0

IDE STS

Dipende dalla cartella a cui si dice "Usa come cartella di origine". Nella struttura sull'immagine se si dice alla cartella "target" o "generata", si ottiene l'errore "annidato". Ma sulla cartella "cxf", che è l'ultima, menzionata nella sezione 'plugin' di pom.xml e da dove inizia la struttura del pacchetto (come mostrato nel file .wsdl), cioè - la cartella giusta per farlo 'sorgente' , quindi non ci sono errori


0

Ho riscontrato un problema simile. Sono stati eseguiti i seguenti passaggi, problema risolto:

  1. Rimuovi il progetto in Eclipse.
  2. Elimina il file .Project e. Cartella delle impostazioni.
  3. Importa nuovamente il progetto come progetto Maven esistente in eclipse.

-3

Crea due cartelle: final/src/per archiviare il codice java sorgente e final/WebRoot/.

Non puoi mettere insieme sorgente e webroot. Penso che potresti fraintendere il tuo insegnante.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.