我试图阻止java编译器中的依赖检查,我使用命令行编译,有没有办法告诉javac编译器在编译java文件时不要检查依赖?
3 回答
...有没有办法告诉 javac 编译器在编译 java 文件时不要检查依赖项?
简单回答是不。
假设您有某个类A
想要调用m
由 class 定义的某个方法B
。为了成功编译A
,编译器需要知道它B
是一个真正的类,它定义了方法m
,它具有预期的参数数量和类型,它抛出了什么检查异常,以及它返回什么类型的值。没有这些信息B
,编译器就无法编译A
。
这会传播到项目级别。如果 projectP
中的类依赖于project 中的类Q
,则编译器必须(至少)具有该类才能编译P
.
简而言之,不存在这样的编译器选项,而且很难看出它是如何实现的。
如果您的两个项目相互依赖,那么它们实际上是一个项目,必须一起构建。如果关系是单向关系,那么您仍然需要先构建依赖项目,然后在构建第二个项目时将项目的结果放在类路径上。
大多数 IDE 都具有管理此功能的能力。在 Eclipse 中,您可以标记一个项目依赖于另一个项目,并且依赖项目的输出文件将添加到另一个项目的类路径中。通常,所有依赖项都构建并打包为 jar,并且在编译父项目时将这些 jar 文件放置到类路径中。
在不访问依赖项的情况下构建代码非常困难,不推荐使用。在某些情况下,这是可能的。Eclipse 已经构建了自己的增量 Java 编译器,因此他们不必在每次修改单个文件时重新编译整个项目。您可以在此处阅读有关它的更多信息,但为了使用这样的编译器,您可能需要做很多工作。
更新以反映您的新编辑:
为了构建一个公共库,公共库不能依赖于特定平台部分中的任何类。正如 Peter Rader 所提到的,典型的做法是使用接口。例如,您的公共库可以具有接收事件的 EventListener 接口。在您的平台特定库中,您可以实现该接口并根据特定平台处理事件。由于您的公共库仅依赖于 EventListener 类而不依赖于特定的实现,因此它在编译时不需要那些特定的类。
如果你有依赖,它们总是会被检查并给出警告,但你的类还是会被编译。
框架通常会提供一个包含接口和枚举的 api.jar。