Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将OSGI嵌入依赖项用于常见的第三方JAR-s_Java_Maven_Liferay_Osgi_Bundle - Fatal编程技术网

Java 如何将OSGI嵌入依赖项用于常见的第三方JAR-s

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

我有一个带有多个portlet的Liferay系统。这些portlet中的大多数都有冗余的JSF相关的JAR-s,因此我想消除冗余,并为常用的JAR-s创建一个OSGI包

我的想法是,我的所有portlet都将使用这个公共包作为依赖项

在读了一些关于我的maven pom的文章后,我发现了一些类似的东西:

<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,这几乎就是你的情况()