メインコンテンツへスキップ

プログラマガイド

これらは、一緒に仕事をしようとするプログラマだけであるERDDAPお問い合わせJavaクラスを知る必要があります。

ソースコードの取得

 

  • GitHubのソースコード 最近の公開バージョンと開発バージョンのソースコードも利用できます。GitHubでお問い合わせ お問い合わせメニューそのプロジェクトのために。 ソースコードを変更したい場合 (そしておそらく標準に組み込まれる変更があるERDDAP™コンテンツ) おすすめのアプローチです。

ERDDAP™依存関係

ERDDAP™Maven を使用してコードの依存関係や静的な参照ファイルを読み込む (WEB-INF/リフ) お問い合わせ リポジトリに多くの大きなファイルを保存しないようにします。 mvn compile を使うと、依存関係と ref ファイルが取得されます。 また、 mvn パッケージ を使用して、war ファイルを生成することもできます。 ref ファイルを手動でダウンロードできます。

注意: デフォルトでは、Maven は静的参照をキャッシュし、データアーカイブのダウンロードをテストし、新しいバージョンのダウンロード時にのみそれらを抽出します。 完全にダウンロードをスキップするには、skipResourceDownload および/または skipTestResourceDownload プロパティを Maven に設定できます。 (例: mvn -DskipResourceダウンロードパッケージ ツイート) お問い合わせ 抽出を強制するには、-Ddownload.unpack=true-Ddownload.unpackWhenChanged=false` を設定します。

  • ERDDAP™そして、そのサブコンポーネントは非常にリベラルで、オープンソースを持っていますライセンスそのため、任意の目的のためにソースコードを使用および変更することができます。 非営利または非営利団体。 注意:ERDDAP™多くのサブコンポーネントは、使用しているコードのソースを認識する必要があるライセンスを持っています。 お問い合わせクレジットお問い合わせ 必須かどうかにかかわらず、これらすべての貢献者を認めるのは良いフォームです。

  • 他のプロジェクトにコードを使用する

部品の使用を歓迎していますがERDDAP™他のプロジェクトのためのコードは、コードが変更できると警告されます。 当社のコードの他の使用を支持することを約束しません。 Git と GitHub は、この -- Git を扱うための主要なソリューションです。これにより、変更をお客様の変更にマージすることができます。 部品の使用を和らげるかもしれない多くの状況のためにERDDAP™あなたのプロジェクトでは、インストールと使用がはるかに簡単になると思いますERDDAP™つまり、 そして、使用する他のサービスを書くERDDAPサービス 自分で設定できますERDDAP™インストールは1時間または2時間で残します。 自分で設定できますERDDAP™数日の洗練された方法でインストール (データセットの数と複雑性に応じて) お問い合わせ しかし、部品のハッキングERDDAP™あなた自身のプロジェクトのために数週間かかる可能性が高い (微妙なものを捕獲する月) そして、その後から変更やバグ修正を組み込む能力を失いますERDDAP™リリース お問い合わせ (明らかに) 利用するメリットはたくさんありますERDDAP™つまり、ERDDAP™一般にアクセス可能なインストール。 しかし、ある状況では、自分を作ろうとしないかもしれないERDDAP™一般にアクセス可能なインストール。 その後、あなたのサービスは、あなたのプライベートにアクセスし、使用することができますERDDAP™クライアントがわからないことERDDAP™お問い合わせ

ハーフウェイ

または、掘りとの間の途中で有用であるかもしれない別のアプローチがありますERDDAP'コードと使用ERDDAP™スタンドアローンのウェブサービスとして: EDDクラスでは、データセットのインスタンスを生成できる静的なメソッドがあります。 (仕様に基づくdatasets.xml) : : : oneFromDataset Xmlの (文字列 tDatasetID) EDDTable のインスタンスを返すかEDDGridデータセット。 そのインスタンスを考えれば、コール\ makeNewFileForDapQuery (文字列 userDapQuery, 文字列 dir, 文字列 fileName, 文字列 file タイプ名) は、ユーザクエリから結果を持つ、特定の fileType のデータファイルを作成するインスタンスを指示します。 したがって、これは使いやすい方法ですERDDAPクライアントがデータを要求し、応答でファイルを取得する方法ERDDAP™ウェブアプリケーション。 しかし、このアプローチは、あなたの内部で動作しますJavaプログラムとTomcatのようなアプリケーションサーバーの必要性を迂回します。 EDDTable のユニットテストの多くにこのアプローチを使用します。EDDGridサブクラスなので、すべてのクラスのソースコードでこの例を見ることができます。

開発環境

  • 設定がありますジェットティーそして、ドッカーGitHub では、リリースは Tomcat で実行する予定です。

  • オプション : : : セットアップERDDAP™で トムカット\ お問い合わせERDDAP™主にTomcatで動くサーブレットであることが意図されているので、標準に従うことを強くお勧めしますインストール手順Tomcatをインストールし、インストールするERDDAP™Tomcat の webapps ディレクトリに。 その他にもERDDAP™Tomcat のディレクトリ構造にインストールされ、Tomcat が .jar ファイルを提供することを期待するように設計されました。

  • ERDDAP™特定のIDEを必要としません (Chris は主に Visual Studio のコード、Bob によって使用される EditPlus を使用します) お問い合わせ Eclipse、Antなどは使用しておりません。ERDDAP-関連サポート プロジェクトは Maven を使用します。

  • ソースツリー内のすべての .class ファイルを削除するバッチファイルを使用して、クリーンなコンパイルを確実にします。 (ジャグジー付き) お問い合わせ

  • 現在、Gov.noaa.pfeg.coastwatch.TestAllをコンパイルするために、Adminiumのjavac jdk-21.0.3+9を使用しています。 (コンパイルしないクラスをいくつかリンクしています) テストを実行します。 セキュリティ上の理由から、最新バージョンを使用するのはほぼ常に最善ですJava21 と Tomcat 10.

    • javac または java を実行すると、現在のディレクトリは tomcat/webapps/erddap/WEB-INF です。

    • 私たちのjavacとJavaのクラスパスは classes;../.././lib/servlet-api.jar;lib/*

    • そのため、javacコマンドラインは以下のようなものになります\ 「Javac -encoding UTF-8 -cp クラス;../../../lib/servlet-api.jar;lib/* クラス/gov/noa/pfel/coastwatch/TestAll.java」

    • java コマンドラインは、 java -cp クラス;.././../lib/servlet-api.jar;lib/* -Xmx4000M -Xms4000M クラス/gov/noa/pfel/coastwatch/TestAll オプション: -verbose:gc を追加できます。Javaゴミ収集統計を印刷する。

    • 試験の場合 すべてのコンパイル、すべてERDDAP™ニーズをコンパイルしました。 必要でないクラスはコンパイルされます。ERDDAP™お問い合わせ TestAll のコンパイルが成功したが、いくつかのクラスをコンパイルしていない場合、そのクラスは必要ありません。 (未完成・未使用のクラスもあります。)

  • いくつかのケースでは、.jarファイルではなく3rdパーティソースコードを使用します。 (特にDODS) 問題のコンパイルを避けるためにそれらを少し修正しましたJava21. 私たちはしばしば他のわずかな変更をしました (お知らせDODS) その他の理由

  • ほとんどのクラスでは、関連する src/test ファイルにテスト方法があります。 JUnit のテストを mvn test コマンドで実行できます。 これは、テストが最新のリリースから頼るデータのいくつかのzipファイルをダウンロードしますERDDAPログイン テスト.\ の   注意: Maven はダウンロードをキャッシュしますが、各実行時にダウンロードしたアーカイブを解凍します。 ダウンロードをスキップするには テストデータのアーカイブを解凍すると、skipTestResourceDownload プロパティを Maven に指定できます。 (例: `mvn -DskipTestResourceダウンロードパッケージ ツイート) お問い合わせ

重要なクラス

ソースコードを調べてみると、どのようにしてみるかERDDAP™お問い合わせ

  • コードはJavaドキュメントコメント, しかし、JavaDocs は生成されていない。 自由に生成してください。

  • 最も重要なクラス (以下に述べたものを含む) は gov/noa/pfel/erddap にあります。

  • ザ・オブ・ザ・ERDDAP™クラスは最高レベルのメソッドを持っています。 HttpServlet を拡張します。

  • ERDDAP™サブクラスのインスタンスへのリクエストを渡すEDDGridまたは、個々のデータセットを表すEDDTable。

  • EDStaticは静的情報と設定のほとんどを持っています (例: setup.xml と message.xml ファイルから) そして静的なサービスを提供します (例:メール送信) お問い合わせ

  • EDDGridEDDTable サブクラスはリクエストを解析し、サブクラス固有のメソッドからデータを取得し、レスポンスのデータをフォーマットします。

  • EDDGridサブクラスはGridDataAccessorにデータをプッシュ (グリッドされたデータのための内部データコンテナ) お問い合わせ

  • EDDTable サブクラスは、データを TableWriter サブクラスにプッシュし、特定のファイルタイプのオンザフライにデータを書き込みます。

  • その他のクラス (例:低レベルクラス) 重要であるが、それらを変更するために働く可能性が低いです。  

コード投稿

  • GitHub の問題 貢献したいが、プロジェクトを持っていない場合は、リストを参照してくださいGitHub の問題、あなたが取ることができるプロジェクトである多く。 問題に取り組む場合は、それを自分で割り当てて作業している他の人に指示してください。 GitHubの問題は、その問題に関する作業を進める方法についての質問について議論するのに最適な場所です。

  • あなたが作ってみたいな変更は、以下の一般的な例の1つです。GitHub の問題あなたが作るつもり変更を示す. 変更が完了したら、マージをリクエストするプルリクエストをします。 一般的な変更は次のとおりです。

    • 別のサブクラスを記述したいEDDGridまたは別のデータソースタイプを処理するEDDTable。 もしそうなら、既存のサブクラスが最も近いものを見つけて、そのコードを出発点として使うことをおすすめします。

    • 別の saveAs_FileType_ メソッドを記述したい。 もしそうなら、既存のsaveAs_FileType_メソッドが最も近いものを見つけるのをおすすめします。EDDGridまたは EDDTable は、そのコードを出発点として使用します。

これらの状況は、あなたが書いたコードが自己完結しているという利点を持っています。 すべての詳細を知る必要はありませんERDDAP'内部。 そして、あなたのコードを組み込むのは簡単ですERDDAPお問い合わせ コードを提出する場合、ライセンスは互換性があります。ERDDAP™ ライセンス (例:パスワード,サーバまたはピットX) お問い合わせ 貢献をリストします。クレジットお問い合わせ

  • 上記の機能がない場合は、ERDDAPまずはディスカッションスレッドを作成することをお勧めします。GitHub ディスカッションお問い合わせ 重要な機能/変更のために、テクニカルボードはそれらを議論し、それにそれを加える承認するかどうかを決定しますERDDAP™お問い合わせ

コードの投稿

コードやその他の変更を提出したい場合はERDDAP、それは素晴らしいです。 あなたの貢献は、受け入れられるために特定の基準を満たす必要があります。 下記のガイドラインに従うと、寄付のチャンスが大幅に増加します。  

  • ザ・オブ・ザ・ERDDAP™NATDでプロジェクトを管理 (NOAAテクニカルディレクター) テクニカルボードからの入力 2007年より (始まりの始まりERDDAP) 2022年、ボブ・シモンズに (創設者・リーダー) お問い合わせ 2023年1月より、クリス・ジョン。 基本的には、NATDは責任を負いますERDDAPつまり、s/he は、決定の最終単語を持っているERDDAP™コードは、設計に関して、および与えられた引きの要求が受け入れられるか否か。 効率の理由のために、この方法が一部である必要があります (それはLinus TorvaldsとLinuxのために素晴らしい動作します) セキュリティ上の理由から一部: 誰かが、コードのセキュリティと完全性について責任を負うITセキュリティの人々を伝えなければならない。  

  • NATD は s/he があなたのコードを受け入れることを保証しません。 プロジェクトがうまくいかないだけでなく、希望がなかったり、サルバジがなければ、NATD はプロジェクトを含めないERDDAP™分布。 気にしないで 時には、プロジェクトがうまくいかないと希望する。 すべてのソフトウェア開発者に起こります。 以下のガイドラインに従うと、成功のチャンスを大幅に増加させます。  

  • 一般的な興味や有用性が変化する場合、それは最善です。 コードが組織に固有の場合、おそらく別のブランチを維持するのが最善ですERDDAP™あなたの使用のために。 Axiomはこれを行います。 幸いなことに、Gitはこれを簡単にします。 NATDは、一貫したビジョンを維持したいと考えています。ERDDAP誰もがプロジェクトにカスタム機能を追加するキッチンシンクプロジェクトになることはできません。  

  • フォローするJavaコード条約。 一般的に、あなたのコードは良質であり、元のに従うべきですJavaコード条約: .class ファイルをディレクトリ構造の適切な場所に置き、.class ファイルを適切な名前に付けます。JavaDocコメントは、4つのスペースを持つインデント、コードの各段落の開始時に //コメントを含める (タブなし) 線 >80 文字等を避けて下さい。 条約の変更とソースコードは、常に最新ではありません。 疑わしい場合は、コードを慣習にマッチし、既存のコードではなく一致させます。

  • 記述クラス、メソッド、変数名を使用します。 これにより、他の人が読みやすくなります。  

  • 空想コードを避けてください。 長期的には、維持するためにコードを把握する必要があります。 そのため、他者にとってより簡単なコーディング方法を使用してください。 (未来をつなぐ) お問い合わせ 明らかに、いくつかの空想を使用するために本当の利点がある場合Javaプログラミング機能、それを使用するが、あなたが何をしたか、なぜ、そしてそれがどのように動作するかを広範囲に文書化します。  

  • 開始前にテクニカルボードで作業してください。 コードの変更が引き込まれるかどうかERDDAP™, テクニカルボードは、間違いなくあなたが何をしようとしているのか、そして、コードの変更をする前にそれをする方法について話したいと思います. このようにして、最後にNATDが変更されたことを避けることができます。 あなたが仕事をしているとき、NATDとテクニカルボードは、既存のコードを把握し、既存のコードを把握するのに役立つ質問に答えることを喜んでいます (全体で) プロジェクトに取り組む方法  

  • 独立して仕事 (可能な限り) スタート後。 上記の「技術委員会との作業」とは対照的に、プロジェクトを開始した後、NATDは可能な限り独立して作業することを奨励します。 NATDがほとんどすべてを伝え、たくさんの質問に答えなければならない場合 (特に、ドキュメントやコードを読むことで回答できるもの) それからあなたの努力は、NATDとs/heの時間を節約するだけでなく、自分で作業を行うかもしれません。 お問い合わせ神話的な人の月問題。 もちろん、まだ連絡を取りません。 プロジェクトが追跡されていることを確認するために進捗状況であなたの仕事を定期的に見ることは素晴らしいでしょう。 しかし、あなたが独立して働くことができるより多くの (テクニカルボードが手作業と一般的なアプローチでタスクに同意した後) 、よりよい。  

  • バグを避けます。 リリース前にバグがキャッチされていない場合、ユーザーは問題が発生します。 (最高の) 、間違った情報を返す (最悪) , blot はERDDAP's の評判, と は 最新ERDDAP™年のための取付け。 バグを避けるために非常に難しい作業. クリーンなコードを書く (問題がわかりやすいので) お問い合わせ ユニットテストを書いている部分です。 この部分は、コードを書くときにバグ回避の一定の態度です。 NATD の後悔をコードを追加しないでくださいERDDAP™お問い合わせ  

  • ユニットテストやテストを書く 新しいコードでは、JUnit のテストをテストファイルに書き込む必要があります。 書き込むコードを徹底的にテストし、クラスJUnitテストファイルに書き込むと、自動的に実行されます。 ユニット (と関連) テストは、バグ、初期、および長期的に実行する最良の方法の1つです。 (その他の事柄が変化するERDDAP™) お問い合わせ ボブが言ったように、「ユニットテストは、夜に眠れるものです」。  

  • プルリクエストの変更を理解し、受け入れる NATD を簡単にします。 ユニットテスト方法を書く部分 (ツイート) お問い合わせ その一部は、コードの1つのセクションへの変更を制限しています (1つのクラス) 可能であれば。 NATD は、コード全体で何百もの変化のプルリクエストを受け付けません。 NATDは、コードのセキュリティと完全性について、s/heが責任を負うITセキュリティの人々を伝えます。 変更が多すぎる場合や、数値化が難しすぎる場合は、変更が修正されず、バグやセキュリティの問題は導入できません。  

  • シンプルに。 コードの全体的なテーマは、シンプルにしてください。 簡単なコードは、他の人のために簡単です (未来をつなぐ) 読み、維持するため。 NATDが理解し、受け入れるのは簡単です。  

  • あなたのコードに対する長期の責任を主張します。 長期的には、あなたのコードを維持し、それについての質問に答えるための継続的な責任を仮定すればそれは最善です (例えば、ERDDAP™Googleグループ) お問い合わせ いくつかの著者のノートとして、コードは責任と資産です。 将来的にバグが発見された場合は、コードがあなたよりも優れていることを誰も知らないので、それを修正すれば最善です (また、最初の場所でバグを避けるためのインセンティブがあること) お問い合わせ NATDは、継続的なメンテナンスを約束する義務を負わない。 NATDは、メンテナンスを行なうということが大歓迎です。