.classpath y .project: ¿verificar el control de versiones o no?

87

Estoy ejecutando un proyecto java de código abierto que consta de varios módulos en un árbol de dependencias. Todos esos módulos son subdirectorios en un repositorio de subversión. Para los recién llegados a nuestro proyecto, es mucho trabajo configurar todo eso manualmente en eclipse.

No todos nuestros desarrolladores usan eclipse. Sin embargo, estamos considerando simplemente verificar los archivos .classpath y .project para ayudar a los recién llegados a comenzar. ¿Es esta una buena idea? ¿O eso conduciría a conflictos constantes en esos archivos? ¿Existe una forma alternativa de hacer que el proyecto sea fácil de configurar en eclipse?

amarillion
fuente

Respuestas:

65

Definitivamente sí, como dije en " ¿Mantienes los archivos de tu proyecto bajo control de versiones? "

"Cárgalo, configúralo, listo".

Pero ... esto es realmente cierto solo para la configuración reciente de Eclipse3.5, donde las rutas de compilación admiten rutas relativas :

La ruta de construcción admite rutas relativas


Y Eclipse3.6 sería mejor, ya que admite rutas relativas para variables de ruta en Linked Resources:

variable de ruta con ruta relativa
(desde 3.6M5)

VonC
fuente
2
Vaya, no sabía que agregaron esto ... Nos habría ahorrado un poco de dolor
Uri
Parece que las imágenes asociadas con esta respuesta están fuera de línea.
vkraemer
1
@vkraemer: cierto. Ahora he restaurado esas dos imágenes, la primera proviene de archive.eclipse.org/eclipse/downloads/drops/R-3.5-200906111540/… y la segunda de download.itemis.com/mirror/eclipse/R-3.6 -201006080911./… .
VonC
17

Definitivamente no, generalmente es una idea terrible distribuir archivos de proyecto a través de subversión. Especialmente porque alguien podría modificarlos de alguna manera extraña. Una buena página en la documentación del proyecto es una idea mucho mejor. Nuestro proyecto también tiene muchos módulos y una configuración compleja. Hemos creado una página de confluencia que describe cómo empezar con el proyecto en cada IDE popular: IntelliJ, Eclipse, NetBeans. Un archivo README en Subversion contiene la misma información.

Bozhidar Batsov
fuente
31
No puedo estar de acuerdo. Desde mi experiencia, es bueno registrar estos archivos para que el pago sea lo más fácil posible. ¿Alguien podría cambiarlos de alguna manera extraña? Alguien podría cambiar su código de alguna manera extraña ...
Arne Deutsch
Arne, deberías hacer de eso una respuesta, no un comentario.
amarillion
5
Los archivos de proyecto para cualquier IDE en realidad no son parte de ningún proyecto; si desea distribuirlos, vaya, adjúntelos al artículo que mencioné. Generalmente, todos en un equipo pueden modificar los archivos en el repositorio, pero no todos pueden adjuntar archivos nuevos a nodos de documentación importantes, etc. Es muy fácil para alguien olvidar ignorar la ruta de clases y los archivos del proyecto y enviarlos cuando no debería. Incluso si los mantiene en subversión, ciertamente debería mantenerlos en algún lugar al lado ...
Bozhidar Batsov
8
-1, no podría estar más en desacuerdo. La configuración de los proyectos es una parte crucial del trabajo diario con un proyecto. Las desventajas de verificar accidentalmente una configuración incorrecta son mucho menores que las ventajas de mantener a todos automáticamente actualizados. Después de todo, siempre puede volver fácilmente a versiones anteriores.
Michael Borgwardt
7
Todo el mundo tiene derecho a opinar. De hecho, nunca crearía un proyecto que dependa del sistema de proyectos de Eclipse (o de cualquier otro IDE) en primer lugar ... Maven es la herramienta de comprensión de proyectos definitiva y deja obsoletas las configuraciones específicas de IDE. Por cierto, es poco probable que el momento de darse cuenta de que algo está mal con la configuración actual y volver a la revisión anterior difiera del momento de ajustar las nuevas configuraciones usted mismo. Al menos en mi empresa, todos los miembros del equipo reciben una notificación por correo electrónico si se requiere la intervención del usuario después de cambios más importantes.
Bozhidar Batsov
10

Voto no, pero eso es porque generalmente generaría estos archivos desde maven

Goibniu
fuente
m2e hace la mayoría, pero no todo, por usted
Junchen Liu
6

En mi experiencia, excluyendo los casos limitados en los que están involucradas configuraciones puramente locales, todo debería estar en control de fuente. La ley del control de la fuente es que se debe esperar que todo lo que se empuja hacia adentro funcione para quienes se retiran. Desafortunadamente, el eclipse a menudo hace que cosas como esta estén en .classpath:

    <classpathentry kind="con" 
      path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/Java SE 7"/>

Entonces, en mi Mac esto funciona, y tal vez alguien en una Mac tenga el mismo JRE, pero esto no funcionará para nadie más.

Además, no hay una forma fácil de evitar esto. Eclipse siempre agregará eso. QUIERO tener el archivo .classpath allí, porque hay algunos JAR de terceros en nuestra carpeta lib donde nos preocupamos por el control de versiones, así que los dejamos allí para que los nuevos desarrolladores no tengan que obtenerlos . Nos estamos moviendo a un sistema administrado, pero aún tenemos las dependencias administradas + no administradas registradas. Esto significa que todos los desarrolladores solo tienen que asegurarse de que haya dos directorios en sus .classpaths. Pero es mejor que tener que arreglar su JRE cada vez que extrae y tener un cambio en su .classpath cada vez que se compromete.

Sin embargo, Eclipse hace algunas otras cosas buenas por ti. El archivo .project generalmente será el mismo en todas las instancias, así que inclúyalo. Pero lo mejor del control de fuente para eclipse es la configuración de Ejecutar configuraciones. En la pestaña "Común" del cuadro de diálogo Ejecutar configuraciones, guarde las configuraciones para que aparezcan para sus colegas en las listas de favoritos para Depurar y ejecutar. Para mí, un montón de .launcharchivos van en el .settingsdirectorio, así que todos podemos usarlos.

Entonces digo: el .settingsdirectorio entra en el control de fuente para las configuraciones de inicio (excepto * .prefs)

.classpath se queda fuera

.project entra.

Zak Patterson
fuente
¿Es este el caso incluso cuando se utilizan entornos de ejecución para JRE / JVM?
Mr_and_Mrs_D
5

Verificaría estos archivos para que el inicio de los nuevos usuarios sea lo más fácil posible. En el mejor de los casos, el usuario debería verificar el proyecto y debería poder ejecutarlo sin conocimientos adicionales. Para estos archivos, las reglas son las mismas que para otros archivos del proyecto: manipúlelos con cuidado. No debe colocar parches absolutos en el código fuente, ni tampoco en los archivos de configuración.

Si los archivos se registran de manera que el proyecto se ejecute desde cero, no debería haber muchas fuerzas para cambiarlos.

Arne Deutsch
fuente
5

Le recomendaría que verifique los archivos en subversión SI no contienen rutas absolutas y otros datos que los vincularían directamente al entorno de un solo desarrollador.

Si los archivos contienen rutas absolutas y similares, un archivo README sería una mejor opción.

vkraemer
fuente
2

Sí, definitivamente regístrelos, pero asegúrese de documentar las dependencias de las rutas y evitar las rutas absolutas si es posible.

Si no los registra, entonces cualquiera que revise el proyecto deberá volver a crear todas esas configuraciones, lo cual es molesto y potencialmente propenso a errores.

Algunas configuraciones complejas pueden manejarse mejor con un script para generar estos archivos, pero por lo general es mejor simplemente registrarlos.

Christopher Barber
fuente