¿Qué hay en un archivo Eclipse .classpath / .project?

143

Recientemente tuvimos un problema con un proyecto de Eclipse para uno de los miembros de nuestro equipo. Tomcat no estaba implementando JAR de la aplicación.

Eventualmente notamos que el .classpatharchivo Eclipse no era el mismo que para los miembros del equipo donde el proyecto estaba bien. Reemplazamos el .classpatharchivo con uno de un proyecto que estaba bien y la implementación de Tomcat se completó.

Sólo por curiosidad y para saber en qué buscar en el futuro si algo está mal, lo que está dentro de la .classpathy .projectarchivos. ¿Qué puedo agregar allí, qué significa todo esto?

Eclipse total
fuente
¿El archivo .classpath es específico de Java? Esta pregunta parece mayormente independiente del lenguaje, pero de esta respuesta parece que solo es relevante para Java.
Casey Kuball el

Respuestas:

144

Eclipse es un entorno de tiempo de ejecución para complementos. Prácticamente todo lo que ves en Eclipse es el resultado de complementos instalados en Eclipse, en lugar de Eclipse en sí.

La .projectplataforma central de Eclipse mantiene el archivo y su objetivo es describir el proyecto desde una vista genérica de Eclipse independiente del complemento. ¿Cómo se llama el proyecto? ¿A qué otros proyectos en el espacio de trabajo se refiere? ¿Cuáles son los constructores que se utilizan para construir el proyecto? (recuerde, el concepto de "compilación" no pertenece específicamente a proyectos Java, sino también a otros tipos de proyectos)

El .classpatharchivo es mantenido por la función JDT de Eclipse ( característica = conjunto de complementos). JDT contiene varios de estos archivos "meta" en el proyecto (vea el .settingsdirectorio dentro del proyecto); El .classpatharchivo es solo uno de ellos. Específicamente, el .classpatharchivo contiene información que la función JDT necesita para compilar correctamente el proyecto: las carpetas de origen del proyecto (es decir, qué compilar); las carpetas de salida (donde para compilar a ); y entradas de classpath (como otros proyectos en el espacio de trabajo, archivos JAR arbitrarios en el sistema de archivos, etc.).

Copiar a ciegas dichos archivos de una máquina a otra puede ser arriesgado. Por ejemplo, si se colocan archivos JAR arbitrarios en el classpath (es decir, archivos JAR que se encuentran fuera del espacio de trabajo y se hace referencia a ellos mediante un nombre de ruta absoluto), el .classpatharchivo se vuelve no portátil y debe modificarse para que se pueda portátil. Hay ciertas mejores prácticas que se pueden seguir para garantizar .classpathla portabilidad de los archivos.

Isaac
fuente
58
Como un extraño a todo esto, todo esto se traduce en "Eclipse de alguna manera logra hacer que todo sobre la gestión del espacio de trabajo del proyecto se convierta en un arte negro inescrutable que es demasiado difícil de entender para cualquiera".
Warren P
1
@Isaac: por curiosidad, en caso de que administre mi proyecto con gity Maven, lo que significa que tengo (por simplicidad) la carpeta "raíz" del repositorio (proyecto) con una sola srccarpeta (contiene un .javaarchivo simple "hola mundo" ) y del proyecto de pox.xmlarchivo - así pues, si he entendido bien, no hay necesidad (o tal vez incluso necesariamente hay necesidad) para mantener el: .project, .classpathy .settings/los archivos / carpetas también en el gitrepositorio (ie- ellos se suman a la .gitignorede archivos, por ejemplo)?
Guy Avraham
1
@GuyAvraham que depende de cómo trabaje con Eclipse y, específicamente, cómo inicializa un espacio de trabajo. ¿Comienza Eclipse en un nuevo espacio de trabajo y luego usa "importar proyectos Maven existentes"? si es así, tiene razón: ninguno de estos archivos es realmente necesario, ya que m2eclipsese encarga de eso por usted (o, al menos, eso es lo que se supone que debe estar haciendo).
Isaac
1
@buncis .projectno debería estar adentro .gitignore. En cuanto a .classpath- si se utiliza m2eclipsey el espacio de trabajo está configurado para actualizar los proyectos de Maven en el arranque, entonces usted debe estar bien con la adición .classpatha .gitignorepero no he probado yo mismo.
Isaac
1
@buncis solo corrige ese último comentario. Aparentemente, M2E hace un muy buen trabajo hoy configurando proyectos. Recientemente trabajé en una base de código de aproximadamente 150 proyectos Java de todo tipo. Eliminé .projecty .classpathde todos ellos y agregué a .gitignore. Todo funciona bien y no necesito actualizar continuamente estos archivos en Git con demasiada frecuencia.
Isaac
37

.project

Cuando se crea un proyecto en el espacio de trabajo, se genera automáticamente un archivo de descripción del proyecto que describe el proyecto. El único propósito de este archivo es hacer que el proyecto se describa a sí mismo, de modo que un proyecto que esté comprimido o lanzado a un servidor pueda recrearse correctamente en otro espacio de trabajo.

.classpath

Classpath especifica qué archivos de origen Java y archivos de recursos en un proyecto son considerados por el constructor de Java y especifica cómo encontrar tipos fuera del proyecto. El generador de Java compila los archivos fuente de Java en la carpeta de salida y también copia los recursos en ella.

Rupesh Yadav
fuente
11

La referencia completa no está disponible para los archivos mencionados, ya que son ampliables por varios complementos.

Básicamente, los archivos .project almacenan la configuración del proyecto, como la configuración del generador y la naturaleza del proyecto, mientras que los archivos .classpath definen la ruta de clase que se usará durante la ejecución. Los archivos classpath contienen src y entradas de destino que se corresponden con las carpetas del proyecto; las entradas con se utilizan para describir algún tipo de entradas "virtuales", como las bibliotecas JVM o en caso de dependencias de los complementos de eclipse (las dependencias normales del proyecto Java se muestran de manera diferente, usando una entrada src especial).

Zoltán Ujhelyi
fuente
3

Esta documentación de eclipse tiene detalles sobre las marcas en el .projectarchivo: El archivo de descripción del proyecto

Describe el .projectarchivo como:

Cuando se crea un proyecto en el espacio de trabajo, se genera automáticamente un archivo de descripción del proyecto que describe el proyecto. El propósito de este archivo es hacer que el proyecto se describa a sí mismo, de modo que un proyecto que esté comprimido o lanzado a un servidor pueda recrearse correctamente en otro espacio de trabajo. Este archivo siempre se llama ".project"

senpai
fuente