Hi Peter,
Thank you for your detailed reply. I also feel the OSGi versioning
approach is stronger than e.g. the maven approach.
Maven is all about their "artifacts" (jars), and when combining this
with their snapshot/release and their pom/parent-pom systems, ends up
being very limiting and complex.
On the other hand, if for whatever reason an Export-Package does not
specify a version, the current default behaviour seems to consider this
as a "0.0.0"/unspecified.
So an Import-Package statement can not set a version either, or it won't
resolve.
Which means that when the provider is not sufficiently strict in its
manifest, the consumer side is also forced to forget about versioning
constraints...
Wouldn't it be an improvement to use the bundle version as "default"
value for exported packages with unspecified versions?
That would still allow the conscious people to follow all good practices
completely, while also easying the entry from more "maven-based"
thinking into the world of OSGI ;-)
I.e. they could already start working with clear dependency mgmt,
Import-Packages with versions etc.
kind regards
erwin
Op 07/08/2015 om 15:12 schreef Peter Kriens:
Package versioning allows you to do semantic versioning, when you use
the bundle version as package you’re just wasting manpower and CPU
cycles since there is no benefit.
In OSGi, semantic versioning is a powerful tool because it allows you
to significantly minimize the amount of work you have to do for minor
changes. In contrast with maven, the OSGi package model with semantic
version does not require changes in the metadata whenever there is a
small change in a dependency because the semantic version signals if
that change is compatible or not.
If you version all packages with a bundle version you are not telling
anything about those packages compatibility anymore. If you want to
signal anything, you should at least take the maximum change of any of
its constituent packages. So now whenever you make a major change for
one package, all packages are major changed.
Then again, if you use maven it is already impossible to take the
benefits of semantic versioning during development time because maven
creates a rigid hard coded graph. I.e. if a dependency changes,
however minor, all upstream dependees must adjust their pom. That is
partly why releasing on maven is so hard, you need to change all
metadata when you go from snapshot to release.
So it all depends. If you have a single build and all gets build
together, who cares about package versions? Only if you share binaries
with others are package versions important. However, there is more
than just package versions, you also have to follow the architectural
rules.
Semantic versioning in OSGi shines if you follow the best practice in
software engineering. You use small cohesive bundles that are coupled
via services. Since services have a well defined contract you can then
semantically version the contract. The advantages of this model are
tremendous but you need to have experienced it to believe it :-(
That said, I know how hard it is to achieve that level in most
software organizations. Codebases are more often than not highly
coupled monsters. Management rarely understands what causes the costs.
And developers usually prefer to spend umpteen hours to prevent
getting a budget for doing it right.
So, best of luck! :-)
Kind regards,
Peter Kriens
On 6 aug. 2015, at 21:16, Endo Alejandro
<alejandro.e...@grassvalley.com
<mailto:alejandro.e...@grassvalley.com>> wrote:
Hello,
I understand all the disadvantages of using require-bundle over
import-package, but I’m not sure what’s the effect of using the
bundle version as exported package version, at least by default (i.e.
when need it, we can create the “packageinfo” file manually to
control the package version by hand). I am having a hard time
enforcing the usage of packageinfo files in my team. I created a
packageinfo file for every exported package but whenever we create
new packages we forget to create the file or, what’s worse, when
modifying code we forget to bump the package version; so we might end
up with problems where a bundle with a bugfix ends up exporting a
package with the same version as the buggy package so the fix might
or might not work in some systems. Would it be acceptable to, by
default, version packages with the bundle version? This is what the
maven-bundle-plugin does when there’s no packageinfo anyway. Also,
the bundle version is much more visible since we use maven and the
maven-release-plugin, which bumps the bundle version itself so we are
sure two released bundles will never have the same version therefore
neither would the packages.
This sounds better than using Require-bundle since we can still for
example refactor a bundle without redeploying the consumers. But is
it still ok? One drawback I see is complexifying (i.e. slowing down)
wiring/start-up due to the (unnecessary) number of exporters of
packages that might actually contain the same code.
We are using the maven-bundle-plugin. For now bndtools is not an
option. Ultimately what I think is the best solution is to start
using the baselining feature of bnd, but until then, is versioning
all packages in a bundle with the bundle-version problematic??
Thanks for any insight,
Alejandro
DISCLAIMER: Privileged and/or Confidential information may be
contained in this message. If you are not the addressee of this
message, you may not copy, use or deliver this message to anyone. In
such event, you should destroy the message and kindly notify the
sender by reply e-mail. It is understood that opinions or conclusions
that do not relate to the official business of the company are
neither given nor endorsed by the company. Thank You.
_______________________________________________
OSGi Developer Mail List
osgi-dev@mail.osgi.org <mailto:osgi-dev@mail.osgi.org>
https://mail.osgi.org/mailman/listinfo/osgi-dev
_______________________________________________
OSGi Developer Mail List
osgi-dev@mail.osgi.org
https://mail.osgi.org/mailman/listinfo/osgi-dev
_______________________________________________
OSGi Developer Mail List
osgi-dev@mail.osgi.org
https://mail.osgi.org/mailman/listinfo/osgi-dev