osgi:导入部分存在于捆绑包中的包

osgi:导入部分存在于捆绑包中的包,osgi,glassfish-3,apache-felix,Osgi,Glassfish 3,Apache Felix,我有一个包X.Y.Z,存在于两个包a和B中: bundle A package X.Y.Z class Class1 bundle B package X.Y.Z class Class2 B包出口包装X.Y.Z。 Bundle A导入包X.Y.Z,并得到一个异常,即找不到自己的类Class1。它应该起作用吗 我将glassfish 3.1与felix一起使用不,它不应该工作。如果导入包X.Y.Z,则该导入将优先于包自身的内部内容 更一般地说,您有一个称为拆分包的问题。包应该

我有一个包X.Y.Z,存在于两个包a和B中:

bundle A
 package X.Y.Z 
  class Class1

bundle B
 package X.Y.Z 
  class Class2
B包出口包装X.Y.Z。 Bundle A导入包X.Y.Z,并得到一个异常,即找不到自己的类Class1。它应该起作用吗


我将glassfish 3.1与felix一起使用

不,它不应该工作。如果导入包X.Y.Z,则该导入将优先于包自身的内部内容


更一般地说,您有一个称为拆分包的问题。包应该是一致的,并通过单个包导出,而不是跨多个包进行涂抹。您应该重构包内容,以便属于包X.Y.Z的所有类都存在于单个包中。

不,它不应该工作。如果导入包X.Y.Z,则该导入将优先于包自身的内部内容


更一般地说,您有一个称为拆分包的问题。包应该是一致的,并通过单个包导出,而不是跨多个包进行涂抹。您应该重构包内容,以便属于包X.Y.Z的所有类都存在于单个包中。

再次强调,Niel是绝对正确的。但是,有时,无论出于何种原因,供应商都会有多个包含相同包的.jar文件。有时,当他们想为其产品的谨慎实现提供小的.jar文件时,可以这样做。可以这样做的一个例子是,他们对EDI文档的文本处理算法与xml文档的文本处理算法不同。在本例中,他们可能会选择创建两个.jar(版本1和2)文件,其中包含“badlyPlannedImplementation.util”,其中包含不同的实现类。就我个人而言,我只遇到过几次这种情况,但问题是你如何处理

当您遇到两个.jar文件导出同一个包并且希望访问这两个包类的问题时,您将使用一种称为“着色”的机制。着色是指当您获取这两个包并将它们的内容收集到另一个.jar文件包中时。这过去是由一个名为“maven shade plugin”的maven插件完成的,但现在该功能是maven bundle插件的一部分

首先,创建一个新项目,我们将我们的项目称为“badlyPlannedImplementationShaded”。然后,在项目中创建一个pom.xml文件。在“依赖项”部分中,包括要一起着色的两个.jar文件的依赖项

然后,将以下内容添加到构建部分

<plugin>
   <groupId>org.apache.felix</groupId>
   <artifactId>maven-bundle-plugin</artifactid>
   <version>2.1.0</version>
   <extensions>true</extensions>
   <configuration>
      <instructions>
         <Bundle-Version>${project.version}</Bundle-Version>
         <Export-Package>
            badlyPlannedImplementation.util;version="1",
            badlyPlannedImplementation.util;version="2"
         </Export-Package>
      </instructions>
   </configuration>
</plugin> 

org.apache.felix
maven捆绑插件
2.1.0
真的
${project.version}
badlyPlannedImplementation.util;version=“1”,
badlyPlannedImplementation.util;version=“2”
这样做将创建一个新的包,其中包含一个util包,该包包含您试图使用的两个.jar文件中的所有类


我希望这有帮助

再说一遍,尼尔是绝对正确的。但是,有时,无论出于何种原因,供应商都会有多个包含相同包的.jar文件。有时,当他们想为其产品的谨慎实现提供小的.jar文件时,可以这样做。可以这样做的一个例子是,他们对EDI文档的文本处理算法与xml文档的文本处理算法不同。在本例中,他们可能会选择创建两个.jar(版本1和2)文件,其中包含“badlyPlannedImplementation.util”,其中包含不同的实现类。就我个人而言,我只遇到过几次这种情况,但问题是你如何处理

当您遇到两个.jar文件导出同一个包并且希望访问这两个包类的问题时,您将使用一种称为“着色”的机制。着色是指当您获取这两个包并将它们的内容收集到另一个.jar文件包中时。这过去是由一个名为“maven shade plugin”的maven插件完成的,但现在该功能是maven bundle插件的一部分

首先,创建一个新项目,我们将我们的项目称为“badlyPlannedImplementationShaded”。然后,在项目中创建一个pom.xml文件。在“依赖项”部分中,包括要一起着色的两个.jar文件的依赖项

然后,将以下内容添加到构建部分

<plugin>
   <groupId>org.apache.felix</groupId>
   <artifactId>maven-bundle-plugin</artifactid>
   <version>2.1.0</version>
   <extensions>true</extensions>
   <configuration>
      <instructions>
         <Bundle-Version>${project.version}</Bundle-Version>
         <Export-Package>
            badlyPlannedImplementation.util;version="1",
            badlyPlannedImplementation.util;version="2"
         </Export-Package>
      </instructions>
   </configuration>
</plugin> 

org.apache.felix
maven捆绑插件
2.1.0
真的
${project.version}
badlyPlannedImplementation.util;version=“1”,
badlyPlannedImplementation.util;version=“2”
这样做将创建一个新的包,其中包含一个util包,该包包含您试图使用的两个.jar文件中的所有类


我希望这有帮助

捆绑A导出和导入哪些包,捆绑B导出和导入哪些包?捆绑A导出和导入哪些包,捆绑B导出和导入哪些包?