(我将把它变成一个交互式答案;我还没有答案。)
有点棘手。我知道一个可以梳理依赖版本的 Ning 插件,但我没有看到任何检查类文件版本的选项。我知道如果javac发现链接类的版本太新,它会抱怨- 你能跟踪 Maven 输出并确认 javac 选项吗?
无论如何,即使出现错误,您也不是 100% 安全的。我将不得不发布一个答案,这里的空间不足。这是我遇到的一个轶事。它以 Java 1.4 和 Java 5 为特色,但它有助于阐明为什么您仍然会遇到麻烦。
轶事将支持这样一种观点,即您应该努力使您的库保持与其使用者相同(或更低)的级别,并始终使用正确的 JDK 进行编译。
不管怎样,就到这里吧。假设您new java.math.BigInteger(1)
为 Java 1.4 编译该行。您使用 Java 5 编译器和 1.4 目标,所以一切听起来都不错。但是 Java 5 核心库包含一个带参数的BigInteger
构造int
函数,因此您的类将使用对该构造函数的引用来构建。不幸的是,Java 1.4 没有此版本的BigInteger
构造函数,如果您稍后在 1.4 JVM 中运行此代码,您将收到运行时错误。使用适当的 Java 1.4 编译器会发生的事情是,编译器会产生一个内部转换 from int
todouble
以服务于采用双精度的适当构造函数。