相当于Java中的C++头文件?

2023-12-13

我有一个大型 Java 库,我想开发几个与该库交互的较小应用程序。该库将作为 JAR 出现在目标设备的类路径上,但如果可能的话,我希望避免在编译时出现整个库(JAR 或源)。 (如果重要的话,JAR 相当大,我也想保护知识产权,尽管这不是我主要关心的问题。)

在 C++ 中,我将通过创建 DLL (.so) 并将相关类和函数定义标头复制到我的项目中并在编译时将它们添加到包含路径来解决此问题,让动态链接器在运行时完成这项工作。

如何在 Java 中做到这一点?我的一个想法是删除私有方法/成员,并剥离相关类的方法,以便它们的主体为空,并在运行时加载具有相同签名的真实类和方法。然而,这种方法看起来相当丑陋和基本,而且还需要一些工具来自动化这个过程。有没有工具可以做到这一点?有没有更好的办法?

我不认为它是重复的这个问题。该问题的要点是通过删除不必要的类来最小化编译时生成的 JAR 文件的大小。我的观点不是删除未使用的定义,而是完全避免在编译时需要完整的库 JAR。尽管这些很相似,并且可能有一种方法可以使用 ProGuard 来实现我想要的目标,但链接的问题并未讨论它。


Java 中的头文件没有完全相同的东西,但是可以使用接口来实现在没有实际实现的情况下针对“头”(“契约”的含义)进行编译:

  • 使用相关方法为您想要“标头”的每个类创建接口
  • 让实际的类实现各自的接口
  • Pack the interfaces into one JAR, and the implementations into another one
    • (如果您使用像 Maven 这样的构建工具,请使用两个项目,并让实现项目依赖于接口一个)
  • 仅在编译时提供接口JAR,并且在运行时均提供

当然,需要有一些工件知道实际的实现并可以实例化它们,否则您将不得不使用一些查找来搜索类路径以查找合适的实现。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

相当于Java中的C++头文件? 的相关文章

随机推荐