commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Apache Wiki <wikidi...@apache.org>
Subject [Commons Wiki] Update of "CommonsOsgi" by NiallPemberton
Date Sun, 09 Mar 2008 20:56:59 GMT
Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Commons Wiki" for change notification.

The following page has been changed by NiallPemberton:
http://wiki.apache.org/commons/CommonsOsgi

The comment on the change is:
Update Component configuration for commons-parent-9

------------------------------------------------------------------------------
  === Commons OSGi ===
- The [http://felix.apache.org/ Apache Felix] project have [http://commons.markmail.org/message/36xoo2bo5aabvy5c
requested] that Commons components include [http://www.osgi.org/ OSGi] meta data in their
jars so that they are 'ready-to-use' in an OSGi environment. This involves OSGi entries in
the jar's manifest file.
+ The purpose of this page is to record progress in Commons of ''OSGi-enabled'' releases and
any notes on specific issues with configuration of the OSGi manifest entries.
  
- The Felix project has developed a [http://felix.apache.org/site/maven-bundle-plugin-bnd.html
Maven Plugin] which makes this easier (''version 1.2.0 released Jan '08''). Before that was
released a number of components (Pool 1.4, !FileUpload 1.2.1 and IO 1.4) were manually configured
with OSGi manifest entries.
+ The [http://felix.apache.org/ Apache Felix] project (an OSGi implementation) have [http://commons.markmail.org/message/36xoo2bo5aabvy5c
requested] that Commons components include [http://www.osgi.org/ OSGi] meta data in their
jars so that they are ''ready-to-use'' in an OSGi environment. This involves OSGi entries
in the jar's manifest file.
  
- The purpose of this page is to record progress in Commons of ''OSGi-enabled'' releases and
any notes on specific issues with configuration of the OSGi manifest entries.
+ The Felix project has developed the [http://felix.apache.org/site/maven-bundle-plugin-bnd.html
maven-bundle-plugin] which makes this easier and this is now configured
+ in the {{{commons-parent}}} [http://svn.apache.org/repos/asf/commons/proper/commons-parent/trunk/pom.xml
pom.xml] (since version 9) with ''default'' instructions. For components which need to override
the ''default'' instructions, this can be done using ''properties'' in the component pom (see
below for more details).
  
  == Proper ==
  
@@ -56, +57 @@

  
  Having said that the Felix project has a bundle to re-package logging - see [http://svn.apache.org/repos/asf/felix/trunk/commons/commons-logging/pom.xml
here]
  
+ == Configuring Commons Components for OSGi with Maven1 ==
+ This can be done by specifying appropriate manifest entries for the jar plugin 
+ (Pool 1.4 is an [http://svn.apache.org/repos/asf/commons/proper/pool/tags/POOL_1_4/project.properties
example]) - however it is much easier using maven2 and the {{{maven-bundle-plugin}}}.
- == Configuring OSGi with Maven2 ==
- There are two ways to do this:
-  * ''Bundle Plugin'' - using the Apache Felix project's [http://felix.apache.org/site/maven-bundle-plugin-bnd.html
bundle Plugin]
-  * ''Manually'' - configuring the {{{maven-jar-plugin}}} with OSGi manifest entries
  
+ == Configuring Commons Components for OSGi with Maven2 ==
- '''N.B''' version 8 of the commons-parent pom includes configuration for the felix bundle
plugin which should be sufficient for most components. To use that a component needs to do
the following:
-  * use version 9 of commons-parent
-  * specify {{{<packaging>bundle</packaging>}}}
-  * add a ''property'' with the component's name in lower case
  
- === Felix's Maven2 Bundle Plugin ===
- To configure the plugin, specify a {{{ <packaging>bundle</packaging> }}} element
in the pom
- and configure the plugin in the {{{ <build> }}} section, for example for Commons Lang
+ The latest version of the [http://svn.apache.org/repos/asf/commons/proper/commons-parent/trunk/pom.xml
commons-parent pom] confugures the 
+ [http://felix.apache.org/site/maven-bundle-plugin-bnd.html maven-bundle-plugin]'s ''instructions''
using ''properties'' in the following way:
+ 
  {{{
-       <plugin>
-         <groupId>org.apache.felix</groupId>
-         <artifactId>maven-bundle-plugin</artifactId>
-         <version>1.2.0</version>
-         <extensions>true</extensions>
-         <configuration>
-           <excludeDependencies>true</excludeDependencies>
-           <instructions>
+     <instructions>
+         <!-- stops the "uses" clauses being added to "Export-Package" manifest entry
-->
+         <_nouses>true</_nouses>
-             <Bundle-SymbolicName>org.apache.commons.lang</Bundle-SymbolicName>
+         <Bundle-SymbolicName>${commons.osgi.symbolicName}</Bundle-SymbolicName>
-             <Export-Package>*;version=${pom.version}</Export-Package>
+         <Export-Package>${commons.osgi.export}</Export-Package>
+         <Private-Package>${commons.osgi.private}</Private-Package>
+         <Import-Package>${commons.osgi.import}</Import-Package>
+         <DynamicImport-Package>${commons.osgi.dynamicImport}</DynamicImport-Package>
+         <Bundle-DocURL>${project.url}</Bundle-DocURL>
-           </instructions>
+     </instructions>
-         </configuration>
-       </plugin>
  }}}
  
- '''Notes:'''
-  * {{{<extensions>true</extensions>}}} needs to be specified otherwise the {{{
<packaging>bundle</packaging> }}} is not recognized and causes an error with the
message ''Cannot find lifecycle mapping for packaging '''bundle'''''
-  * {{{<excludeDependencies>true</excludeDependencies>}}} prevents all the component's
dependencies classes being included in the jar
-  * Other '''''Manifest''''' entries are inherited from the commons-parent pom
-  * Depending on the nature/structure of the project, some packages might contain private
classes that are not meant to be used by client code. In these cases, {{{<Export-Package>}}}
should list all public packages while {{{<Private-Package>}}} should contain the private
packages.
- === Configuring via the jar plugin ===
+ This allows component poms to easily override the ''default'' values, by specifying alternative
values for these properties in their pom. The default values for these properties in commons-parent
are:
+ {{{
+     <properties>
+         <commons.osgi.symbolicName>org.apache.commons.${commons.componentid}</commons.osgi.symbolicName>
+         <commons.osgi.export>org.apache.commons.*;version=${pom.version}</commons.osgi.export>
+         <commons.osgi.import>*</commons.osgi.import>
+         <commons.osgi.dynamicImport></commons.osgi.dynamicImport>
+         <commons.osgi.private></commons.osgi.private>
+     </properties>
+ }}}
  
- {{{
-       <plugin>
-         <artifactId>maven-jar-plugin</artifactId>
-         <configuration>
-           <archive>
-             <manifestEntries>
-               <Bundle-SymbolicName>org.apache.commons.lang</Bundle-SymbolicName>
-               <Bundle-License>http://www.apache.org/licenses/LICENSE-2.0.txt</Bundle-License>
-               <Bundle-ManifestVersion>2</Bundle-ManifestVersion>
-               <Bundle-Name>Apache Commons Lang Bundle</Bundle-Name>
-               <Bundle-Vendor>${project.organization.name}</Bundle-Vendor>
-               <Bundle-Version>${project.version}</Bundle-Version>
-               <Export-Package>
- org.apache.commons.lang;version=${project.version},
- org.apache.commons.lang.builder;version=${project.version},
- org.apache.commons.lang.enum;version=${project.version},
- org.apache.commons.lang.enums;version=${project.version},
- org.apache.commons.lang.exception;version=${project.version},
- org.apache.commons.lang.math;version=${project.version},
- org.apache.commons.lang.mutable;version=${project.version},
- org.apache.commons.lang.text;version=${project.version},
- org.apache.commons.lang.time;version=${project.version}
-               </Export-Package>
-               <Import-Package>
- org.apache.commons.lang;version=${project.version},
- org.apache.commons.lang.builder;version=${project.version},
- org.apache.commons.lang.enum;version=${project.version},
- org.apache.commons.lang.enums;version=${project.version},
- org.apache.commons.lang.exception;version=${project.version},
- org.apache.commons.lang.math;version=${project.version},
- org.apache.commons.lang.mutable;version=${project.version},
- org.apache.commons.lang.text;version=${project.version},
- org.apache.commons.lang.time;version=${project.version}
-               </Import-Package>
-             </manifestEntries>
-           </archive>
-         </configuration>
-       </plugin>
- }}}
- '''Notes:'''
-  * As you can see by the example, you should always import everything you export.
-  * The note about private packages from above applies here of course as well.
  
+ For example, depending on the nature/structure of the project, some packages might contain
private classes that are not meant to be used by client code. In these cases, <Export-Package>
should list all public packages while <Private-Package> should contain the private packages.
This can be achieved by overriding the {{{<commons.osgi.export>}}} and {{{<commons.osgi.private>}}}
properties in the component pom.
+ 
+ Version 8 of commons-parent required specifing {{{<packaging>bundle</packaging>}}}
in the component pom - with version 9 this is no longer required. In version 9,
+ the {{{maven-bundle-plugin}}} is configured to generate a {{{MANIFEST.MF}}} file containing
the OSGi ''meta data'' in the {{{target/osgi}}} folder. The {{{maven-jar-plugin}}} is configured
to merge this generated {{{MANIFEST.MF}}} file with the manifest entries it is configured
with. If a component does not want to include OSGi meta-data in their pom's manifest file
they can configure an alternative or blank manifest file location using the {{{<commons.manifestfile>}}}
property.
+ 

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Mime
View raw message