跳转到主内容

程序员指南

这些只是程序员想配合的ERDDAP因为Java课堂需要知道。

获取源代码

 

  • GitHub 上的 Via 源代码 近期公开版本和开发中版本的源代码也可通过下列途径获取:GitHub 图像。 。 。 。 请读一下维基为这个项目。 如果您想要修改源代码 (并可能将修改纳入标准ERDDAP™分发) ,这是建议的方法。

ERDDAP™依赖关系

ERDDAP™使用 Maven 来装入代码依赖以及一些静态引用文件 (WEB-INF/ ref (英语).) 。 。 。 这是为了避免在寄存器中存储许多大文件. 您可以使用“ mvn 编译” , 这将获取依赖关系和校对文件 。 您也可以使用“ mvn 包” 来生成战争文件 。 您可以手动下载参考文件 :

注:默认情况下,Maven会缓存静态引用和测试数据存档下载,仅在下载新版本时才提取. 要全部跳过下载, 您可以将“ skipResourceDownload” 和/ 或“ skip TestResourceDownload” 属性设置为 Maven (例如,mvn - Dskip 资源下载包 ) 。 。 。 为强制提取,设置“-Ddownload.unpack= true”和“-Ddownload.unpack when Changed=false” 。

  • ERDDAP™及其子组件具有非常宽松,开源许可证,这样你就可以为任何目的使用和修改源代码,无论是盈利还是非营利. 请注意:ERDDAP™并且许多子组件拥有许可证,需要您确认您使用的代码来源。 见贷项。 。 。 无论是否需要,承认所有这些贡献者只是好的形式。

  • 对其它项目使用代码

欢迎您使用ERDDAP™用于其他工程的代码,警告该代码可以并且将会改变。 我们不承诺支持我们代码的其他用途. Git 和 GitHub 将是您处理这个问题的主要解决方案 -- Git 允许您将我们的更改合并到您的更改中。 在很多情况下,你可能会 试图使用部分ERDDAP™在你的工程中,我们认为你会发现 安装和使用更容易ERDDAP™同样, 然后写其他使用ERDDAP服务。 你可以自己设ERDDAP™在一两个小时后就安装了 你可以自己设ERDDAP™几天后以抛光方式安装 (取决于数据集的数量和复杂程度) 。 。 。 。 但是,黑进部分ERDDAP™可能要花上几周时间 (和数月捕捉微妙) 然后您将失去后续修改和错误修正的能力ERDDAP™释放 我们 (很明显) 认为使用ERDDAP™也让你ERDDAP™安装可公开访问。 然而,在某些情况下,你可能不想做你的ERDDAP™安装可公开访问。 那么,你的服务可以进入和使用你的私人ERDDAP™你的客户不需要知道ERDDAP™。 。 。 。

半径

或者,还有一种方法,你可能会发现有用 在探索之间ERDDAP代码和使用ERDDAP™作为一个独立的网络服务: 在EDD 类中,有一个静态方法,可以让你制作一个数据集实例 (基于datasets.xml) 数字 : '一个来自数据集' xml 数据 (字符串 tDatasetID) 返回 EDD表或EDDGrid数据集。 既然如此,你可以打电话 “ make NewFileForDap查询 (字符串用户DapQuery、字符串目录、字符串文件Name、字符串文件 类型Name) `让实例制作特定文件的数据文件Type,并附上用户查询的结果。 因此,这是一个简单的使用方式ERDDAP正如客户端会使用ERDDAP™网络应用程序。 但是这个方法在你的Java程序并绕过像Tomcat这样的应用程序服务器的需要. 我们在EDD Table和EDDGrid子类,所以您可以在源代码中看到所有这些类的例子。

发展环境

  • 有配置用于洁蒂,你好吗?插头在GitHub中,虽然预计发布会运行在Tomcat中.

  • 可选 数字 : 设置ERDDAP™在汤姆卡特 从ERDDAP™我们强烈建议你们遵守标准安装指令安装Tomcat,然后安装ERDDAP™在Tomcat的网络应用目录中。 除其他事项外,ERDDAP™被设计为安装在Tomcat的目录结构中,并期望Tomcat提供一些.jar文件.

  • ERDDAP™不需要特定的IDE (Chris主要使用Visual Studio代码,Bob使用EditPlus) 。 。 。 我们不使用Eclipse、Ant等;我们也不提供ERDDAP- 与他们相关的支持。 工程确实使用了马文.

  • 我们使用一个批量文件删除源树中所有 . class 文件,以确保我们有一个干净的编译 (带Javac) 。 。 。 。

  • 目前我们使用领养的javac jdk-21.0.3+9来编译gov.noaa.pfeg.coastwatch.Testall. (它有链接到几个类,否则不会编译) 并进行测试。 出于安全考虑,几乎总是最好使用最新的版本。Java21和汤姆卡特10。

    • 当运行 javac 或 java 时, 当前目录为 tomcat/webapps/erddap/WEB-INF 。

    • 我们的Javac和Java阶级是 类;./././lib/servlet-api.jar;lib/*

    • 所以,你的Javac指挥线 会是类似的东西 `javac-编码UTF-8-cp类;././lib/servlet-api.jar;lib/*类/gov/noaa/pfel/coastwatch/TestAll.java'

    • 你的Java指挥线会像... java-cp班;./././lib/servlet-api.jar;lib/*-Xmx4000M-Xms4000M /政府/noaa/pfel/海岸监视/试验 备选:你可以添加`-动词:gc',它说明:Java打印垃圾收集统计数据。

    • 如果测试 所有编译,一切ERDDAP™已经汇编了需求。 几门课是编的 不需要用于ERDDAP™。 。 。 如果编译TestAll成功,但不编译一些类,那类就不需要了. (有一些未完成/未使用的课程。)

  • 在少数情况下,我们使用第三方源代码而不是.jar文件 (特别针对DODS) 并稍作修改,以避免出现与Java21. 我们经常作出其他微小修改。 (目标DODS) 由于其他原因。

  • 大多数班级在其相关的src/test文件中都有测试方法. 您可以使用“mvn测试”命令进行JUnit测试。 这将下载从最近发布的测试中依赖的数个数据zip文件ERDDAP/埃尔达普 测试。 。 。 。 。   注:Maven缓存下载,但会解析每次执行中下载的档案,这需要时间。 跳过下载 并解密测试数据档案,您可以指定“ skip Test RequestDownload” 属性给 Maven (例如,mvn - Dskip TestResource' 软件包 ) 。 。 。 。

重要类

如果你想看看源代码 并试图找出如何ERDDAP™工作,请。

  • 密码有Java医生评论,但Java医生还没有生成。 自由产生它们吧

  • 最重要的班级 (包括以下所述) 在政府/noaa/pfel/erddap范围内。

  • 那个ERDDAP™类有最高级别的方法。 它扩展了HttpServlet.

  • ERDDAP™将请求转到以下类别:EDDGrid或 EDD表,代表单个数据集。

  • EDStatic 拥有大部分静态信息和设置 (例如,从设置.xml和消息.xml文件) 并提供静态服务 (例如,发送电子邮件) 。 。 。 。

  • EDDGrid和 EDDTable 子类解析请求,从子类特定方法获取数据,然后为响应格式化数据.

  • EDDGrid子类将数据推入 GridData 访问器 (网格数据的内部数据容器) 。 。 。 。

  • EDDTable子类将数据推入TableWriter子类,这些子类将数据写入一个特定的文件类型上飞.

  • 其他课程 (例如,低级班级) 也是很重要的,但你不太可能 努力改变它们。  

代码贡献

  • GitHub 问题 如果您愿意贡献但没有项目,请参见列表GitHub 问题,其中许多都是你可以承担的项目。 如果你想就一个问题开展工作,请自行指定,向其他人表明你正在研究的问题。 GitHub问题是讨论任何问题的最佳场所,以便开展有关该问题的工作。

  • 若您想做出改变,GitHub 问题表示您打算作出的更改。 然后,一旦修改完成,就发出拉动请求,请求合并. 共同变化包括:

    • 您想要写另一个子类EDDGrid或 EDD Table 处理另一个数据源类型。 如果是这样,我们建议你们找到最接近的现有子类,并使用该代码作为起点.

    • 您想要写入另一个保存 As_ FileType_ 方法 。 如果是的话,我们建议您在其中找到最近的保存 As_ FileType_ 方法EDDGrid或 EDD Table 并使用该代码作为起点。

这些情形的优点是 你写的代码是自成一体的 你不需要知道所有细节ERDDAP'内经曰. 我们很容易把密码输入ERDDAP。 。 。 请注意,如果您确实提交了代码,许可证需要与该代码兼容。ERDDAP™ 许可证 (例如,阿帕奇语Name, (中文).BSD 软件,或麻省理工学院-X) 。 。 。 我们将列出你的贡献贷方。 。 。 。

  • 如果您有一个上面没有覆盖的特征,您希望添加到ERDDAP,建议首先在GitHub 讨论。 。 。 对于重大特点/改变,技术委员会将讨论这些特点,并决定是否核准将其添加到ERDDAP™。 。 。 。

判断您的代码贡献

如果您想要提交要包含在其中的代码或其他修改ERDDAP这是伟大的。 你的贡献必须符合某些标准才能被接受。 如果你遵循以下准则,你将大大增加你的贡献被接受的机会。  

  • 那个ERDDAP™项目由NATD管理 (NOAA任命的技术主任) 由技术委员会提供投入。 从2007年起 (开始ERDDAP) 2022年,鲍勃・西蒙斯 (也是创始人-领导者) 。 。 。 从2023年1月开始,这就是克里斯·约翰. 基本上,NATD负责ERDDAP,所以S/他对决定有最后的发言权ERDDAP™代码,尤其是关于设计以及是否接受给定的拉动请求。 一定是因为效率的原因 (这对Linus Torvalds和Linux很有用) 部分出于安全原因: 必须有人告诉IT安全人员 他/他负责代码的安全性和完整性.  

  • NATD不能保证他接受你的代码 如果一个项目没有如我们所希望的那样成功 如果无法挽救的话 NATD就不会把该项目列入ERDDAP™分发。 请不要感到难过。 有时项目会不尽如人意 它发生在所有软件开发者身上. 如果你遵循以下准则,你就会大大增加成功的机会.  

  • 如果这些变化具有普遍的利益和效用,那是最好的. 如果代码是您的组织特有的, 最好保持一个单独的分支ERDDAP™供你们使用。 Axiom这样做。 幸运的是,吉特让这件事变得容易了. NATD希望保持对ERDDAP,不允许它成为一个厨房水槽项目,每个人都在其中为其项目添加一个定制的特性.  

  • 跟着Java《守则公约》。 一般来说,你的代码应该质量好,应该遵循原来的Java守则公约: 将. class 文件放在目录结构的适当位置, 给. class 文件一个适当的名称, 包括 properJavaDoc 注释,在代码的每一段开头包含//注释,缩进4个空格 (没有标签) ,避免行 >80字符等. 传统改变, 源代码并不总是完全更新。 当出现疑问时,将代码与公约而不是现有的代码相匹配。

  • 使用描述类,方法和可变名称. 这让其他人更容易阅读代码.  

  • 避免奇异的代码。 从长远来看,你或其他人必须找出代码才能维持. 所以,请使用简单的编码方法,这样对其他人更容易 (包括你的未来) 找出来。 很明显,如果有真正的优势 使用一些花哨Java编程功能,使用它,但大量记录你做了什么,为什么,以及它是如何工作的.  

  • 在你开始之前跟技术委员会合作 如果你想让您的代码更改进入ERDDAP™技术委员会绝对会想在修改代码之前 谈谈你要做什么和怎么做 这样我们就可以避免你做出NATD最终不接受的改变. 在你做这项工作时,NATD和技术委员会愿意回答问题,以帮助你找出现有的代码和 (总计) 如何解决您的项目。  

  • 独立工作 (尽可能多) 你开始后 与上述"与技术委员会合作"相对,在项目开始后,NATD鼓励您尽可能独立工作. 如果NATD要告诉你几乎所有的事情 回答很多问题 (特别是那些你可以通过阅读文档或代码来回答的) 那样你的努力就不是 NATD的节省时间了 他也可以自己做 这是神话人物月问题。 当然,我们还是应该沟通。 最好能定期看到你的工作进展,以确保项目走上正轨。 不过你越能独立工作 (在技术委员会商定手头的任务和一般办法之后) - 越好越好  

  • 避开虫子。 如果一个错误在发布前没有被抓住,会对用户造成问题 (最多不过) ,返回错误的信息 (最糟的时候) ,是一个blot上ERDDAP名声远扬 将持续过时ERDDAP™设施使用年限。 十分努力地避免虫虫. 一部分是写干净的代码 (所以更容易看到问题) 。 。 。 这部分是写作单位测试. 其中一部分是写代码时对避虫的恒定态度. 不要让NATD后悔 加上你的代码ERDDAP™。 。 。 。  

  • 写出单位测试或测试. 对于新代码,您应该在测试文件中写入JUnit测试. 请至少写出一种个体测试方法, 彻底测试您所写的代码, 并将其添加到类的“ JUnit” 测试文件中, 以便自动运行 。 单位 (及有关事项) 测试是捕虫的最好方法之一 首先,从长远来看 (随着其他事物的变化ERDDAP™) 。 。 。 正如鲍勃所说, "单位测试让我晚上睡觉。"  

  • 让NATD容易理解并接受你拉力请求中的变动. 其中一部分是写一个单位测试方法 (编号) 。 。 。 其中一部分是限制您修改代码的一节 (或一个类别) 如果可能的话。 NATD不会接受任何拉动请求,在整个代码中会有数百个修改. NATD告诉IT安全人员,他/他负责代码的安全性和完整性. 如果有太多的改变或者它们太难想出,那么就很难核实这些改变是正确的,并且不要引入错误或安全问题.  

  • 简单点 你代码的一个好的总主题是:保持简单. 简单的代码对其他人来说很简单 (包括你的未来) 阅读和维护。 NATD很容易理解从而接受.  

  • 承担你代码的长期责任 从长远来看,你最好承担持续的责任 维持你的代码,回答关于它的问题 (例如,ERDDAP™谷歌集团) 。 。 。 正如一些作者指出,代码既是负债也是资产。 如果将来发现一个虫子,最好还是把它修好 因为没有人比你更了解你的密码 (也是为了防止虫子出现) 。 。 。 NATD并不是要求坚定承诺提供持续的维护. NATD只是表示,做维修工作会非常感激.