【发布时间】:2015-07-18 07:56:36
【问题描述】:
我正在尝试通过 Ant 使用 javac 编译一个大型 Java 项目。这是在装有 Yosemite 操作系统的 Mac 上,使用 Java 8,如果相关的话。
没有详细说明,我的 A 类依赖于 B 类,它包含在第三方库中。第三方 JAR 库 位于 类路径中。我不拥有它的源代码。 B 类显然依赖于 C 类,它将在运行时出现在应用程序服务器的类路径中,但在构建期间不存在。
编译失败,提示找不到 C 类。如果我在类路径中包含包含 C 类的服务器 JAR,则构建工作正常。但是,其他开发人员可以在不将服务器 JAR 包含在类路径中的情况下构建项目,如果可以避免的话,我宁愿在构建中不包含服务器 JAR。
下面的模拟 Ant 输出:
compile:
[javac] Compiling 180 source files to /some/directory/output
[javac] /some/directory/src/A.java:123: error: cannot access C
[javac] return B.build();
[javac] ^
[javac] class file for C not found
[javac] 1 error
所以我的问题是:
有没有办法总是说服 Java 忽略这种类型的运行时依赖?它适用于主要使用 Java 7 的其他开发人员。
为什么不是每个运行时依赖项都会发生这种情况?我在过去的各种项目中都看到过这种情况,但这从来都不是问题。
【问题讨论】:
-
那么真的没有什么可以做到这一点吗?我正在考虑修改
javac,所以有一个“关闭并构建”标志。在使用 Java 时,我可能花费更多时间试图让编译器满意,而不是实际编写/修复代码。理论上我喜欢类型检查,但在实践中,我认为找出运行时异常比解决编译时依赖关系要快。
标签: java ant dependencies javac