Estaba escribiendo algunos programas de práctica para mi certificación Java esta mañana y noté que había escrito mal el nombre de un paquete, por lo que no coincidía con el subdirectorio en el que estaba el archivo java. Recopilé el código esperando un error, pero todo compilado archivo - ni siquiera una advertencia.¿Los paquetes no tienen que coincidir con los subdirectorios en los que se encuentra el archivo java?
Busqué en Google un poco, y la mayoría de las páginas que leí dijeron que el nombre del paquete tenía que coincidir con el subdirectorio. Mi experiencia demuestra que no es el caso.
Cuando intenté ejecutar el programa, no funcionó porque el archivo .class estaba en el directorio incorrecto. La movía al directorio correcto, y dio este mensaje:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sample/directory
/doesnt/even/exist/OtherPackageMemberModifiers (wrong name: com/sample/chap01/O
therPackageMemberModifiers)
Así que lo que pienso que estoy viendo es que el código Java compilar si el paquete y el subdirectorio no coinciden, pero hay no parece ser una forma de ejecutar el código si lo haces. ¿Es eso correcto?
El fenómeno que ruta del paquete y la ruta del directorio son redundante muestra su desagradable cabeza. El compilador habría tenido razón al emitir un error. Sin embargo, eso no sería 100%: paquete src.main.java.com.sample ... o paquete com.sample. ... aún así ambos no generarían ningún error. Javac necesitaría estar basado en directorio (-d) y básicamente se basa en archivos. –