java - plugin - Errores de anidamiento de ruta de compilación Eclipse
jframe para eclipse (9)
Estoy trabajando en una aplicación web JSP / Servlet / Tomcat simple para mi clase. El profesor nos pidió que utilizáramos una estructura de carpetas que es ligeramente diferente a la estructura de proyecto web dinámica predeterminada. En lugar de usar la carpeta de contenido web, quiere que todo nuestro código fuente esté bajo 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 compilación. Tengo final / src en la ruta de compilación, pero estoy recibiendo 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="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
Cuando excluyo principal / la advertencia desaparece, pero no soluciona el problema. Apreciaría cualquier consejo. Gracias.
Cree dos carpetas: final/src/
para almacenar el código fuente java y final/WebRoot/
.
No puedes juntar la fuente y la webroot. Creo que puedes malinterpretar a tu profesor.
Debe separar sus fuentes y su directorio de destino donde va el resultado 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 él está promoviendo la estructura de fuente estándar maven para ./src/main/java y ./src/main/webapp. El segundo debe contener, por ej. 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 "./target" para esto. Todos los archivos compilados entrarán aquí y el empaquetado resultará en un artefacto desplegable correcto. Si migras a usar maven más tarde, también te ayudará a hacerlo de una manera guionada y repetible.
Espero que aclare tu problema.
En mi caso, tengo un proyecto de naturaleza de gradle en eclipse , el problema estaba en build.gradle
, donde se especifica este sourceSets
:
sourceSets {
main {
java {
srcDir ''src''
}
}
}
Esto parece funcionar bien con intelliJ , sin embargo parece que eclipse no le gusta nest src
, src/java
, src/resources
. En Eclipse debo cambiarlo a:
sourceSets {
main {
java {
srcDir ''src/main/java''
}
}
}
La solución aceptada no funcionó para mí, pero investigué un poco sobre la configuración del proyecto.
La siguiente solución me solucionó al menos si está utilizando un proyecto web dinámico:
- Haga clic derecho en el proyecto y luego en las propiedades. (o alt-enter en el proyecto)
- En el ensamblado de implementación, elimine "src".
Debería poder agregar el src / main / java. También lo agrega automáticamente al Ensamblaje de Despliegue.
Advertencia: si agregó una nota src / test / java, también la agrega al Ensamblaje de implementación. Generalmente, no necesitas esto. Usted puede eliminarlo.
Para que el compilador de Eclipse funcione correctamente, debe eliminar final / src de la ruta de origen y agregar final / src / main / java en su lugar. Esto también puede resolver su problema ya que ahora el directorio de compilación no estará dentro de la carpeta de origen de Java.
Prueba esto:
Desde la pestaña de bibliotecas:
Eclipse -> right click on project name in sidebar -> configure build path -> Libraries
Elimine las bibliotecas de su aplicación web:
click on "Web App Libraries" -> click "remove"
Añádalos de nuevo a:
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":
Quería lanzar una respuesta no mavenish a este hilo.
Debido al control de versiones y la estricta estructura de directorios, no pude seguir la respuesta de Acheron (la mejor respuesta) de hacer algo similar a eliminar src/
y agregar src/main/java
y src/test/java
a la ruta de compilación.
De hecho, he estado luchando contra este problema 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''
Fijar
En su ruta de compilación, debe editar sus Inclusion and Exclusion Patterns
haciendo clic en Excluded: (None)
y luego Edit...
:
- Ve al navegador y presiona el botón derecho sobre el proyecto
- Construir camino
- Configurar la ruta de compilación
- Fuente (pestaña)
Allí puede agregar main/webapp/WEB-INF/classes
como Exclusion Pattern
. Luego debería permitirle agregar main/webapp/WEB-INF/classes
a la ruta de compilación como una carpeta de origen separada.
Tuve el mismo problema incluso cuando creé un proyecto nuevo. Estaba creando el proyecto de Java dentro de Eclipse, luego lo maceé y luego ingresé a las propiedades de ruta de compilación 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 una línea <sourceDirectory>src</sourceDirectory>
en el archivo pom escrito cuando lo mavenize. Se resolvió después de eliminarlo.
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 source Build Path->Configure Build Path
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.