Java OSGi应用程序中需要的专有非OSGi包-can';t重新分配

Java OSGi应用程序中需要的专有非OSGi包-can';t重新分配,java,osgi,Java,Osgi,我想在OSGi环境中使用专有的非OSGi JAR。对于开发,我们只是使用Maven bundle插件[1]重新打包/导出它。问题是,出于法律原因,我们将无法将这些包重新分发给我们的客户,这将导致嵌入和重新打包(AFAIK)的失败,这是唯一的选择(参见[2]) 在使用OSGi之前,我们在手册中有一节介绍了如何在自己获取这些文件后将其放入库文件夹。考虑到OSGi解析类的规则,这显然不再有效 我是否正确地认为解决这一问题的唯一途径是法律途径,即从软件包供应商处获得重新分发许可证(这可能是一场民主噩梦,

我想在OSGi环境中使用专有的非OSGi JAR。对于开发,我们只是使用Maven bundle插件[1]重新打包/导出它。问题是,出于法律原因,我们将无法将这些包重新分发给我们的客户,这将导致嵌入和重新打包(AFAIK)的失败,这是唯一的选择(参见[2])

在使用OSGi之前,我们在手册中有一节介绍了如何在自己获取这些文件后将其放入库文件夹。考虑到OSGi解析类的规则,这显然不再有效

我是否正确地认为解决这一问题的唯一途径是法律途径,即从软件包供应商处获得重新分发许可证(这可能是一场民主噩梦,阻碍及时交付),或者我错过了一个技术解决方案

[1]


[2] 也许OSGi远程服务是一个答案。您将托管公开专有库的OSGi环境,并将其余的安装在客户机上。

我在商业项目中也看到了这一要求。我们最终添加了一个特殊的捆绑包,它在启动时从相关站点下载了所需的JAR,并将其添加到我们的再出口捆绑包中

所以

  • 我们有一个第三方非OSGi jar
    J.jar
    ,我们想使用它
  • 我们添加了一个(几乎)空的OSGi包和两个文件
    • 重新导出
      J.jar的所有相关包的
      META-INF/MANIFEST.MF
    • 一个简单的文本文件-
      META-INF/DOWNLOADS
      ,指定我们可以从哪里下载
      J.jar
  • 我们有一个简单的通用OSGi捆绑包(具有早期启动级别),它检查所有已安装的捆绑包并检查是否存在
    META-INF/DOWNLOADS
    。如果存在,则下载指定的JAR(如果尚未存在)
当重新导出包稍后启动时,看起来就像我们分发了有问题的jar。。。大家都很高兴


当我们需要一个新版本的jar时,我们只是像往常一样发布了一个新版本的jar。。主要的问题是如何处理下载过程中的任何问题。

我只需将这个JAR添加到主Java应用程序类路径中,使用您已经建立的库文件夹中的现有位置。然后,您可以使用
org.OSGi.framework.system.packages.extra
属性将所需的包导出到OSGi中。

这非常有哲理。究竟是什么构成了数字内容的传播

(1) 我们都同意,如果所讨论的jar包含在您的安装下载中,那么它就是一个重新分发

(2) 如果安装程序是一个薄壳,当它运行时,它会从互联网上下载更多的东西。如果它从您的服务器下载jar,我想大多数人都会同意这与(1)基本相同,这是一种重新分发

(3) 如果安装shell从所有者的服务器下载jar呢?假设它是自动化的,没有终端用户的知识

有人真的能说(3)与(2)有很大不同,它不是再分配吗

我想是的,无论是出于什么目的。我们正在用我们的程序有效地分发jar,如何在引擎盖下完成这项工作与重新分发许可证的精神无关。无论谁得到这个程序,都会得到这个罐子,这是事实


至少我们应该与作者联系,以核实他是否同意。我们必须尊重免费软件,不要以违背作者意愿的方式使用它们

这看起来是可行的,我喜欢这样一个事实,即下载内容的(潜在的)交叉关注点并不是由需要下载的捆绑包实现的。虽然这可能不是我解决当前问题的方式,但我会记住这种OSGI特有的关注点分离模式,因为它在许多情况下都很有用。