将现有的java项目转换为osgi包的最佳方式

前端之家收集整理的这篇文章主要介绍了将现有的java项目转换为osgi包的最佳方式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们有很多组件,我们想要模块化只有几个开始.想知道在所有这些组件中创建捆绑包的最佳方法(在我的构建环境的上下文中)是什么?

我的环境:Java 6,Maven 2.2.1,Hudson

技术:Spring 3.0.5,WebSphere 7,Hibernate 3.2.x和大多数apache commons.

要求

>仅组合少量组件.其他的组件可以导出所有的包.
>当导入到eclipse时,我应该能够看到导入包的捆绑作为构建路径中的依赖关系(mvn eclipse:eclipse似乎不这样做)

解决方法

首先,只需更改MANIFEST.MF条目,使您的所有工件成为捆绑 – 它们显然不会神奇地工作,但它是一个很好的非破坏性的第一步.

当使用maven-bundle-plugin时,您可以设置扩展名和supportedProjectTypes,因为您可能会遇到CI构建问题,如果包装类型为bundle,则Maven repos和m2e将失败(请参阅end).

在早期测试您最有风险/核心的外部依赖关系 – 例如,如果您使用JPA进行持久化,那么请确保提供程序在具有域绑定和JDBC驱动程序的OSGi环境中工作.

如果您从Java EE / Spring迁移,请查看Karaf或Virgo.但是,如果您的组件用于嵌入式系统或没有外部依赖关系,那么Felix或Equinox可能就足够了(如果是这样,请检查pax-url项目).

可能值得编辑您的问题,以更具体的域/技术?

eclipse:eclipse仅在项目首次配置时生成,m2e的生命周期问题可能会有点痛苦,但远远优于使用旧的eclipse插件.

以下将添加清单条目到您现有的工件,而不用任何其他方式更改它们.它告诉标准的maven jar和war插件来使用由maven-bundle-plugin生成的MANIFEST.MF.

把它放在父POM中:

  1. <pluginManagement>
  2. <plugin>
  3. <groupId>org.apache.felix</groupId>
  4. <artifactId>maven-bundle-plugin</artifactId>
  5. <version>2.3.7</version>
  6. <extensions>true</extensions>
  7. <configuration>
  8. <archive>
  9. <addMavenDescriptor>true</addMavenDescriptor>
  10. </archive>
  11. <supportedProjectTypes>
  12. <supportedProjectType>jar</supportedProjectType>
  13. <supportedProjectType>war</supportedProjectType>
  14. </supportedProjectTypes>
  15. <instructions>
  16. <Built-By>${project.organization.name}</Built-By>
  17. <Bundle-Vendor>${project.organization.name}</Bundle-Vendor>
  18. <Bundle-ContactAddress>${project.organization.url}</Bundle-ContactAddress>
  19. <Bundle-Description>${project.description}</Bundle-Description>
  20. <Bundle-DocURL>${bundle.doc.url}</Bundle-DocURL>
  21. <Bundle-Category>${bundle.category}</Bundle-Category>
  22. <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
  23. <Bundle-Version>${project.version}</Bundle-Version>
  24.  
  25. <Import-Package>*</Import-Package>
  26. <Export-Package>*</Export-Package>
  27. </instructions>
  28. </configuration>
  29. <executions>
  30. <execution>
  31. <id>bundle</id>
  32. <goals>
  33. <goal>manifest</goal>
  34. </goals>
  35. <phase>prepare-package</phase>
  36. <inherited>true</inherited>
  37. </execution>
  38. </executions>
  39. </plugin>
  40.  
  41. <plugin>
  42. <groupId>org.apache.maven.plugins</groupId>
  43. <artifactId>maven-jar-plugin</artifactId>
  44. <version>2.3.1</version>
  45. <configuration>
  46. <archive>
  47. <manifestFile>${project.build.outputDirectory}/Meta-INF/MANIFEST.MF</manifestFile>
  48. </archive>
  49. </configuration>
  50. </plugin>
  51.  
  52. <plugin>
  53. <artifactId>maven-war-plugin</artifactId>
  54. <version>2.1.1</version>
  55. <executions>
  56. <execution>
  57. <id>create-war</id>
  58. <phase>package</phase>
  59. <goals>
  60. <goal>war</goal>
  61. </goals>
  62. <inherited>true</inherited>
  63. </execution>
  64. </executions>
  65. <configuration>
  66. <archive>
  67. <manifestFile>${project.build.outputDirectory}/Meta-INF/MANIFEST.MF</manifestFile>
  68. </archive>
  69. </configuration>
  70. </plugin>
  71. </pluginManagement>

然后在孩子POM中,你可以简单地做:

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.apache.felix</groupId>
  5. <artifactId>maven-bundle-plugin</artifactId>
  6. </plugin>
  7. <!-- Below is mutually exclusive: Either jar or war plugin -->
  8. <plugin>
  9. <groupId>org.apache.maven.plugins</groupId>
  10. <artifactId>maven-jar-plugin</artifactId>
  11. </plugin>
  12. </plugins>
  13. </build>

猜你在找的Java相关文章