| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd";> |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| <html> |
| <head> |
| <link rel="shortcut icon" href="http://aries.apache.org/images/favicon.ico"></link> |
| <link type="text/css" rel="stylesheet" href="http://aries.apache.org/resources/site.css"></link> |
| </script><script src="http://aries.apache.org/resources/menus.js" language="javascript" type="text/javascript"></script> |
| <meta name="keywords" content="..."/> |
| <meta name="description" content="..." /> |
| <title> |
| Apache Aries - |
| </title> |
| </head> |
| <body onload="SetMenu()"> |
| |
| <table width="100%" cellpadding="0" cellspacing="0"> |
| <tr width="100%"> |
| <td id="cell-0-0" colspan="2"> </td> |
| <td id="cell-0-1"> </td> |
| <td id="cell-0-2" colspan="2"> </td> |
| </tr> |
| <tr width="100%"> |
| <td id="cell-1-0"> </td> |
| <td id="cell-1-1"> </td> |
| <td id="cell-1-2"> |
| <div style="padding: 5px;"> |
| <div id="banner"> |
| <!-- Banner --> |
| <table border="0" cellpadding="0" cellspacing="0" width="100%"> |
| <tr> |
| <td align="left" class="topbardiv" nowrap=""> |
| <a href="http://aries.apache.org/" title="Apache Aries"> <img border="0" src="http://aries.apache.org/images/Arieslogo_Horizontal.gif"> </a> |
| </td> |
| <td align="right" nowrap=""> |
| <a href="http://www.apache.org/" title="The Apache Software Foundation"> <img border="0" src="http://aries.apache.org/images/apache_feather.png"> </a> |
| </td> |
| </tr> |
| </table> |
| <!-- Banner --> |
| </div> |
| </div> |
| <div id="top-menu"> |
| <table border="0" cellpadding="1" cellspacing="0" width="100%"> |
| <tr> |
| <td> |
| <div align="left"> |
| <!-- Breadcrumbs --> |
| <!-- Breadcrumbs --> |
| </div> |
| </td> |
| <td> |
| <div align="right"> |
| <!-- Quicklinks --> |
| <DIV style="padding: 5px 5px 0px 25px;"> |
| <FORM action="http://www.google.com/search" method="get" style="font-size: 10px;"> |
| <A href="http://www.apache.org/licenses/LICENSE-2.0.html" class="external-link" rel="nofollow">License</A> |
| <INPUT name="ie" type="hidden" value="UTF-8"></INPUT> |
| <INPUT name="oe" type="hidden" value="UTF-8"></INPUT> |
| <INPUT maxlength="255" name="q" size="15" type="text" value></INPUT> |
| <INPUT name="btnG" type="submit" value="Search"></INPUT> |
| <INPUT name="domains" type="hidden" value="aries.apache.org"></INPUT> |
| <INPUT name="sitesearch" type="hidden" value="aries.apache.org"></INPUT> |
| </FORM> |
| </DIV> |
| <!-- Quicklinks --> |
| </div> |
| </td> |
| </tr> |
| </table> |
| </div> |
| </td> |
| <td id="cell-1-3"> </td> |
| <td id="cell-1-4"> </td> |
| </tr> |
| <tr width="100%"> |
| <td id="cell-2-0" colspan="2"> </td> |
| <td id="cell-2-1"> |
| <table> |
| <tr height="100%" valign="top"> |
| <td height="100%"> |
| <div id="wrapper-menu-page-right"> |
| <div id="wrapper-menu-page-top"> |
| <div id="wrapper-menu-page-bottom"> |
| <div id="menu-page"> |
| <!-- NavigationBar --> |
| <style type="text/css"> |
| /* The following code is added by mdx_elementid.py |
| It was originally lifted from http://subversion.apache.org/style/site.css */ |
| /* |
| * Hide class="elementid-permalink", except when an enclosing heading |
| * has the :hover property. |
| */ |
| .headerlink, .elementid-permalink { |
| visibility: hidden; |
| } |
| h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> |
| <div onclick="SwitchMenu('documentation')" id="documentationTitle" class="menutitle">Documentation</div> |
| |
| <div id="documentation" class="menuitemgroup"> |
| <div class="menuitem"> |
| <a href="/documentation/integrators-guide.html">Integrators Guide</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/documentation/articles.html">Articles</a> |
| </div> |
| <div class="menuitem"> |
| <a href="https://svn.apache.org/repos/asf/aries/slides/">Slides</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/documentation/tutorials.html">Tutorials</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/documentation/tools.html">Tools</a> |
| </div> |
| </div> |
| |
| <div onclick="SwitchMenu('modules')" id="modulesTitle" class="menutitle">Modules</div> |
| |
| <div id="modules" class="menuitemgroup"> |
| <div class="menuitem"> |
| <a href="/modules/samples.html">Samples</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/async-svcs.html">Asynchronous Services</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/blueprint.html">Blueprint</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/blueprint-maven-plugin.html">Blueprint-maven-plugin</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/blueprintannotation.html">Blueprint Annotations</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/blueprintnoosgi.html">Blueprint No-OSGi</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/blueprintweb.html">Blueprint Web</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/containers.html">Containers</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/esaanttask.html">ESA Ant Task </a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/ebamavenpluginproject.html">EBA Maven Plugin </a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/esamavenpluginproject.html">ESA Maven Plugin </a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/jmx.html">JMX</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/jndiproject.html">JNDI</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/jpaproject.html">JPA</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/transactioncontrol.html">Transaction Control Service</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/transactionsproject.html">Transactions</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/rsa.html">Remote Service Admin (RSA)</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/spi-fly.html">SPI Fly</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/subsystems.html">Subsystems</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/applications.html">Applications (obsolete)</a> |
| </div> |
| </div> |
| |
| <div onclick="SwitchMenu('downloads')" id="downloadsTitle" class="menutitle">Downloads</div> |
| |
| <div id="downloads" class="menuitemgroup"> |
| <div class="menuitem"> |
| <a href="/downloads/currentreleases.html">Current Releases</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/downloads/testresults.html">Compliance Tests</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/downloads/archived-releases.html">Archived Releases</a> |
| </div> |
| </div> |
| |
| <div onclick="SwitchMenu('community')" id="communityTitle" class="menutitle">Community</div> |
| |
| <div id="community" class="menuitemgroup"> |
| <div class="menuitem"> |
| <a href="/community/resources.html">Community Resources</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/community/gettinginvolved.html">Getting Involved</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/community/people.html">Who we are</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/community/boardreports.html">Board Reports</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/community/logos.html">Logos for Users</a> |
| </div> |
| </div> |
| |
| <div onclick="SwitchMenu('development')" id="developmentTitle" class="menutitle">Development</div> |
| |
| <div id="development" class="menuitemgroup"> |
| <div class="menuitem"> |
| <a href="/development/buildingaries.html">Building Aries </a> |
| </div> |
| <div class="menuitem"> |
| <a href="/development/guidelines.html">Cording Guidelines</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/development/architecture.html">Architecture</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/development/releasingaries.html">Releasing Aries </a> |
| </div> |
| <div class="menuitem"> |
| <a href="/development/compliancetesting.html">OSGi Compliance Tests </a> |
| </div> |
| <div class="menuitem"> |
| <a href="/development/maintainingthewebpages.html">Web Site Maintenance </a> |
| </div> |
| </div> |
| |
| <div onclick="SwitchMenu('sponsorship')" id="sponsorshipTitle" class="menutitle">Sponsorship</div> |
| |
| <div id="sponsorship" class="menuitemgroup"> |
| <div class="menuitem"> |
| <a href="http://www.apache.org/foundation/thanks.html">Thanks</a> |
| </div> |
| <div class="menuitem"> |
| <a href="http://www.apache.org/foundation/sponsorship.html">Sponsoring Apache</a> |
| </div> |
| </div> |
| |
| <div class="promotion"> |
| <a href="http://www.apache.org/events/current-event.html"> |
| <img src="http://www.apache.org/events/current-event-125x125.png" width="125" height="125"/> |
| </a> |
| </div> |
| <!-- NavigationBar --> |
| </div> |
| </div> |
| </div> |
| </div> |
| </td> |
| <td height="100%" width="100%"> |
| <!-- Content --> |
| <div class="wiki-content"><style type="text/css"> |
| /* The following code is added by mdx_elementid.py |
| It was originally lifted from http://subversion.apache.org/style/site.css */ |
| /* |
| * Hide class="elementid-permalink", except when an enclosing heading |
| * has the :hover property. |
| */ |
| .headerlink, .elementid-permalink { |
| visibility: hidden; |
| } |
| h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> |
| <h1 id="release-process-requirements">Release process requirements<a class="headerlink" href="#release-process-requirements" title="Permanent link">¶</a></h1> |
| <p>Up to release 0.3 of Aries we released all of the modules at once, along with a set of samples which demonstrated how the Aries components could be used together.</p> |
| |
| <p>After release 0.3 we wanted to rexamine the release process, the primary motivation for this was the observation that our |
| current process did not use semantic versioning, and, as an OSGi project we should be demonstrating best OSGi practice.</p> |
| |
| <p>We started with the following set of requirements for any Aries release: </p> |
| |
| <table class="confluenceTable"> |
| <tr><th class="confluenceTh"> No. </th><th class="confluenceTh"> Description </th><th class="confluenceTh"> Met currently </th></tr> |
| <tr><td class="confluenceTd"> 1 </td><td class="confluenceTd"> Follows OSGi semantic versioning</td><td class="confluenceTd"> No </td></tr> |
| <tr><td class="confluenceTd"> 2 </td><td class="confluenceTd"> Must have a buildable source distribution </td><td class="confluenceTd"> Yes </td></tr> |
| <tr><td class="confluenceTd"> 3 </td><td class="confluenceTd"> Must have release notes</td><td class="confluenceTd"> Yes </td></tr> |
| <tr><td class="confluenceTd"> 4 </td><td class="confluenceTd"> Must be publicly announced </td><td class="confluenceTd"> Yes </td></tr> |
| <tr><td class="confluenceTd"> 5 </td><td class="confluenceTd"> An easy way for users to download the bundles for a given component</td><td class="confluenceTd"> Yes </td></tr> |
| <tr><td class="confluenceTd"> 6 </td><td class="confluenceTd"> Easy tagging/branching mechanism</td><td class="confluenceTd"> Yes </td></tr> |
| <tr><td class="confluenceTd"> 7 </td><td class="confluenceTd"> A way to provide bug fixes</td><td class="confluenceTd"> Yes </td></tr> |
| <tr><td class="confluenceTd"> 8 </td><td class="confluenceTd"> A way to ensure that a given component doesn't have conflicting dependencies </td><td class="confluenceTd"> ? </td></tr> |
| </table> |
| |
| <h2 id="release-all-aries-components-at-once">Release all Aries components at once.<a class="headerlink" href="#release-all-aries-components-at-once" title="Permanent link">¶</a></h2> |
| <h3 id="advantages-of-releasing-everything-at-once-and-at-the-same-level">Advantages of releasing everything at once and at the same level<a class="headerlink" href="#advantages-of-releasing-everything-at-once-and-at-the-same-level" title="Permanent link">¶</a></h3> |
| <ol> |
| <li>Conceptually very simple of consumers. For example, if as a consumer I pick up something called Blueprint version 0.4 I know that I |
| will need to get Util version 0.4 to go with it.</li> |
| <li>A relatively simple release process, one JIRA component, one set of release notes.</li> |
| <li>We can release a set of samples at the same version with some guarentee that the samples all work with the release.</li> |
| </ol> |
| <h3 id="disadvantages-of-releasing-everything-at-once">Disadvantages of releasing everything at once<a class="headerlink" href="#disadvantages-of-releasing-everything-at-once" title="Permanent link">¶</a></h3> |
| <ol> |
| <li>Not using of OSGi semantic versioning of bundles. After every we release we bump the major versions of all bundles in trunk.</li> |
| </ol> |
| <p>Package versions are managed separately (correctly) and the Maven bundle plugin will ensure packages are imported in the correct range based of |
| the projects dependencies. Implementers need to use "provide:=true" to get the correct range. Package export version should be maintained |
| either using package.info or in the pom.xml.</p> |
| <h2 id="releasing-by-module">Releasing by module<a class="headerlink" href="#releasing-by-module" title="Permanent link">¶</a></h2> |
| <p><p>Our ideal for a release process would involve to release by module, this is |
| really just an evolution of the process that we already use but it would involve |
| using semantic versioning of bundles. One might visualise the process like this: </p></p> |
| <p><img alt="rel" src="release_by_module.png" /></p> |
| <p>In this case, we have a module version (independent of the version of its sub-modules) and a set of sub-modules which may each be independently versioned.</p> |
| |
| <h3 id="advantages-of-release-by-module">Advantages of release by module<a class="headerlink" href="#advantages-of-release-by-module" title="Permanent link">¶</a></h3> |
| <ol> |
| <li>Releasing a coherent set of bundles that have been built and run together</li> |
| <li>Releasing a buildable set of source for all constituent bundles in one zip file</li> |
| <li>A more consumable unit than a set of single bundles - easier for Aries consumers. A smaller number of discrete downloads.</li> |
| </ol> |
| <h3 id="disadvantages-of-the-release-by-module-process">Disadvantages of the release by module process<a class="headerlink" href="#disadvantages-of-the-release-by-module-process" title="Permanent link">¶</a></h3> |
| <ol> |
| <li>We would have to release a whole module at once, this would mean re-releasing bundles at the same level |
| (and with the same content) as a previous release. This is not a major issue but we would probably not want them in the |
| www.apache.org/dist/aries directory.</li> |
| <li>Developer would need to be careful to version submodules poms independently from the parent/reactor pom. Again, |
| not a major issue but a change from the way we work at the moment.</li> |
| <li>The Maven release plugin will not cope with having different levels of snapshot in the same release. |
| Therefore we would either require changes in the Maven release plugin or we would have to stop using it |
| and maintain our own alternative, to allow us to release by module.</li> |
| <li>It's not all clear what the strategy for branching would be. For example, consider the following scenario: |
| <img alt="rel" src="dual_component_module.png" /> |
| <p>In this case a release of the blueprint module at version 1.5 contains bundles blueprint-core at version 1.0.1 and blueprint-cm |
| at version 1.0.2.</p> |
| <p>Over a period of time, development in trunk continues and a change is made to blueprint-core which mandates an increase in |
| the major version. Another release of blueprint (version 1.6) is made containing blueprint-cm at version 1.0i.3 and blueprint-core at version 1.1.0.</p> |
| <p>Meanwhile a customer finds a problem in blueprint module version 1.5 in the blueprint-cm module. They would like a release of the blueprint module |
| at version 1.5.1 with blueprint-cm at 1.0.3. Unfortunately this is impossible because we have already released blueprint-cm at 1.0.3 |
| and it works with blueprint-core 1.1.0. So, we have no way to meet the requirement </p></li> |
| </ol> |
| <h2 id="releasing-by-bundle">Releasing by bundle<a class="headerlink" href="#releasing-by-bundle" title="Permanent link">¶</a></h2> |
| <p>Other OSGi projects, for example Sling and Felix, release by bundle.</p> |
| <h3 id="advantages-of-releasing-by-bundle">Advantages of releasing by bundle<a class="headerlink" href="#advantages-of-releasing-by-bundle" title="Permanent link">¶</a></h3> |
| <ol> |
| <li>Other projects already do it so there is a well understood model</li> |
| <li>All the existing tools work</li> |
| <li>OSGi semantic versioning can be used properly</li> |
| </ol> |
| <h3 id="disadvantages-of-releasing-by-bundle">Disadvantages of releasing by bundle<a class="headerlink" href="#disadvantages-of-releasing-by-bundle" title="Permanent link">¶</a></h3> |
| <ol> |
| <li>It is more difficult for a consumer of Aries modules to understand which bundles form a logical grouping</li> |
| <li>There are a lot of bundles to manage independently. This has implications:<br/><ul> |
| <li>Releasing - mvn release:prepare, and so on, needs to be run for each bundle separately. However, many bundles could be rolled up into one vote.</li> |
| <li>Each bundle has to have its own JIRA component</li> |
| <li>Our svn tree would need to be restructured - probably in a similar way to the Sling tree. Each bundle would have its own trunk & branches.</li> |
| </ul> |
| </li> |
| <li>There are still some issues with branching and it is still possible to get into a situation similar to that described above. </li> |
| </ol></div> |
| <!-- Content --> |
| </td> |
| </tr> |
| </table> |
| </td> |
| <td id="cell-2-2" colspan="2"> </td> |
| </tr> |
| <tr width="100%"> |
| <td id="cell-3-0"> </td> |
| <td id="cell-3-1"> </td> |
| <td id="cell-3-2"> |
| <div id="footer"> |
| <!-- Footer --> |
| <div id="site-footer"> |
| <a href="http://aries.apache.org/privacy-policy.html";>Privacy |
| Policy</a> |
| </div> |
| <!-- Footer --> |
| </div> |
| </td> |
| <td id="cell-3-3"> </td> |
| <td id="cell-3-4"> </td> |
| </tr> |
| <tr width="100%"> |
| <td id="cell-4-0" colspan="2"> </td> |
| <td id="cell-4-1"> </td> |
| <td id="cell-4-2" colspan="2"> </td> |
| </tr> |
| </table> |
| </body> |
| </html> |