Description
Currently the jars in the binary release's server/lib, server/lib/ext and WEB-INF/lib directories are manually de-duplicated, and it's very fragile and only works because of transitive dependencies in SolrJ.
One example of this is done in SOLR-16072.
Since we have the full-power of Gradle, we should be able to automate this.
I tried to do a first-pass where all shared-libs between the server and web-app are put into server/lib/ext, and removed from server/lib and WEB-INF/lib. The problem with this approach is that Jetty does not allow webapps to access the Jetty libraries. Therefore this approach didn't buy much since we would have to write exceptions for most of the shared libraries, since they are jetty server libraries.
I settled on something closer to the current approach. Two configurations in server/build.gradle, serverLib and libExt. in core/build.gradle there is an additional configuration jettyClientImplementation, which implementation inherits from. Both sets libraries are removed from WEB-INF/lib when it is built, but because of the jetty library limitation, jettyClientImplementation libraries are added back in. This is why they are specified separately in core/build.gradle.
Therefore the only time a developer has to think about shared dependencies is when adding a client-jetty-library to Solr Core.
Note: This is somewhat complicated by the fact that solr-core has Jetty Server libraries though it is never used during runtime. They are there just because the embedded Solr Server lives in solr-core. We should split this out into another package, solr-embedded so that the dependencies make more sense. Will create a separate issue for this.
Attachments
Issue Links
- is related to
-
SOLR-16158 Simplify solr-core dependencies, remove duplicate jars
- Closed
- supercedes
-
SOLR-16072 Metrics: solr.jetty disappeared in 9
- Closed
- links to