Java 在OSGI中导入内部包

Java 在OSGI中导入内部包,java,import,osgi,pom.xml,osgi-bundle,Java,Import,Osgi,Pom.xml,Osgi Bundle,我最近开始将现有的maven项目转换为OSGI捆绑包,对POM文件中的标记中需要列出的内容感到困惑 起初,我用星号表示OSGI认为需要的所有内容,并惊讶地看到它列出了来自同一个项目的包。我在网上四处查看,未能找到是否需要导入内部软件包的明确答案,也未能找到不导入内部软件包可能导致的潜在问题的明确答案 我是否需要在中列出项目中使用过的软件包,如果需要,原因是我觉得没有必要 我正在POM中使用以下插件: org.apache.felix maven捆绑插件 以下是tx core的结果pom。所有tx

我最近开始将现有的maven项目转换为OSGI捆绑包,对POM文件中的
标记中需要列出的内容感到困惑

起初,我用星号表示OSGI认为需要的所有内容,并惊讶地看到它列出了来自同一个项目的包。我在网上四处查看,未能找到是否需要导入内部软件包的明确答案,也未能找到不导入内部软件包可能导致的潜在问题的明确答案

我是否需要在
中列出项目中使用过的软件包,如果需要,原因是我觉得没有必要

我正在POM中使用以下插件:
org.apache.felix
maven捆绑插件

以下是tx core的结果pom。所有tx core.*包均来自项目本身

Manifest-Version: 1.0
Bundle-SymbolicName: tx-core
Archiver-Version: Plexus Archiver
Built-By: User
Bnd-LastModified: 1466089543997
Bundle-ManifestVersion: 2
Import-Package: cafe.crypto,tx.core,tx.core.conf,tx.core.conv,tx.core.
 production,tx.core.query,tx.core.util,javax.crypto,javax.crypto.spec,
 javax.servlet
Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
DynamicImport-Package: javax.*, org.xml.sax, org.xml.sax.*,org.w3c.*
Tool: Bnd-3.0.0.201509101326
Export-Package: cafe.crypto;version="4.0.1",tx.core;uses:="tx.core.pro
 duction,tx.core.query";version="4.0.1",tx.core.conf;uses:="tx.core,tx
 .core.production";version="4.0.1",tx.core.conv;version="4.0.1",tx.cor
 e.identity;version="4.0.1",tx.core.io;uses:="tx.core,tx.core.producti
 on";version="4.0.1",tx.core.notify;version="4.0.1",tx.core.production
 ;uses:="tx.core,tx.core.conv,tx.core.query";version="4.0.1",tx.core.q
 uery;uses:="tx.core.conv";version="4.0.1",tx.core.util;version="4.0.1
 ",tx;version="4.0.1"
Bundle-Name: tx-core
Bundle-Version: 4.0.1
Created-By: Apache Maven Bundle Plugin
Build-Jdk: 1.8.0_77

感谢您提供的一切帮助。

对于给定捆绑包的内部包,无需导入它们<代码>用于指示跨捆绑包所需的包

在没有看到您的POM/MANIFEST或者不知道您用于OSGi绑定的Maven插件的情况下,我不完全确定为什么星号会显示所有内部包。我怀疑您的POM/清单正在使用
导出所有内部包

更新 从:

假定为“*”,它导入捆绑包内容引用的所有内容,但不包含在捆绑包中。默认情况下,还将导入任何导出的包,以确保一致的类空间

有关发生这种情况的原因的描述,请参阅

默认情况下,如果未明确定义
,则会导出所有包(例外情况除外),然后重新导入:

现在假定是本地Java源中的一组包,不包括默认包“.”和任何包含“impl”或“internal”的包

对于捆绑包内部的包,如果您不希望其他捆绑包能够引用它们,则有2种选择:

  • 定义要向
    中的其他捆绑包公开的包的显式列表
  • 中定义一个明确的包列表,这些包是您不希望暴露给其他包的

  • 对于给定包的内部包,不需要导入它们<代码>用于指示跨捆绑包所需的包

    在没有看到您的POM/MANIFEST或者不知道您用于OSGi绑定的Maven插件的情况下,我不完全确定为什么星号会显示所有内部包。我怀疑您的POM/清单正在使用
    导出所有内部包

    更新 从:

    假定为“*”,它导入捆绑包内容引用的所有内容,但不包含在捆绑包中。默认情况下,还将导入任何导出的包,以确保一致的类空间

    有关发生这种情况的原因的描述,请参阅

    默认情况下,如果未明确定义
    ,则会导出所有包(例外情况除外),然后重新导入:

    现在假定是本地Java源中的一组包,不包括默认包“.”和任何包含“impl”或“internal”的包

    对于捆绑包内部的包,如果您不希望其他捆绑包能够引用它们,则有2种选择:

  • 定义要向
    中的其他捆绑包公开的包的显式列表
  • 中定义一个明确的包列表,这些包是您不希望暴露给其他包的

  • 您根本不需要编写
    头。默认值为“*”,这意味着“导入捆绑包中代码引用但实际上未出现在捆绑包中的所有包”


    如果这是生成作为导入的“内部”包,那么它们不是内部包,也就是说,由于某种原因,它们没有包含在包中。需要查看更多项目结构才能诊断此问题。

    您根本不需要编写
    标题。默认值为“*”,这意味着“导入捆绑包中代码引用但实际上未出现在捆绑包中的所有包”

    如果这是生成作为导入的“内部”包,那么它们不是内部包,也就是说,由于某种原因,它们没有包含在包中。需要查看更多项目结构才能诊断此问题