Jigsaw prototype, take 2
David M. Lloyd
david.lloyd at redhat.com
Wed Sep 4 17:50:34 PDT 2013
On 09/04/2013 05:27 PM, mark.reinhold at oracle.com wrote:
> 2013/8/30 5:20 -0700, david.lloyd at redhat.com:
>> ... In addition, many best practices have emerged
>> that (partially or wholly) contradict the original design intent of
>> these systems (OSGi also falls into this category).
>
> Do you have links to any good descriptions of these best practices?
> That'd be helpful.
Not a lot as links, as mostly they are "community knowledge" among our
various teams, but here's a couple for each that I can find relatively
quickly:
For Maven:
* Version ranges considered harmful [1] [2] [3] [4] (and probably more);
we disallow them within our own products for stability reasons
* Transitive-by-default causes problems in mid to large projects due to
extensive conflicts [can't find the discussion...]; fix is to use and
verify exclusions, specify "provided" scope, and use
maven-enforcer-plugin [5] to ban transitive dependencies
For OSGi:
* Using the full capabilities of range dependencies can cause resolution
to be NP-complete; best practice is to use ranges in a more restricted
manner [6]
* Require-Bundle not recommended due to lack of hiding non-public
packages among other things [no link] (however, to be fair this is only
due to the way Require-Bundle was designed; it's not an inherent flaw,
but it is a best practice not to use it, hence it fits the criteria)
As with many so-called "best practices" there are those who disagree
with some or all of them; I'm not going to argue the finer points of
each one. I'm just pointing out that just copying a given mechanism and
adapting it straight to a somewhat similar but also somewhat different
use case is doubly dangerous - on one hand, it is hard to know what went
into the design of these mechanisms; and on the other hand, there is a
considerable base of knowledge that comes from third parties (or just
the general public) that sheds additional light on the pros and cons of
these mechanisms as well.
[1]
http://maven.40175.n5.nabble.com/Version-ranges-not-working-td5723909i40.html
[2] http://stackoverflow.com/a/7169847/2033093
[3] http://stackoverflow.com/a/3882490/2033093
[4] http://grokbase.com/p/maven/users/129vwgkd1c/version-ranges-not-working
[5]
http://maven.apache.org/enforcer/enforcer-rules/banTransitiveDependencies.html
[6] http://wiki.apidesign.org/wiki/RangeDependenciesAnalysed
--
- DML
More information about the jigsaw-dev
mailing list