2009-07-04 14 views
15

¿Dónde puedo encontrar algunas prácticas recomendadas para escribir código Java de código abierto? No busco instrucciones sobre cómo escribir el código propiamente dicho, sino sobre la distribución, el empaquetado, la documentación y todos los demás aspectos además de los archivos .java.Mejores prácticas para escribir código abierto Java

Mi objetivo es tomar un módulo que he escrito y publicarlo como de código abierto.

Editar - Todavía faltan instrucciones directas y concretas sobre lo que debe contener el archivo comprimido. ¿Hay convenciones para esto, o debería elegir una estructura razonable?

Respuesta

6

Ver el libro de Karl Fogel http://producingoss.com/ - fuente disponible en línea.

+0

el libro se ve bien. Gracias. ¿Lo publicaste también en la lista de libros gratuitos en línea (otra pregunta) –

7

no estoy seguro de si va a haber un acuerdo universal sobre "mejores prácticas", pero los artículos que mencionas podría tener respuestas fáciles:

  1. distribución es fácil con java.net o Sourceforge. Publicará su código usando sus estándares,
  2. El empaquetado será de archivos ZIP. Es una buena idea crear un hash MD5 para que los clientes puedan verificar la integridad de sus descargas.
  3. Documentación - sí, mucho por favor. Tenga javadocs separados y una guía de referencia que muestre cómo usar sus cosas.
  4. Tiene un SVN público que permite acceso anónimo para que la gente pueda obtener y crear el último código por su cuenta.
  5. Tener un gestor de fallos que permite a las personas para informar sobre errores, nuevas características, etc.
  6. Establecer un wiki para la discusión, retroalimentación, etc.
  7. Maven se ha convertido en un estándar de código abierto. Ten un buen pom.xml para aquellos aventureros que quieran echar un vistazo y construir tu código.
  8. Las pruebas unitarias y la buena cobertura del código le ayudarán a demostrar su compromiso con la calidad.

Voy a tratar de pensar en más.

+0

Estructura del directorio dentro del archivo comprimido? ¿Cuál es el mejor lugar para hospedar esto? Preferiblemente, contendrá integrado wiki, bugtracker, sistema de construcción y me ahorrará el problema ... – ripper234

+0

Como es Java, supongo que tendrás un EAR o WAR estándar. Un JAR será una biblioteca o aplicación de escritorio. Lo que decida que se necesita cuando un cliente descarga y descomprime su código es la estructura correcta en ese caso. – duffymo

2

Creo que todo se reduce a la automatización del ciclo build-test-package-deploy. Idealmente, debería poder hacerlo con un solo clic (o con un solo comando de solicitud).

Personalmente, yo uso hormiga y definir un objetivo de desplegar el que hace lo siguiente

  1. Construye todos los artefactos
  2. Paquetes de los artefactos en una sola entrega (archivo .zip)
  3. descomprime el zip en un directorio local
  4. ejecuta los test de ese directorio local
  5. Subida el .zip en SourceForge

Habiendo hecho eso, el único paso manual es definir un nuevo lanzamiento a través del sitio web de sourceforge.

Obviamente, para que este procedimiento sea efectivo, debe estar infectado con la prueba: escribo pruebas para cada nueva función que estoy implementando.

+2

Me pregunto por qué esto obtuvo un voto: me parece totalmente irrelevante para mi pregunta. Sí, la implementación automática y las pruebas son buenas, pero estoy preguntando sobre los detalles de qué implementar, qué estructura de directorio debería ser, qué documentación proporcionar, etc. No cómo crear una secuencia de comandos de implementación. – ripper234

+1

Bueno, mencionas la distribución. Es un poco tangencial, pero aborda lo que tienes que hacer para liberarlo de manera efectiva. Creo que su comentario anterior define más lo que su pregunta original está pidiendo, y tal vez debería ser editado –

4

Si está buscando estructuras de directorios específicas, ¿por qué no mira los proyectos de código abierto existentes? Comenzaría con Jakarta Commons, que es un paquete muy usado.

Sin ninguna estadística que me respalde, diría que muchos proyectos usan una estructura de directorios similar a la especificada por Maven, incluso si no usan Maven en sí (y si puede pasar la curva de aprendizaje de Maven , es una buena herramienta de compilación el 90% del tiempo).

3

No estoy añadiendo que mucho, pero yo sugeriría lo siguiente:

Estructura de directorios

  • tratar de hacer el javadocs completa, módulos de fuente más abiertas o bibliotecas no tienen muchas comentarios javadoc. Genere la documentación javadocs y colóquela en un directorio como apidocs. Si corresponde en los javadocs, debe especificar quién permite llamar a una clase y en qué circunstancias debe llamarse a la clase/función. Los ejemplos de código pequeño tampoco duelen y vale la pena agregarlos.
  • Agregue un directorio "ejemplos" para ayudar los desarrolladores/usuarios utilizan/integran su módulo.
  • Agregue los archivos de licencia en la raíz de su estructura de directorios y asegúrese de que cada uno de sus archivos tenga una licencia encabezado.
  • añadir un archivo README en el directorio raíz de la distribución para información general y/o características específicas (enlace al software, autor, ayuda y apoyo, instalación instrucciones, etc.)
  • Por lo general, la fuente el código va a un directorio src y la documentación va a la carpeta docs.

Embalaje

  • Trate de distribuir su software en formatos apropiados (zip, tar.gz, DMG, exe, jar, etc.). Por ejemplo, para una aplicación web, tendría un zip, tar.gz, una guerra y tal vez un oído. Dependiendo del sitio web en el que se cargará, es posible que deba utilizar un formato de archivo como, por ejemplo, zip.
  • crear un instalador si se aplica o no demasiado tedioso

Publishing

  • Siga las instrucciones si procede a subir su módulo.
  • publicidad de su módulo (blog, foros, Twitter, etc.)

    Siempre realizar pruebas adicionales cuando los envases o subir, algo inesperado podría ocurrir (archivo que falta, la corrupción de archivos, etc.).

1

Si su proyecto se llama Foo, a continuación, la versión XY deben empaquetarse en Foo-XYzip y descomprimir a Foo-XY/.... (en otras palabras, la trayectoria de cada archivo en el archivo debe comenzar con Foo-XY /)

Tenga un Foo-X.Y/README.txt que contenga instrucciones básicas como un archivo de texto sin formato. Al menos debería contener información sobre dónde está la documentación completa ("consulte docs/index.html para documentación") así como instrucciones breves sobre el uso ("agregar lib/Foo-XYjar a su ruta de clases") y reconstruir instrucciones (" ejecuta "ant build" para regenerar bibliotecas en lib y javadoc en apidoc/").

Si su proyecto necesita bibliotecas adicionales para trabajar o compilar, entonces automatice eso. Es decir. o deja que esto sea un proyecto de Maven o asegúrate de que funcione con Ant Ivy.

Sugeriría tener el código fuente en src /, las bibliotecas compiladas en lib /, la documentación bajo docs/- esto es lo que la gente esperaría.

0

Uso Apache Maven 2 y obtendrá todos los artefactos que necesita ... con un simple comando "mvn sitio de paquete"

0

Yo sugeriría SourceForge (http://sourceforge.net) para su proyecto de alojamiento, ya que tienen una amplia variedad de herramientas (blogging, wiki, opciones de control de fuente, etc.) y todo es gratis.

En cuanto a qué poner en el zip/jar ... realmente depende del tipo de proyecto. Si se trata de una biblioteca reutilizable, sugeriría que en la raíz del archivo, tenga su licencia y su jar de distribución. Puede colocar dependencias en un subdirectorio lib, con su documentación en un subdirectorio docs.

Un ejemplo probablemente lo ayude a mejorar ... descargue el API de Jakarta Commons - Lang (http://commons.apache.org/lang) y mire lo que ofrecen.

Una de las otras respuestas fue usar Maven (http://maven.apache.org) para administrar su proyecto y también lo recomendaría, aunque si no lo ha usado antes puede tener un poco de curva de aprendizaje del desarrollador.

Buena suerte y espero que esto ayude un poco.

+0

Supongo que esto es un poco como la sugerencia de Thorbjorns, pero tendría un archivo separado para la fuente (o simplemente un enlace de control de fuente) .Ant e Ivy son también herramientas muy buenas, como él menciona, aunque no "empujan" un diseño de proyecto tan sugestivamente como Maven ... son más libres. – cjstehno

0

Libro: Practical API Design Confessions of a Java Framework Architec t (Jaroslav Tulach, 2008, Apress).

Además de las sugerencias en el libro, por favor haga una documentación adecuada (comentarios, javadocs) e incluya muestras de uso en algún lugar público (preferiblemente en un estilo wiki). El uso puede ser obvio para los desarrolladores pero no para los clientes (consulte JFreeChart como ejemplo).

Cuestiones relacionadas