2012-05-31 11 views
90

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 di progetto web dinamico di default. Piuttosto che usare la cartella webcontent, vuole tutto il nostro codice sorgente sotto src/main/java e src/main/webapp.Errori di annidamento del percorso di costruzione di Eclipse

Quando eseguo l'applicazione mio file di benvenuto mostra bene, ma quando provo ad accedere al mio servlet ottengo:

Http 500 SEVERE: Allocate exception for servlet InitDb 

java.lang.ClassNotFoundException. Sono abbastanza sicuro che si tratta di un errore nel percorso di costruzione. Ho finale/src sul percorso di generazione, ma sto ricevendo l'avvertimento

"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

ho questo nella mia assemblea distribuzione:

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

Quando Escludo principale/l'avvertimento va via, ma non risolve il problema. Gradirei qualche consiglio. Grazie.

risposta

242

Ho avuto lo stesso problema anche quando ho creato un nuovo progetto. stavo creando il progetto Java all'interno di Eclipse, allora mavenize, poi andare in java costruzioni Proprietà percorso rimozione src/ e l'aggiunta di src/main/java e src/test/java. Quando eseguo l'aggiornamento di Maven, veniva usato per dare un errore di percorso annidato.
Poi ho finalmente capito, perché non avevo ancora visto quella voce: c'è una riga <sourceDirectory>src</sourceDirectory> nel file pom scritta quando la mavenize. È stato risolto dopo averlo rimosso.

+0

Questo è solo uno dei tanti trucchi casuali. Non spiegando perché. Quindi meno utile. – smwikipedia

+1

Ho appena ribattezzato la voce pom su scr/main/java e tutto andava bene. Grazie per il post acheron55 – Beezer

+1

ottimo, è lavoro .. – deen

-3

Creare due cartelle: final/src/ per memorizzare il codice java di origine e final/WebRoot/.

Non è possibile mettere insieme la sorgente e il webroot. Penso che potresti fraintendere il tuo insegnante.

2

È necessario separare le origini e la directory di destinazione in cui va l'output della build. È anche importante notare che nessun file di classe può mai finire nella directory di origine. Questo non è contro il parere del tuo professore - in realtà sta promuovendo la struttura standard di Maven che sta per ./src/main/java e ./src/main/webapp. Il secondo dovrebbe contenere ad es. il file obbligatorio WEB-INF/web.xml ma non inserirai mai le classi attuali.

Ciò che è necessario modificare è la directory di destinazione. Suggerisco di andare con gli stessi standard e scegliere il nome "./target" per questo. Tutti i file compilati andranno qui e la loro creazione comporterà un artefatto deployabile corretto. Se dovessi migrare a utilizzare Maven in un secondo momento, ti aiuterà anche a farlo in modo programmato e ripetibile.

Spero di chiarire il problema.

0

per Eclipse compilatore corretto funzionamento è necessario rimuovere finale/src dal percorso di origine e aggiungere finale/src/main/java invece. Questo potrebbe anche risolvere il tuo problema dato che ora la directory di build non sarà all'interno della cartella di origine Java.

9

Prova questo:

Dalla scheda librerie:

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

togliere le librerie app web:

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

aggiungerle 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 " Web A pp Biblioteche ":

Highlighting "Web App Libraries"

12

ho voluto gettare in una risposta non mavenish a questo thread.

Grazie al controllo di versione e rigorose motivazioni struttura di directory, sono stato in grado di seguire la risposta di Acheron (la migliore risposta) di fare qualcosa di simile alla rimozione src/ e l'aggiunta di src/main/java e src/test/java al percorso di generazione.

In realtà ero in giro per un paio di settimane. La risposta al problema è accennato nel messaggio di errore:

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

Nel vostro percorso di generazione, è necessario modificare il Inclusion and Exclusion Patterns cliccando su Excluded: (None) e poi Edit...:

Exclusion Patterns

Ci è possibile aggiungere main/webapp/WEB-INF/classes come Exclusion Pattern. Quindi dovrebbe consentire di aggiungere main/webapp/WEB-INF/classes al percorso di generazione come una cartella di origine separata.

2

Ho avuto lo stesso problema e la risposta corretta sopra non ha funzionato per me. Quello che ho fatto per risolverlo era andare a Build Path->Configure Build Path e sotto la scheda sorgente ho rimosso tutte le fonti (che avevano solo una fonte) e le ho riconfigurate da lì. Ho finito per rimuovere il progetto da Eclipse e importare di nuovo il progetto Maven per chiarire l'errore.

0

La soluzione accettata non ha funzionato per me, ma ho fatto qualche ricerca sulle impostazioni del progetto.

La seguente soluzione ha risolto il tutto per me, almeno se si utilizza un progetto Web dinamico:

  1. Fare clic destro sul progetto, allora proprietà. (o alt-enter sul progetto)
  2. In Deployment Assembly rimuovere "src".

Dovrebbe essere possibile aggiungere src/main/java. Inoltre, lo aggiunge automaticamente all'assembly di distribuzione.

Avvertenza: se è stata aggiunta una nota src/test/java, questa viene aggiunta anche al gruppo di distribuzione. In generale, non hai bisogno di questo. Puoi rimuoverlo.

0

Nel mio caso ho un progetto di natura Gradle in eclissi, il problema era in una build.gradle, in cui si specifica questo sourceSets:

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

Questo sembra funziona bene con IntelliJ, tuttavia sembra di eclissi non piace il nido src, src/java, src/resources. In Eclipse devo modificarla in:

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