プロパティ ファイルをエンコード/デコードするためのライブラリを作成しました。ライブラリには 2 つの主な目的があります。
- プロパティ ファイルをエンコードし、別のファイルに保存します。
- エンコードされたファイルからキー値を返します (ファイルをデコードし、結果を文字列としてメモリに格納し、文字列を Properties オブジェクトに読み込み、プロパティ オブジェクトから結果を返します)。
すべて正常に動作しているように見えますが、今日、ライブラリが Java 1.5 で動作しないことに気付きました。デコード側で問題が発生していることに気付いたので、このコードに注目しましょう。デコードを担当するコードが次のようになっているとします。
String props = "key1=val1\nkey2=val2";
Properties p = new Properties();
p.load(new StringReader(props));
p.list(System.out);
いくつかのテストの後、問題は次の行にあることがわかりました。
p.load(new StringReader(props));
load(Reader)
Java 1.5 の Properties クラスに宣言がないことがわかりました。Java 1.5 API 要件を満たすために、この行を に変更しましたload(InputStream)
。Everyting は問題なく動作しますが、ここで質問です。
私はプロジェクトをコンパイルするためにgradleを使用していますが、このライブラリはJava 1.5+(コンピューターにJava 1.7がインストールされています)で動作するはずであることを知っていたので、これらの2行をbuild.gradleに追加しました
sourceCompatibility = '1.5'
targetCompatibility = '1.5'
Java コンパイラーは、コードを Java 1.5 と互換性を持ってコンパイルしたいことを認識し、適切なエラーを表示すると思いました。それがgradleの問題ではないことを確認するために、コマンドラインからJavaコードをコンパイルしましたが、同じ結果になりました(コンパイラはエラーを表示しません)。では、コンパイル中にコンパイラがエラーを表示しないのはなぜですか?
Java 1.5 プロパティ クラス API: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Properties.html
Java 1.6 プロパティ クラス API: http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html
[アップデート]
API の互換性をチェックしない-source
か、チェックしません。-target
もしそうなら、どうすればgradleでそれをチェックできますか? millimoose が書いたように、maven にはこのプラグインがあります ( http://mojo.codehaus.org/animal-sniffer-maven-plugin/index.html )。