Everarco
Estoy trabajando en una aplicación web JSP/Servlet/Tomcat simple para mi clase. El profesor nos pidió que usáramos una estructura de carpetas que es ligeramente diferente a la estructura del proyecto web dinámico predeterminado. En lugar de usar la carpeta de contenido web, quiere todo nuestro código fuente en src/main/java y src/main/webapp.
Cuando ejecuto la aplicación, mi archivo de bienvenida se muestra bien, pero cuando intento acceder a mis servlets, obtengo:
Http 500 SEVERE: Allocate exception for servlet InitDb
java.lang.ClassNotFoundException. Estoy bastante seguro de que es un error de ruta de compilación. Tengo final/src en la ruta de compilación pero recibo la advertencia
"Cannot nest 'final/src/main/webapp/WEB-INF/classes' inside 'final/src'. To enable the nesting exclude 'main/' from 'final/src'
Tengo esto en mi ensamblaje de implementación:
<wb-resource deploy-path="https://stackoverflow.com/" source-path="/src/main/webapp" tag="defaultRootSource"/>
Cuando excluyo main/, la advertencia desaparece, pero no soluciona el problema. Apreciaría cualquier consejo. Gracias.
Tuve el mismo problema incluso cuando creé un nuevo proyecto. Estaba creando el proyecto Java dentro de Eclipse, luego lo mavenize, luego fui a las propiedades de la ruta de compilación de Java eliminando src/
y agregando src/main/java
y src/test/java
. Cuando ejecuto la actualización de Maven, solía dar un error de ruta anidada.
Entonces finalmente me di cuenta -porque no había visto esa entrada antes- hay un <sourceDirectory>src</sourceDirectory>
línea en el archivo pom escrito cuando lo mavenize. Se resolvió después de quitarlo.
-
Este es solo uno de los muchos trucos aleatorios. Sin explicar por qué. Por lo tanto, menos útil.
– smwikipedia
17 de noviembre de 2015 a las 3:42
-
Acabo de cambiar el nombre de la entrada pom a scr/main/java y todo estuvo bien. Gracias por el post acheron55
– Beezer
24 de junio de 2016 a las 8:35
-
lo pusiste ahi? o de donde viene?
– Línea
27 de enero de 2019 a las 22:39
-
Este
<sourceDirectory>src</sourceDirectory>
apareció en mi pom.xml después de que cambié la versión JDK delmaven-compiler-plugin
.– Balú
29 de marzo de 2021 a las 13:28
jejeje
Quería lanzar una respuesta no mavenish a este hilo.
Debido al control de versiones y a razones estrictas de estructura de directorios, no pude seguir la respuesta de Acheron (la mejor respuesta) de hacer algo similar a eliminar src/
y agregando src/main/java
y src/test/java
a la ruta de compilación.
De hecho, había estado luchando de vez en cuando con este problema de la ruta de compilación anidada durante un par de semanas. La respuesta al problema se insinúa en el mensaje de error:
To enable the nesting exclude 'main/' from 'final/src'
Arreglar
En su ruta de compilación, debe editar su Inclusion and Exclusion Patterns
haciendo clic en Excluded: (None)
y entonces Edit...
:
- Vaya al navegador y presione clic derecho en el proyecto
- Construir camino
- Configurar ruta de compilación
- Fuente (pestaña)
Allí puedes agregar main/webapp/WEB-INF/classes
como un Exclusion Pattern
. Entonces debería permitirte agregar main/webapp/WEB-INF/classes
a la ruta de compilación como una carpeta de origen independiente.
-
Gran respuesta . Exactamente el problema que estaba enfrentando. Votado a favor.
– El caballero oscuro
9 de noviembre de 2021 a las 15:33
abhijeet104
Aquí hay una solución simple:
- Haga clic derecho en el proyecto >> propiedades >> ruta de compilación;
- En la pestaña Origen, seleccione todas las carpetas de origen;
- Quitarlos;
- Haga clic derecho en el proyecto, Maven >> Actualizar el proyecto.
-
¡Gracias por salvarme el día!
– usuario1807337
26 oct 2020 a las 20:35
-
Esto funcionó perfectamente para mí sin tener que alterar ninguna configuración.
–Michael Skarn
10 de junio a las 16:39
Sireesh Yarlagadda
Prueba esto:
Desde la pestaña de bibliotecas:
Eclipse -> right click on project name in sidebar -> configure build path -> Libraries
Elimina las bibliotecas de tu aplicación web:
click on "Web App Libraries" -> click "remove"
Agrégalos de nuevo en:
click "Add Library" -> click to highlight "Web App Libraries" -> click "next" -> confirm your desired project is the selected option -> click "Finish"
Destacando “Bibliotecas de aplicaciones web”:
Tuve el mismo problema y la respuesta correcta anterior no funcionó para mí. Lo que hice para resolverlo fue ir a Build Path->Configure Build Path
y en la pestaña fuente, eliminé todas las fuentes (que solo tenían una fuente) y las reconfiguré desde allí. Terminé eliminando el proyecto de eclipse e importé el proyecto maven nuevamente para aclarar el error.
-
¡Te mereces el mundo, querida! Muchas gracias. Eso fue todo sobre la estructura incorrecta de Maven.
– Matheus Santz
25 de marzo de 2021 a las 15:49
albciff
En mi caso tengo un proyecto de naturaleza gradle en eclipseel problema estaba en un build.gradle
donde esto sourceSets
está especificado:
sourceSets {
main {
java {
srcDir 'src'
}
}
}
Esto parece funcionar bien con intelliJ,sin embargo parece que eclipse no le gusta el nido src
, src/java
, src/resources
. En eclipse Debo cambiarlo a:
sourceSets {
main {
java {
srcDir 'src/main/java'
}
}
}
-
¡Te mereces el mundo, querida! Muchas gracias. Eso fue todo sobre la estructura incorrecta de Maven.
– Matheus Santz
25 de marzo de 2021 a las 15:49
Kristof Jozsa
Debe separar sus fuentes y su directorio de destino donde va la salida de compilación. También es importante tener en cuenta que ningún archivo de clase puede terminar en el directorio de origen. Esto no va en contra del consejo de su profesor; en realidad, está promoviendo la estructura de fuente estándar de maven para ./src/main/java y ./src/main/webapp. El segundo debe contener, por ejemplo. el archivo WEB-INF/web.xml obligatorio, pero nunca colocará clases reales allí.
Lo que necesita cambiar es su directorio de destino. Sugiero ir con los mismos estándares y elegir el nombre “./objetivo” para esto. Todos los archivos creados irán aquí y el empaquetamiento dará como resultado un artefacto desplegable correcto. Si migra a usar maven más tarde, también ayudará a hacerlo de una manera repetible y con guiones.
Espero que eso aclare tu problema.