编写开源Java的最佳实践

编写开源Java的最佳实践,java,open-source,Java,Open Source,在哪里可以找到编写开源Java代码的最佳实践? 我不是在寻找如何正确编写代码的方向,而是在分发、打包、文档以及除.java文件之外的所有其他方面 我的目标是将我编写的模块作为开源发布 编辑-我仍然缺少关于zip文件应该包含哪些内容的直接、具体的说明。这方面是否有惯例,或者我是否应该选择一些合理的结构?请参阅卡尔·福格尔的书-在线提供的资料来源。我不确定是否会对“最佳实践”达成普遍共识,但您提到的项目可能有简单的答案: 使用java.net或Sourceforge可以轻松发布。您将使用他们的标准发

在哪里可以找到编写开源Java代码的最佳实践? 我不是在寻找如何正确编写代码的方向,而是在分发、打包、文档以及除.java文件之外的所有其他方面

我的目标是将我编写的模块作为开源发布


编辑-我仍然缺少关于zip文件应该包含哪些内容的直接、具体的说明。这方面是否有惯例,或者我是否应该选择一些合理的结构?

请参阅卡尔·福格尔的书-在线提供的资料来源。

我不确定是否会对“最佳实践”达成普遍共识,但您提到的项目可能有简单的答案:

  • 使用java.net或Sourceforge可以轻松发布。您将使用他们的标准发布代码
  • 包装将是压缩文件。创建MD5散列是一个好主意,它可以让客户端检查下载的完整性
  • 文件-是的,请填写。有单独的javadocs和一个说明如何使用你的东西的参考指南
  • 拥有一个允许匿名访问的公共SVN,这样人们就可以自己获取和构建最新的代码
  • 有一个bug追踪器,允许人们报告bug、新特性等
  • 为讨论、反馈等建立wiki
  • Maven已经成为某种开源标准。为那些想签出并构建代码的有冒险精神的人准备一个好的pom.xml
  • 单元测试和良好的代码覆盖率将有助于证明您对质量的承诺

  • 我将尝试考虑更多。

    我认为这一切归结为自动化构建测试包部署周期。理想情况下,您应该能够通过单击(或使用单个提示命令)完成此操作

    就我个人而言,我使用ant并定义了一个部署目标,它执行以下操作

  • 构建所有工件
  • 将工件打包为单个可交付文件(.zip文件)
  • 将.zip解压到本地目录中
  • 从该本地目录运行测试套件
  • 将.zip上载到sourceforge
  • 完成这项工作后,唯一的手动步骤是通过sourceforge的网站定义新版本


    显然,为了使这个过程有效,您必须测试感染-我为我正在实现的每个新特性编写测试

    如果您正在寻找特定的目录结构,为什么不看看现有的开源项目呢?首先,这是一个被大量使用的软件包


    在没有任何统计数据支持的情况下,我会说,许多项目使用与Maven指定的目录结构类似的目录结构,即使它们不使用Maven本身(如果您能够通过Maven学习曲线,它在90%的时间里都是一个很好的构建工具)。

    我没有添加太多,但我建议如下:

    目录结构

    • 尽量使javadoc完整,大多数开源模块或库没有太多javadoc注释。生成javadocs文档并将其放置在apidocs等目录中。如果适用于javadocs,您应该指定允许谁调用类,以及在什么情况下应该调用类/函数。小的代码示例也没有坏处,值得添加
    • 添加“示例”目录以提供帮助 开发人员/用户使用/集成 你的模块
    • 在的根目录下添加许可证文件 您的目录结构并确保 您的每个文件都有一个许可证 标题
    • 在根目录下添加自述文件 发布的目录 一般信息和/或 详细信息(指向软件的链接, 作者、帮助和支持、安装 说明等)
    • 通常源代码进入src目录,文档进入docs文件夹
    包装

    • 尝试将软件分发到适当的格式(zip、tar.gz、dmg、exe、jar等)。例如,对于一个web应用程序,我会有一个zip、tar.gz、一个war,也许还有一个ear。根据您要上载到的网站,您可能需要使用存档格式,如zip
    • 如果适用或不太繁琐,请创建安装程序
    出版

    • 如果适用,请按照说明上载模块

    • 宣传您的模块(博客、论坛、Twitter等)

      在打包或上载时,请始终进行其他测试,否则可能会发生意外情况(文件丢失、存档损坏等)


    如果您的项目名为Foo,那么X.Y版本应该打包在Foo-X.Y.zip中,并解压缩到Foo-X.Y/。。。。(换句话说,存档中每个文件的路径应以Foo-X.Y/开头)

    将包含基本指令的Foo-X.Y/README.txt作为纯文本文件。它至少应该包含有关完整文档所在位置的信息(“请参阅docs/index.html以获取文档”)以及有关用法的简要说明(“将lib/Foo-X.Y.jar添加到类路径”)和重建说明(“运行“ant build”以在lib中重新生成库,并在apidoc/中重新生成javadoc”)

    如果您的项目需要额外的库来工作或编译,那么请将其自动化。也就是说,要么让这成为一个Maven项目,要么确保它与Ant Ivy一起工作


    我建议将源代码放在src/下,将构建的库放在lib/下,将文档放在docs/下-这是人们所期望的。

    使用,您将获得所需的所有工件。。。使用一个简单的命令“mvn package site”

    我建议您将SourceForge()用于项目托管,因为他们有各种各样的工具(博客、wiki、源代码管理选项等),而且都是免费的

    至于在zip/jar中放什么。。。这实际上取决于项目的类型。如果它是一个可重用的库,我建议在归档文件的根目录中,有您的许可证和分发jar。你可以把