如何在java编译器中防止依赖检查

时间:2013-01-29 13:52:31

标签: compilation java javac

我试图阻止java编译器中的依赖项检查,我使用命令行编译,有没有办法告诉javac编译器在编译java文件时不检查依赖项?

请帮帮我..

3 个答案:

答案 0 :(得分:4)

  

...有没有办法告诉javac编译器在编译java文件时不检查依赖项?

简单的答案是否。

假设您有一些类A想要调用类m定义的某个方法B。为了成功编译A,编译器需要知道B是一个真正的类,它定义了方法m,它具有预期的参数数量和类型,检查它抛出的异常,以及它返回的值的类型。如果没有关于B的信息,编译器就无法编译A

这会传播到项目级别。如果项目P中的类依赖于项目Q中的类,则编译器必须具有该类(至少)以便在P中编译该类。

简而言之,不存在这样的编译器选项,很难看出它是如何实现的。

答案 1 :(得分:2)

如果你们两个项目相互依赖,那么它们实际上是一个项目,必须一起构建。如果关系是单向关系,那么您仍然需要首先构建依赖项目,然后在构建第二个项目时在类路径上获得项目结果。

大多数IDE都有管理它的功能。在Eclipse中,您可以标记一个项目依赖于另一个项目,并且依赖项目的输出文件将添加到另一个项目的类路径中。通常,所有依赖项都构建并打包为jar,并且在编译父项目时将这些jar文件放在类路径上。

构建代码而无法访问依赖项是非常困难的,不推荐使用。在某些情况下,它是可能的。 Eclipse已经构建了自己的增量Java编译器,因此每次修改单个文件时都不必重新编译整个项目。您可以阅读更多相关信息here但是为了使用这样的编译器,您可能需要做很多工作。

更新以反映您的新修改:

为了构建一个公共库,公共库不能依赖于特定于平台的部分中的任何类。正如Peter Rader所提到的那样,典型的方法是使用接口。例如,您的公共库可以具有接收事件的EventListener接口。在特定于平台的库中,您可以实现该接口并根据特定平台处理事件。由于您的公共库仅依赖于EventListener类而不是特定的实现,因此在编译时它不需要这些特定的类。

答案 2 :(得分:0)

如果您有依赖项,它们将始终被检查并发出警告,但无论如何都会编译您的类。

框架通常提供包含接口和枚举的api.jar。