在开发Java库时,我们当前正在使用Apache Maven Shade插件通过重命名它们的包名来隐藏对其他库(jar)的内部依赖性。
是否可以通过使用Java 9模块系统隐藏这些内部库相关性,而不导出内部使用的库的名称? 即:
每个模块是否仍将使用其实现org.codehaus.jackson.map.ObjectMapper?
我相信应该这样做,但是我没有找到文档明确证实这一点,也没有任何文本/示例针对这种非常常见的版本控制问题推荐这种方法。
答案 0 :(得分:3)
此问题被描述为http://openjdk.java.net/projects/jigsaw/spec/issues/#MultiModuleExecutableJARs,目前尚不支持。如果所有依赖项都是模块,则可以使用jlink解决此问题。但是,只要有至少一个非模块,就没有可用的解决方案。这是JDK / JRE中需要解决的问题。 这仍然是一个有效的案例,所以我建议在jigsaw-dev邮件列表中问这个问题,并参考#MultiModuleExecutableJARs