1

私はあなたのために新しいパズルを持っています:-)。

アプリケーションが自分の起動をどのように処理するかを考えていました。同様に:必要なライブラリ、正しいバージョン、データベース接続、データベースの互換性などを確認します。具体的には、ここにテストケースがあります。明らかな理由から、私は SWT と Log4J を使用しています。さて、質問:

  • アプリは、必要な依存関係を自身でチェックする必要がありますか? はいの場合、何が欠けているかについて具体的な詳細をユーザーに提供する必要がありますか? それとも単なるメッセージとログへの詳細ですか?
  • log4J ライブラリが利用できない場合はどうなりますか?
  • テストを行うのに最適なものは何ですか? ファイルの存在を確認する (指定されたパスで file.exists() を使用)、または Class.forName("org.apache.log4j.Logger") などのクラスをロードしますか? チェックを行う適切な順序は何ですか? たとえば、SWT をテストする場合、ロガーが使用可能かどうかわからず、それにアクセスしようとするとエラーが発生します。逆に、最初にロガーをテストした場合: a) ライブラリが利用できない可能性があります - エラーをログに記録できません。b) SWT が利用できない可能性があります - ユーザーメッセージを表示できません。
  • 私は今日 apache.commons.lang フレームワークを発見しました。メソッドが非常に便利であり、org.apache.commons.lang.SystemUtils.isJavaVersionAtLeast(Float value) 他の多くのメソッドが役立つと確信しています。しかし、プロジェクトにあまりにも多くのライブラリをインポートしても、維持が難しくなりませんか? バージョンが変更され、互換性が失われます。サードパーティの開発スタイルや方向性を制御することはできません。

回答ありがとうございます。

4

3 に答える 3

1

短い答えはノーです。JVM は、初期化時または実行時にこの機能を適切に処理します。必要なクラスがクラスパスで見つからない場合、ClassNotFoundException がスローされます。クラスが見つかったが、必要なメソッドが見つからなかった場合、NoSuchMethodException がスローされます。

于 2009-10-04T01:29:16.070 に答える
1

1 から 3 に関しては、主な使用例が 2 つあります。

  • アプリケーションのパッケージ化は管理下にあり、必要なすべての依存関係が適切にパッケージ化されていることを確認できます。ここでは実行時の検証は役に立ちません。
  • アプリケーションのパッケージ化はあなたの管理下になく、メインの jar と要件に関する指示を提供します。ClassNotFoundException: org.apache.logging.LogManager実行時の検証は役に立つかもしれませんが、アプリケーションをパッケージ化しようとする人は通常、a が何を意味するかを理解するのに十分なスキルを持っています。

4 に関しては、プロジェクトに含まれる依存関係の同じバージョンを維持する限り、制御を維持するのに問題はありません。新しいバージョンへのアップグレードは意識的な決定であり、熟考とテストが必要です。

于 2009-10-04T06:36:21.240 に答える