Errores de anidamiento de ruta de compilación de Eclipse

122

Estoy trabajando en una aplicación web simple JSP / Servlet / Tomcat para mi clase. El profesor nos pidió que usemos una estructura de carpetas que sea ligeramente diferente de la estructura dinámica de proyecto web predeterminada. 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="/" source-path="/src/main/webapp" tag="defaultRootSource"/> 

Cuando excluyo main / la advertencia desaparece, pero no soluciona el problema. Apreciaría cualquier consejo. Gracias.

Everhill
fuente

Respuestas:

309

Tuve el mismo problema incluso cuando creé un proyecto nuevo. Estaba creando el proyecto Java dentro de Eclipse, luego lo mavenizé, luego ingresé a las propiedades de ruta de compilación de Java eliminando src/y agregando src/main/javay 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 <sourceDirectory>src</sourceDirectory>línea en el archivo pom escrita cuando la mavenice. Se resolvió después de eliminarlo.

acheron55
fuente
1
Este es solo uno de los muchos trucos aleatorios. Sin explicar por qué. Por lo tanto, menos útil.
smwikipedia
44
Acabo de cambiar el nombre de la entrada pom a scr / main / java y todo estuvo bien. Gracias por el post acheron55
Beezer
¿Lo pusiste allí? o de donde viene?
Línea del
23

Quería agregar una respuesta no mavenish a este hilo.

Debido al control de versiones y a las estrictas razones de la estructura de directorios, no pude seguir la respuesta de Acheron (la mejor respuesta) de hacer algo similar a eliminar src/y agregar src/main/javay src/test/javaa la ruta de compilación.

En realidad, había estado luchando de vez en cuando con este problema de 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'

Reparar

En su ruta de compilación, necesita editar su Inclusion and Exclusion Patternshaciendo clic en Excluded: (None)y luego Edit...:

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

Patrones de exclusión

Allí puede agregar main/webapp/WEB-INF/classescomo un Exclusion Pattern. Entonces debería permitirle agregar main/webapp/WEB-INF/classesa la ruta de compilación como una carpeta fuente separada.

heez
fuente
10

Prueba esto:

Desde la pestaña de bibliotecas:

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

Elimine sus bibliotecas de aplicaciones web:

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

Añadirlos 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"

Sireesh Yarlagadda
fuente
3

Tuve el mismo problema y la respuesta correcta anterior no funcionó para mí. Lo que hice para resolverlo fue ir Build Path->Configure Build Pathy, debajo de la pestaña de fuente, eliminé todas las fuentes (que solo tenían una fuente) y las reconfiguré desde allí. Terminé eliminando el proyecto del eclipse e importé el proyecto de Maven nuevamente para eliminar el error.

Hatem Jaber
fuente
3

En mi caso tengo un proyecto de gradle nature en eclipse , el problema estaba en un build.gradle, donde esto sourceSetsse especifica:

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

Esto parece que funciona bien con IntelliJ , sin embargo parece que el eclipse no como un nido src, src/java, src/resources. En eclipse debo cambiarlo a:

sourceSets {
    main {
        java {
            srcDir 'src/main/java'
        }
    }
}
albciff
fuente
3

Aquí hay una solución simple:

  1. Haga clic derecho en el proyecto >> propiedades >> compilar ruta;
  2. En la pestaña Fuente, seleccione todas las carpetas de origen;
  3. Eliminarlos;
  4. Haga clic derecho en el proyecto, Maven >> Actualice el proyecto.
abhijeet104
fuente
2

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 de los consejos de tu profesor: en realidad, está promoviendo la estructura fuente estándar de Maven para ./src/main/java y ./src/main/webapp. El segundo debe contener, por ejemplo. el archivo obligatorio WEB-INF / web.xml, 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 creados entrarán aquí y su empaquetado dará como resultado un artefacto desplegable correcto. En caso de que migres a usar Maven más tarde, también será útil hacerlo de forma repetida y con guiones.

Espero que aclare tu problema.

Kristof Jozsa
fuente
1

La solución aceptada no funcionó para mí, pero investigué un poco la configuración del proyecto.

La siguiente solución lo arregló para mí al menos SI está utilizando un proyecto web dinámico:

  1. Haga clic derecho en el proyecto y luego en las propiedades. (o alt-enter en el proyecto)
  2. En Asamblea de implementación, elimine "src".

Debería poder agregar el src / main / java. También lo agrega automáticamente al ensamblaje de implementación.

Advertencia: si agregó un src / test / java, tenga en cuenta que también lo agrega al ensamblaje de implementación. En general, no necesitas esto. Puedes quitarlo.

Chad
fuente
1

Esto comenzó a llevarme a un enorme agujero de conejo para solucionar problemas técnicos con Eclipse, sin embargo, simplemente eliminé el proyecto de Eclipse y lo volví a importar para solucionarlo.

Carson
fuente
0

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 fuente de Java.

Sasha O
fuente
0

IDE STS

Depende de a qué carpeta se le diga "Usar como carpeta de origen". En la estructura de la imagen, si uno lo dice a la carpeta "objetivo" o "generado", obtiene el error "anidado". Pero en la carpeta "cxf", que es la última, mencionada en la sección 'plugin' de pom.xml y desde dónde comienza la estructura del paquete (como se muestra en el archivo .wsdl), es decir, la carpeta correcta para hacerlo 'fuente' , entonces no hay error

yrz
fuente
0

Tengo un problema similar. Hizo los siguientes pasos, problema resuelto:

  1. Eliminar proyecto en eclipse.
  2. Eliminar .Project file y. Carpeta de configuraciones.
  3. Importe el proyecto como proyecto maven existente nuevamente para eclipsar.
Camino
fuente
-3

Haga dos carpetas: final/src/para almacenar el código fuente de Java, y final/WebRoot/.

No puede juntar la fuente y el webroot. Creo que puedes entender mal a tu maestro.

Jimmy Zhang
fuente