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