我在eclipse中有一个多模块maven项目。我尝试从一个模块/ Bundle导出包,因此可以在另一个模块中访问它 但是我无法在另一个包中访问一个包的包/类。
我的项目结构如下:
proc sql;
select id,m1,m2,m3,m4,m5
, max(m1,m2,m3,m4,m5) as max_marks
from data1
;
quit;
我从Module3导入一个包并希望在subModuleC中使用它,但是当我输入包名时,它无法访问。
我正在使用Apache ServiceMix和Apache Karaf来编写和部署我的Bundles
POM.xml的一部分可以在下面看到:
(另外我应该选择BundleType作为我的Bundles ???)
Module3的配置:
MainProject
Module1
subModuleA
subModuleB
subModuleC
Module2
Module3
subModuleC的配置:
<configuration>
<instructions>
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
<Bundle-Description>${project.description}</Bundle-Description>
<Import-Package>*;resolution:=optional</Import-Package>
<Export-Package>org.MyProj.ManageSQL.Interface.*, org.postgresql.*, com.mysql.jdbc.*</Export-Package>
<Private-Package>org.MyProj.ManageSQL.*, org.json</Private-Package>
<BundleType>??</BundleType>
</instructions>
</configuration>
答案 0 :(得分:1)
为什么要导出org.postgresql
个包裹?如果您需要包装,只需安装官方jar。嵌入它并导出它可能会导致一些奇怪的依赖链或类加载问题。 org.json
相同。
常见的库应该存在于自己的包中。如果您希望/需要将它们嵌入捆绑包中,则必须know what you are doing。
我建议您将解决进口和出口问题留给maven-bundle-plugin
。当您的捆绑工作时,然后手动调整。
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>3.3.0</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Import-Package>
*
</Import-Package>
<Export-Package>
!this.package.will.not.be.exported,
*
</Export-Package>
</instructions>
</configuration>
</plugin>
有一些工具可以在运行时检查bundle的导入/导出。来自Karaf console类型headers <bundleid>
或imports <bundleid>
。 Karaf将向您展示哪些包是从哪个包中导入的。