According to comments in the POMs, the phoenix-VERSION-client/server.jar
symlinks are deprecated. (The symlinks were already there BTW, I just
updated their targets)
I kind of agree with the deprecation, as permuting the components of the
jar name to distinguish the shaded and non-shaded versions feels unintitive
and error-prone.

The phoenix-xx-VERSION.jars were meant to be the unshaded JARs. However,
that doesn't make sense for the client and server artifacts, as those are
just shaded views of core.

Removing the useless unshaded client and server JAR maven artifacts would
free up those names, and we could create both symlinks in the assembly that
you suggest.

This would also mean that maven wouldn't return a useless artifact for
phoenix-client and phoenix-server without classifiers, which would also be
one less unpleasant surprise to users.

So the user could use the canonical maven artifact filename, or one of the
two (or three if we keep the deprecate old name) symlinks from the assembly.
If she wanted to use an artifact from artifact, she'd have to specify the
hbase version as classifier to get the correct client. (this doesn't change)

The same naming solution (or whatever we agree on) should be extended to
PQS and connectors as well.

On Wed, Mar 25, 2020 at 8:01 PM Josh Elser <els...@apache.org> wrote:

> Background: IstvanT has done a lot of really great work to clean up the
> HBase 2.x compatibility issues for us. This lets us move away from the
> HBase-version-tagged releases of Phoenix (e.g. HBase-1.3, HBase-1.4,
> etc), and keep a single branch which can build all of these.
> Building master locally, I noticed the following in my tarball,
> specifically the jars
> <snip>
>    phoenix-5.1.0-SNAPSHOT-hbase-2.2-client.jar ->
> phoenix-client-5.1.0-SNAPSHOT-hbase-2.2.jar
>    phoenix-5.1.0-SNAPSHOT-hbase-2.2-server.jar
>    phoenix-5.1.0-SNAPSHOT-server.jar
>    phoenix-client-5.1.0-SNAPSHOT-hbase-2.2.jar
> </snip>
> I think there are two things happening here. One is that the
> phoenix-5.1.0-SNAPSHOT-server.jar is "empty" -- it's not the shaded
> server jar, but the hbase-2.2-server.jar is the correct jar. I think
> this is just a bug (you agree, Istvan?)
> The other thing I notice is that it feels like Istvan was try to
> simplify some things via symlinks. My feeling was that we could take
> this a step further. What if, instead of just having "hbase-x.y" named
> jars, we give symlinked jars as well. Creating something like...
> <snip>
>    phoenix-5.1.0-SNAPSHOT-client.jar ->
> phoenix-client-5.1.0-SNAPSHOT-hbase-2.2-client.jar
>    phoenix-client-5.1.0-SNAPSHOT-hbase-2.2-client.jar
>    phoenix-5.1.0-SNAPSHOT-server.jar ->
> phoenix-server-5.1.0-SNAPSHOT-hbase-2.2-server.jar
>    phoenix-server-5.1.0-SNAPSHOT-hbase-2.2-server.jar
> </snip>
> This would make downstream applications/users a little more simple --
> not having to worry about the HBase version in use (since their concerns
> are what version of Phoenix is being used, instead). We could even
> introduce non-Phoenix-versioned symlinks for these jars (e.g.
> phoenix-client.jar and phoenix-server.jar). I think this also moves us a
> little closer to what we used to have.
> Sounds like a good idea to others?

Reply via email to