java - 使用带有 maven 的 OSGI 包时如何隐藏嵌入式依赖项?
问题描述
有没有一种方法可以将 OSGI 包用作 maven 依赖项,而无需将所有包从它获取到它甚至不导出的类路径中?
问题的背景:我们刚刚将org.apache.sling.xss包作为 maven 依赖项添加到我们的项目中。正如您在 pom.xml中看到的那样,它只是导出包 org.apache.sling.xss 但将各种依赖项直接嵌入到它的jar中作为Private-Package。虽然 OSGI 对其他包隐藏了这些东西,但 maven 没有。所以我们会遇到冲突:org.apache.sling.xss 嵌入了例如版本 1.7.0 的 commons-beanutils,它与我们一直在使用的新版本的 commons-beanutils 不兼容,因此我们现在会遇到编译错误。
有没有什么好的解决方案——无论是从我们的角度还是从 org.apache.sling.xss 包的维护者的角度来看?理想情况下,如果您使用该捆绑包,您只会将导出的 org.apache.sling.xss 包放入类路径。因此,如果 org.apache.sling.xss 提供了一个单独的 API jar,只包含该类,那么也许一个好的解决方案是?有没有标准的方法来做到这一点,或者其他解决方案?我们能以某种方式告诉 maven 只将那个包包含到类路径中吗?(我知道 maven 有依赖排除,但这在这里没有帮助,因为有问题的东西不是 sling.xss 的传递依赖,而是实际上包含在 org.apache.sling.xss jar 中。)
解决方案
不幸的是,没有用 maven 处理此类捆绑包的好方法。
推荐的方法是将捆绑包拆分为一个仅定义 API 的 API 捆绑包和一个导入 API 并导入或嵌入所有实现依赖项的实现捆绑包。
这样,消费者将只对 API 有 maven 依赖,并且根本不会出现问题。
您可以为 sling xss 打开一个 jira 问题以提供 API 包吗?
推荐阅读
- r - 在 R 中,如何根据范围进行分组?
- javascript - Angular:通过登录页面进行 E2E 测试
- java - 使用 sinch 在 java 中发送短信
- image - 如何从来自 AWS S3 的撇号站点地图中排除资产
- composer-php - 如何使用 Satis 识别我的 Gitlab 版本而不是标签?
- leaflet - 传单 - 使用 png 模式填充 geojson 多边形的插件语法问题
- javascript - flask-assets - 如何防止特定应用的静态 js 文件被另一个应用使用
- ruby - 跨域请求被 Sinatra 和 ReactJS 阻止
- python - 无法将 zOS DB2 与 python ibm_db 连接
- node.js - 如何从 Puppeteer 生成的 CSV 文件中删除此符号?