Hi Iceberg devs,

I see that guava and slf4j-api are compileOnly dependencies. This implies
that they are not required at runtime and will not be resolved when
resolving Iceberg artifacts. So it might very well be the case that, say
for example, for iceberg-spark, the guava dependency that could be used
would be coming from Spark itself which could very well be different from
what we intended.

I think these should be changed to compile as these are required
dependencies, thoughts?

Today, iceberg-runtime and iceberg-presto-runtime artifacts will not
include these dependencies as they are declared as compileonly and we have
configured shadow tasks to pick dependencies from "shadow" configuration.

I think these slf4j and guava should be part of these iceberg runtime
artifacts, no?

Also, iceberg-[presto]-runtime reconfigure/recreates "shadow" configuration
https://imperceptiblethoughts.com/shadow/configuration/#configuring-the-runtime-classpath.
This configuration is reserved by Shadow task to add transitive
dependencies which are not to be bundled in the fat jar.

I think that we should not recreate "shadow" configuration and use standard
runtime/compile configuration for shadow task to use.

My last comment is what is the expected/recommended way to use Iceberg
artifacts in a runtime say Spark. Should thin jars with transitive
dependencies be used or an Iceberg runtime with shaded dependencies [most
common dependencies which could conflict e.g guava, avro] be used?

-R

Reply via email to