`
非飞
  • 浏览: 79449 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

手工创建Spring Osgi Bundle

    博客分类:
  • Java
阅读更多

    之前写了一个篇如何使用Spring提供的Maven Archetype来自动化创建一个Spring Osgi Bundle项目。而在实际的开发过程中,发现自己并不是很喜欢这中方式,总是觉得有些地方会失去控制。

    举个很简单的例子,如果使用手动编辑MANIFEST.MF文件来维护Import-Package和Import-Bundle,那么需要注意一定要将Import-Bundle放在Import-Package之前,否则在使用mvn org.apache.felix:maven-bundle-plugin:manifest时,无法正确的生成MANIFEST.MF文件。生成的 MANIFEST.MF文件中没有Import-Bundle项。

    为了更加好的掌控项目,因此在实际开发过程中,我采用了手工创建和维护项目的方法。下面简单的说明一下创建项目的过程:

  1. 通过maven-archetype-quickstart创建一个Maven管理的项目。
    $mvn archetype:generate -DarchetypeArtifactId=maven-archetype-quickstart                     
  2. 创建必需的文件与目录
    $cd /path/to/your/project                                                                                                                    
    $mkdir src/main/resources                                                                                                                
    $mkdir src/main/resources/META-INF                                                                                            

    $mkdir src/main/resources/META-INF/spring                                                                                
    $touch src/main/resources/META-INF/MANIFEST.MF                                                                 
  3. 编辑${your.project.path}/pom.xml文件
    • 添加springsource的repository,参见How do I configure a Maven build to work with the repository?
      	<!-- ================================================ -->
      	<!--            Repository Configuration                                                         -->
      	<!-- ================================================ -->
      
      	<repositories>
      		<repository>
      			<id>com.springsource.repository.bundles.release</id>
      			<name>SpringSource Enterprise Bundle Repository - SpringSource Bundle Releases</name>
      			<url>http://repository.springsource.com/maven/bundles/release</url>
      		</repository>
      		<repository>
      			<id>com.springsource.repository.bundles.external</id>
      			<name>SpringSource Enterprise Bundle Repository - External Bundle Releases</name>
      			<url>http://repository.springsource.com/maven/bundles/external</url>
      		</repository>
      		<repository>
      			<id>com.springsource.repository.libraries.release</id>
      			<name>SpringSource Enterprise Bundle Repository - SpringSource Library Releases</name>
      			<url>http://repository.springsource.com/maven/libraries/release</url>
      		</repository>
      		<repository>
      			<id>com.springsource.repository.libraries.external</id>
      			<name>SpringSource Enterprise Bundle Repository - External Library Releases</name>
      			<url>http://repository.springsource.com/maven/libraries/external</url>
      		</repository>
      	</repositories>
       
    • 指定打包时需要使用的MANIFEST.MF,参见Adding OSGi metadata to existing projects without changing the packaging type
      	<build>
      		<plugins>
      			<plugin>
      				<artifactId>maven-jar-plugin</artifactId>
      				<configuration>
      					<archive>
      						<manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
      					</archive>
      				</configuration>
      			</plugin>
      			<plugin>
      				<groupId>org.apache.felix</groupId>
      				<artifactId>maven-bundle-plugin</artifactId>
      				<executions>
      					<execution>
      						<id>bundle-manifest</id>
      						<phase>process-classes</phase>
      						<goals>
      							<goal>manifest</goal>
      						</goals>
      					</execution>
      				</executions>
      			</plugin>
      		</plugins>
      	</build>
       
  4. 完成

2
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics