我创建了用于编码/解码属性文件的库。图书馆有两个主要目的:
- 编码属性文件并将其保存到另一个文件。
- 从编码文件返回键值(解码文件,将结果作为字符串存储在内存中,将字符串加载到属性对象并从属性对象返回结果)。
一切似乎都运行良好,但今天我注意到该库不适用于 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));
我发现 java 1.5 中的 Properties 类没有load(Reader)
声明。为了满足 java 1.5 API 要求,我将此行更改为load(InputStream)
. Everyting 现在工作正常,但这是问题所在。
我使用 gradle 编译项目,我知道这个库应该在 java 1.5+ 上运行(我的计算机上安装了 java 1.7)所以我在 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
[更新]
既不-source
也-target
不会检查 API 兼容性。如果是这样,我如何在 gradle 中检查它?正如millimoose 所写,maven 有这个插件(http://mojo.codehaus.org/animal-sniffer-maven-plugin/index.html)但是gradle 呢?