我试图阻止java编译器中的依赖项检查,我使用命令行编译,有没有办法告诉javac编译器在编译java文件时不检查依赖项?
请帮帮我..
答案 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。