我有一个大型 Java 库,我想开发几个与该库接口(interface)的较小应用程序。该库将作为 JAR 出现在目标设备的类路径中,但我想尽可能避免在编译时出现整个库(JAR 或源代码)。 (如果重要的话,JAR 相当大,我也想保护知识产权,尽管这不是我主要关心的问题。)
在 C++ 中,我会通过创建一个 DLL (.so) 并将相关的类和函数定义 header 复制到我的项目并在编译时将它们添加到包含路径来解决这个问题,让动态链接器在运行时。
如何在 Java 中执行此操作?我的一个想法是删除私有(private)方法/成员,并剥离相关类的方法,以便它们的主体为空,并在运行时加载具有相同签名的真实类和方法。然而,这种方法看起来非常丑陋和简陋,而且需要一些工具来自动化这个过程。有没有工具可以做到这一点?有没有更好的办法?
我不认为它是 this question 的副本.该问题的重点是通过删除不必要的类,在编译时最小化生成的 JAR 文件的大小。我的意思不是要删除未使用的定义,而是要完全避免在编译时需要完整的库 JAR。尽管这些很相似,并且可能有一种方法可以使用 ProGuard 实现我想要的效果,但链接的问题并未讨论它。
最佳答案
在 Java 中没有头文件的确切等价物,但是可以使用接口(interface)来实现在没有实际实现的情况下针对“头文件”(在“契约”的含义中)进行编译:
- 使用相关方法为您想要“ header ”的每个类创建接口(interface)
- 让实际的类实现各自的接口(interface)
- 将接口(interface)打包到一个 JAR 中,将实现打包到另一个 JAR 中
- (如果你使用像Maven这样的构建工具,使用两个项目,让实现项目依赖接口(interface)一个)
- 只在编译时提供接口(interface)JAR,运行时都提供
当然需要一些知道实际实现并可以实例化它们的工件,否则您将不得不使用一些查找来搜索类路径以寻找合适的实现。
关于java - 相当于Java中的C++头文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40997215/