<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Jun 3, 2014 at 1:30 PM, Tristan Tarrant <span dir="ltr">&lt;<a href="mailto:ttarrant@redhat.com" target="_blank">ttarrant@redhat.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On 03/06/2014 11:35, Sanne Grinovero wrote:<br>
&gt; On 3 June 2014 09:57, Mircea Markus &lt;<a href="mailto:mmarkus@redhat.com">mmarkus@redhat.com</a>&gt; wrote:<br>
&gt;&gt; On Jun 3, 2014, at 8:53, Tristan Tarrant &lt;<a href="mailto:ttarrant@redhat.com">ttarrant@redhat.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt;&gt; Dear all,<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; on Thursday I issued a PR [1] to introduce Uber Jars, i.e. single jars<br>
&gt;&gt;&gt; which wrap our multitude of jars and some of the transitive<br>
&gt;&gt;&gt; dependencies, but it was (rightly) pointed out that we should have a<br>
&gt;&gt;&gt; little discussion here first.<br>
&gt; thanks!<br>
&gt;<br>
&gt;&gt;&gt; Firstly, I&#39;m using the maven shade plugin which repackages multiple jars<br>
&gt;&gt;&gt; into one with:<br>
&gt;&gt;&gt; - automatic transitive resolution<br>
&gt;&gt;&gt; - the ability to include/exclude certain jars<br>
&gt;&gt;&gt; - move classes if necessary to other packages to avoid conflicts<br>
&gt;&gt;&gt; - rewrite the POM with the new dependencies.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Here is my global strategy:<br>
&gt;&gt;&gt; - define a set of uber-jars (see below)<br>
&gt;&gt;&gt; - include all non-optional dependencies in each uber-jar except for the<br>
&gt;&gt;&gt; specification Jars (e.g. javax.transaction and javax.persistence)<br>
&gt;&gt;&gt; - rename some internal-only dependencies to avoid conflicts<br>
&gt;&gt;&gt; - uber jars MUST NOT inherit from infinispan-parent (too much cruft in<br>
&gt;&gt;&gt; there) but only from infinispan-bom.<br>
&gt; What is the definition of an &quot;internal-only&quot; dependency?<br>
&gt; I really like the intention but renaming seems quite dangerous.<br>
&gt;<br>
&gt; For example, JGroups is quite internal but doing so it means the user<br>
&gt; could not create a custom Protocol and define it in his configuration<br>
&gt; file.<br>
&gt; Also I suspect several frameworks rely on reflection to &quot;wire-up&quot; at<br>
&gt; boot time (like JGroups does with Protocol class names), so if we&#39;re<br>
&gt; in the business of relocating classes, this should be followed by<br>
&gt; integration tests.<br>
</div></div>The only dependency which currently &quot;fits&quot; my definitions is<br>
jboss-logging. It is only used internally and its APIs are not<br>
&quot;re-exported&quot;.<br>
My PR also includes a simple integration test for the &quot;embedded&quot; case. I<br>
will obviously integrate it with tests with the others once we agree on<br>
the structure.<br>
<div class="">&gt;&gt; Just for my own understanding, what is the rationale behind this?<br>
</div>Users who don&#39;t use a dependency management system (i.e. Maven, Ivy,<br>
etc) can write an application just by adding a &quot;single&quot; jar.<br>
<div class="">&gt;&gt;<br>
&gt;&gt;&gt; The Uber Jars<br>
&gt;&gt;&gt; - infinispan-embedded-all (infinispan-commons, infinispan-core, jgroups,<br>
&gt;&gt;&gt; jboss-marshalling-osgi, jboss-logging, infinispan-cachestore-jdbc,<br>
&gt;&gt;&gt; infinispan-cachestore-jpa, infinispan-cachestore-leveldb)<br>
&gt; I wouldn&#39;t call a package &quot;-all&quot; if it&#39;s missing some things. For<br>
&gt; example, without Query functionality this &quot;All&quot; is actually a very<br>
&gt; limited subset ;-)<br>
&gt;<br>
&gt; WDYT &quot;infinispan-embedded&quot;<br>
</div>Ok.<br>
<div class="">&gt;&gt;&gt; - infinispan-remote-all (infinispan-commons, infinispan-client-hotrod,<br>
&gt;&gt;&gt; commons-pool, jboss-marshalling-osgi, jboss-logging,<br>
&gt;&gt;&gt; infinispan-remote-query-client, infinispan-query-dsl,<br>
&gt;&gt;&gt; infinispan-protostream, protobuf-java)<br>
&gt; Same objection on the &quot;-all&quot; naming.<br>
&gt; I&#39;d suggest &quot;infinispan-client&quot;.<br>
</div>Ok<br>
<div class="">&gt;&gt;&gt; - infinispan-query-all (infinispan-query, infinispan-query-dsl,<br>
&gt;&gt;&gt; hibernate-hql-parser, antlr, stringtemplate, hibernate-hql-lucene,<br>
&gt;&gt;&gt; hibernate-search-engine, infinispan-lucene-v4,<br>
&gt;&gt;&gt; hibernate-search-analyzers, lucene*, solr*, avro, jackson-core,<br>
&gt;&gt;&gt; jackson-mapper, paranamer, apache-compress, infinispan-lucene-directory,<br>
&gt;&gt;&gt; hibernate-search-infinispan, hibernate-commons-annotations). This<br>
&gt;&gt;&gt; package will depend on infinispan-embedded-all and we should only make a<br>
&gt;&gt;&gt; Lucene v4 version).<br>
&gt; If you make only a Lucene V4 version that&#39;s not going to work with<br>
&gt; master as it&#39;s today, my patches to upgade the Query engine to use<br>
&gt; Lucene V4 are not integrated yet. (And if it&#39;s meant for a Lucene4<br>
&gt; target, then you don&#39;t need Solr)<br>
</div>I added solr since that is what my aging neuron remembered. Shade<br>
actually pulls in the dependency tree automatically so I don&#39;t have to<br>
think about these things (and the Infinispan Query dependency hierarchy<br>
is hairier than a sea otter).<br>
<div class="">&gt; More importantly: is the user meant to use these as Either/OR or as<br>
&gt; additive packages? From the dependencies you listed it looks like<br>
&gt; additive packages, but I think the name suggests that using<br>
&gt; &quot;infinispan-query-all&quot; you have all what&#39;s needed.<br>
<br>
</div>infinispan-embedded-query would still depend on infinispan-embedded, so<br>
the user would require both jars. For the maven user, just depending on<br>
infinispan-embedded-query will do the trick, since infinispan-embedded<br>
would be a transitive.<br></blockquote><div><br></div><div>Interesting, I thought the uber jars would only be relevant for non-Maven users.</div><div>So we&#39;d also have a POM in the Maven repo that Maven users can reference, for each uber jar?</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class=""><br>
&gt; Much simpler this way, so why not making this the default packaging?<br>
&gt;<br>
</div>The &quot;uber&quot; jars are what we should advertise in our quickstarts, docs,<br>
etc. Obviously the single underlying jars would still be deployed to maven.<br>
<span class="HOEnZb"><font color="#888888"><br>
Tristan<br>
</font></span><div class="HOEnZb"><div class="h5">_______________________________________________<br>
infinispan-dev mailing list<br>
<a href="mailto:infinispan-dev@lists.jboss.org">infinispan-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/infinispan-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/infinispan-dev</a><br>
</div></div></blockquote></div><br></div></div>