我在我的应用程序中使用了一些现成的OSGi包,并希望将它们重新打包在一起,并将它们与尚未兼容OSGi的附加包一起重新打包到一个新的包中。
EclipseLink就是一个很好的例子,它可以作为几个OSGi包使用,其中大多数都是可选的,这取决于您想要做什么。我希望选择与我相关的包,添加数据库驱动程序(例如,MySQl JDBC连接器),并将它们重新打包到一个更易于部署的新包中。
我在使用Apache的maven包插件。我在没有源代码的情况下设置了一个新的Maven项目,添加了四个eclipselink和mysql连接器作为依赖项,并尝试了以下操作:
<Embed-Dependency>和<Embed-Transitive>指令将所有依赖项包含在一个包中。问题:随着插件重写清单,来自eclipselink包(例如,javax.mail.internet)的可选依赖项成为必需的。最初的捆绑包在清单中包含"resolution=optional“,因此在清单中可以很好地工作。jar-with-dependencies程序集的manifest目标,但这给了我基本相同的结果,只需要更多的工作。bundleall目标,这与我想要的不太一样,因为它再次创建了单独的捆绑包。更糟糕的是,因为现在这些包中没有它们的依赖项。我将在Struts 2中面对类似的问题。我不会对此过于痴迷,只需要使用一堆独立的第三方捆绑包,但是如果我能更整洁地打包它们,我真的很愿意。我知道OSGi的一个特点是模块化,所以创建大包可以克服这一点,但是我觉得如果您的模块无论如何都是紧密耦合的,那么最好将它们放在一个包中。
当然,我可以手动调整舱单,但我绝对不想。
发布于 2009-08-13 11:19:05
正如美库达特所说,这可能不是一个鼓励的好做法,但由于你有自己的理由,这是一种你可以做穷人合并的方法。
假设您自己正在处理OSGi清单,那么您只需要在包阶段之前将包和jars中的所有类都放到目标/类目录中。
您可以使用依赖插件的解压缩依赖项或解压缩目标来完成这一任务。如果您想要处理所有的项目依赖项(或者那些遵循某种命名模式的依赖项或某个groupId中的依赖项)和解压缩目标,那么我将使用解包依赖项,如果您想要对要解压缩的工件有很好的控制(以牺牲冗长的POM为代价)。我将假设在我的示例中展开。每个解包都输出到项目的outputDirectory (即目标/类)。
注意,这将按照下载的顺序覆盖来自每个包的重复工件,因此清单将互相破坏。为了确保正确地管理工件,我会将解包目标绑定到早期阶段,以便在未打包的内容之上复制src/main/资源,而不是覆盖。在下面的示例中,这个阶段是生成资源,所以在本地编译之后就会发生。如果需要覆盖任何类,请使用较早的阶段来解压依赖项,如生成源。
下面的示例在将项目的资源复制到目标/类之前,将junit-3.8.1和commons 1.4 (仅是我声明的前两个依赖项)的内容解压缩到目标/类中。注意,版本是在我的依赖项部分中定义的。如果尚未将包/jars声明为依赖项,则还需要在artifactItem中声明版本。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack</id>
<phase>generate-resources</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<overWrite>false</overWrite>
<outputDirectory>${project.build.outputDirectory}</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<overWrite>false</overWrite>
<outputDirectory>${project.build.outputDirectory}</outputDirectory>
</artifactItem>
</artifactItems>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
</configuration>
</execution>
</executions>
</plugin>https://stackoverflow.com/questions/1266977
复制相似问题