If I'm understanding this correctly, this sounds like a bad idea.
While it does make the 2.x -> 3.x transition easier, it creates a
bigger issue for when you go from 2.x -> 2.y.  Personally I always
find it very annoying when software makes big changes like this on a
minor release, since it certainly goes against the spirit of semantic
versioning.

This change is better documented in a "migrate from 2.x to 3.x" page.

-Robert Middleton

On Sun, Jan 19, 2025 at 12:17 PM Piotr P. Karwasz
<pi...@mailing.copernik.eu> wrote:
>
> Hi Ralph,
>
> On 19.01.2025 17:55, Ralph Goers wrote:
> > I must be misunderstanding.  IIUC you are proposing that to eliminate 
> > optional dependencies we create a bunch of empty jars, presumably with a 
> > pom that has the dependency as required. How exactly does that help?  
> > Doesn’t that new, empty artifact just become an optional dependency? Isn’t 
> > it required during the build to allow the dependency to be resolved?
>
> As you remark, the optional dependencies in `log4j-core` must remain (at
> least at compile time, so they must be either `provided` or
> `compile+optional` like now). What I am proposing is to create a new
> `log4j-async-logger` artifact with a non-optional dependency on
> `com.lmax:disruptor`. We should then change the installation
> documentation for async loggers[1] and ask users to add:
>
>
> <dependency>
>
>    <groupId>org.apache.logging.log4j</groupId>
>
>    <artifactId>log4j-async-logger</artifactId>
>
>    <scope>runtime</scope>
>
> </dependency>
>
>
> The advantage of such a change is that:
>
> * It makes the upgrade to Log4j Core 3 trivial (the same dependency is
> required in Log4j Core 3[2])
>
> * Users no longer have to remember what `disruptor` is and why they
> added it to their application. They will upgrade the version of
> `disruptor` each time we upgrade it.
>
> Gradle has a special way to treat optional dependencies[3], this
> proposal is the closest Maven-equivalent I could find.
>
> Piotr
>
> [1] https://logging.apache.org/log4j/2.x/manual/async.html#installation
>
> [2] https://logging.apache.org/log4j/2.x/manual/async.html#installation
>
> [3] https://blog.gradle.org/optional-dependencies
>

Reply via email to