Thanks for the feedback Zoltan!

Unlike Gradle, in Maven we cannot have a dependency declared at the same
time as test & runtime (unfortunately).
Nevertheless, I believe the combination runtime + optional is a better
option for the declaration of JDBC drivers.

I raised HIVE-25701 [1] and raised a PR [2] with the proposed changes.
Let's continue the discussion there.

Best,
Stamatis

[1] https://issues.apache.org/jira/browse/HIVE-25701
[2] https://github.com/apache/hive/pull/2790

On Fri, Nov 12, 2021 at 9:47 AM Zoltan Haindrich <k...@rxd.hu> wrote:

> Hey Stamatis!
>
> Makes sense to me; I think we already have all of the jdbc drivers in the
> test scope - but adding runtime is a great idea!
>
> I had some memories about some letter that we are using Cat-X stuff in
> Hive and we should remove it - I think HIVE-23284 was opened in response to
> that.
> However...if that comes back after these changes we may ask to update the
> scanner because we only use it in test runtime.
>
> cheers,
> Zoltan
>
> On 11/10/21 11:59 AM, Stamatis Zampetakis wrote:
> > Hi all,
> >
> > Currently, we have some (MariadDB, MySQL, Oracle) Category-X [1] JDBC
> > drivers in some parts of the project. Sometimes they are included using
> the
> > dependency section with <scope>test</scope> and some others by relying on
> > download-maven-plugin [2].
> >
> > Using test scope is kind of OK but it comes with the risk that we may
> write
> > code which needs JDBC driver classes in order to compile and this could
> be
> > seen as a violation of the AL2 when the Hive source code is released.
> From
> > my understanding, the use of download-maven-plugin, first introduced in
> > HIVE-23284 [3], was an attempt to remedy this problem. Now it comes back
> > since we started using the test scope again.
> >
> > We have a few other drivers, namely Postgres, MSSQL, in test scope but
> are
> > less important since they have BSD-2 and MIT licenses which are not
> > problematic.
> >
> > I would expect that in the context of Hive *all* the JDBC drivers should
> be
> > declared using the <scope>runtime</scope>. This would remove the need to
> > use the download-maven-plugin and would simplify the inclusion of drivers
> > in the build. We are not risking to create derivatives of GPL work since
> > the dependency is not present at compilation so we cannot really use the
> > respective classes in our code.
> >
> > Moreover, driver dependencies could be marked optional, which is actually
> > true, and that would solve any potential licensing issues [4].
> >
> > I would like to propose to use the following declaration for all JDBC
> > drivers no matter the license.
> >
> > <dependency>
> >    <groupId>org.mariadb.jdbc</groupId>
> >    <artifactId>mariadb-java-client</artifactId>
> >     <version>${mariadb.version}</version>
> >     <scope>runtime</scope>
> >     <optional>true</optional>
> > </dependency>
> >
> > This will make things more uniform, solve any potential licensing issues,
> > and when in the future someone copy-pastes dependencies to include new
> > drivers there will be no violation of AL2.
> >
> > What do you think?
> >
> > Best,
> > Stamatis
> >
> > [1] https://www.apache.org/legal/resolved.html#category-x
> > [2]
> >
> https://search.maven.org/artifact/com.googlecode.maven-download-plugin/download-maven-plugin/1.6.1/jar
> > [3] https://issues.apache.org/jira/browse/HIVE-23284
> > [4] https://www.apache.org/legal/resolved.html#optional
> >
>

Reply via email to