我只是想知道如果某些条件被破坏并且只是以某种方式抛出编译错误,是否有可能阻止我的 Java 应用程序编译。(在我的情况下,我想检查某些包中的哈希码实现是否返回唯一值,以用于缓存目的)我知道可以通过使用反射编写 maven 插件,但不幸的是它不是我的解决方案。
问问题
290 次
3 回答
5
不,您不能在编译期间进行这样的检查(假设使用 正常编译javac
)。
执行此操作的常用方法是在构建时执行单元测试(无论如何,没有人真正在实际项目中进行“手动”编译)。
当测试失败时,构建中断并出现错误是一种非常常见的情况。
于 2013-06-25T14:29:25.347 回答
2
您描述的情况是通过单元测试解决的。单元测试可以阻止您的代码被构建或交付,但它当然不能阻止它被编译,因为它需要编译后的代码才能工作。这些在 Maven 中很容易设置和绑定到构建,在 Ant 中也是可能的。
据我所知,面向方面的编程可以增加编译时间限制。对于我问过的一个 Java 问题,这里的答案简要介绍了这一点。编译时约束。类比,如果 AOP 可以强制执行包依赖,也许它可以强制 class
Foo
依赖 classBar
,这是你的情况 - 但我实际上并不了解 AOP,所以很高兴研究。同样,对于更简单的情况,您实际上可以只添加一个预编译步骤,甚至使用 C 预处理器和
#error
宏。但这部分是 AOP。您可以添加静态断言,以便类在加载时失败,这在运行时(某种意义上)之前但在编译时之后。加载时间的改进。同样,单元测试是实际解决这个问题的方法。
如前所述,您不能通过使用纯 Java 的运行时计算导致编译时失败。
于 2013-06-25T14:31:07.593 回答