Errores de anidamiento de ruta de compilación de Eclipse

5 minutos de lectura

avatar de usuario
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'

ingrese la descripción de la imagen aquí

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 del maven-compiler-plugin.

    – Balú

    29 de marzo de 2021 a las 13:28

avatar de usuario
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...:

  1. Vaya al navegador y presione clic derecho en el proyecto
  2. Construir camino
  3. Configurar ruta de compilación
  4. Fuente (pestaña)

Patrones de exclusión

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

avatar de usuario
abhijeet104

Aquí hay una solución simple:

  1. Haga clic derecho en el proyecto >> propiedades >> ruta de compilación;
  2. En la pestaña Origen, seleccione todas las carpetas de origen;
  3. Quitarlos;
  4. 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

avatar de usuario
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”:

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

avatar de usuario
albciff

En mi caso tengo un proyecto de naturaleza gradle en eclipseel problema estaba en un build.gradledonde 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

avatar de usuario
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.

¿Ha sido útil esta solución?