Hey!
Uber jars have been around for quite a while but some old problems are
still biting our ankles. The biggest problem is JBoss Logging... But before
diving into the technical discussion, I would like to clarify how do we
treat Uber Jars and how other (let's call them "extra") modules should
integrate with them...
How Uber Jars look like:
- All Uber Jar dependencies are declared as:
- provided - those are APIs which should be available on your
container
- optional - all other dependencies
- compile - JTA (I'm not sure why, but probably because this is a
required API). I think it should be changed to provided at some point.
- Uber Jars have (almost) no dependencies (apart from JTA)
- Uber Jars contain everything to get a standard application running
with ISPN in a single jar
Now the biggest question is how to integrate other extra modules with them
- for example Spring or Cache Stores? Here are the options:
- Not integrate at all... users should use standard (small) jars in such
use cases
- This one has a big impact on our users, so I would assume no
- All extra modules should shade everything they need and provide their
own Uber Jars (like Spring Uber Jar = ISPN Core + Spring)
- This one might be really hard to maintain, so I would also vote for
no.
- All extra modules should integrate with small jars and Uber Jars (but
not both at the same time). An example application might want to add
Spring-embedded and Infinispan-embedded to it's classpath and it's ready to
go. Alternatively it could add Spring-embedded + infinispan-core + whatever
is needed. Adding both infinispan-embedded and infinispan-core is
prohibited.
- Easy for the users, a bit harder for us. My vote goes here.
Could you please share some thoughts whether this makes sense or not? Once
we achieve common understanding - I'll propose some technical solutions.
Thanks
Sebastian