在一个特定的项目中,我(目前)只允许使用JRE6来执行Java应用程序.因此,我maven-compiler-plugin为源和目标配置了1.6.
在我的Maven依赖项中,我包含了一个依赖项,它本身以1.7为目标,并且还使用了1.7个功能,比如try-with-resources - 我认为这会在我自己的项目中导致一些编译时错误或警告(我正在使用Eclipse) .但它没有,所以我的问题是:在特定目标JRE(在我的例子中是JRE6)上运行应用程序(或测试)之前是否可以检测到此类问题?
(我会将其设为交互式答案;我还没有答案。)
有点棘手。我知道有一个 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 编译器会发生的情况是,编译器将生成从int到 的内部转换,以服务于采用双精度值的正确构造函数。double
| 归档时间: |
|
| 查看次数: |
251 次 |
| 最近记录: |