Java 如何将OSGI嵌入依赖项用于常见的第三方JAR-s
我有一个带有多个portlet的Liferay系统。这些portlet中的大多数都有冗余的JSF相关的JAR-s,因此我想消除冗余,并为常用的JAR-s创建一个OSGI包 我的想法是,我的所有portlet都将使用这个公共包作为依赖项 在读了一些关于我的maven pom的文章后,我发现了一些类似的东西:Java 如何将OSGI嵌入依赖项用于常见的第三方JAR-s,java,maven,liferay,osgi,bundle,Java,Maven,Liferay,Osgi,Bundle,我有一个带有多个portlet的Liferay系统。这些portlet中的大多数都有冗余的JSF相关的JAR-s,因此我想消除冗余,并为常用的JAR-s创建一个OSGI包 我的想法是,我的所有portlet都将使用这个公共包作为依赖项 在读了一些关于我的maven pom的文章后,我发现了一些类似的东西: <plugin> <groupId>org.apache.felix</groupId> <artif
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.3.4</version>
<extensions>true</extensions>
<configuration>
<remoteOBR>true</remoteOBR>
<instructions>
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
<Bundle-Name>${project.name}</Bundle-Name>
<Bundle-Vendor>${project.organization.name}</Bundle-Vendor>
<Import-Package>
!sun.reflect,......,*
</Import-Package>
<Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
<Embed-Transitive>true</Embed-Transitive>
</instructions>
</configuration>
</plugin>
内容:
从我所看到的,这正是我所需要的,至少这是我想象的
在我的消费portlet中,我向清单中添加了以下内容:
Require-Bundle: my-common-bundle;bundle-version="1.0.0"
我认为这样应该可以工作,但是我显然错了,因为当我尝试部署我的portlet时,公共包没有提供一个类:
java.lang.ClassNotFoundException: org.richfaces.webapp.ResourceServlet cannot be found by MyPortlet
<Export-Package>org.richfaces.webapp</Export-Package>
另一方面,如果我将以下内容添加到我的公共捆绑包中:
java.lang.ClassNotFoundException: org.richfaces.webapp.ResourceServlet cannot be found by MyPortlet
<Export-Package>org.richfaces.webapp</Export-Package>
在我看来,类是被加载的,但是JAR清单并没有被处理或者类似的东西。有什么想法吗?您可以使用
指令导出内容而不复制,更多信息
我想指出的是,创建胖jar与OSGi的理念背道而驰,而且,当代码发展时,这将是一场维护的噩梦
理想情况下,您希望每个依赖项都有一个单独的捆绑包。它们应该单独部署和维护。类似乎部署得很好,并且得到了解决,但是我遇到了不同类型的错误,而当我将JAR放入portlet时,我没有遇到这些错误。哦。。我不熟悉Portlet和jsf。希望对这些罐子的工作原理有更多了解的人能够提供帮助。@PeterJaloveczki有什么问题吗?交叉发布在这里:正如凯尔在交叉发布论坛中所说的,有FACES-3024,这几乎就是你的情况()