Bazel could be interesting, but does anyone here know how to configure it?
On Fri, 11 Jun 2021 at 15:00, Volkan Yazıcı <volkan.yaz...@gmail.com> wrote: > > Since all of us are on board with the idea – except Gary, whom I will > address below – shall we work out the structuring? I already shared my > proposal. What is your preference? Once we agree on that, I can create > relevant Jira tickets, also for the website & manual updates. I can take > the responsibility of executing the plan. > > Gary, I agree with your concerns regarding the build tool. Right now there > are ~50 modules in the master. As long as we execute each module's tests > sequentially, which is inevitable in Maven and Gradle, I don't think we can > shave that down to 10 minutes or so. Not to mention the compile time > itself. Unless we migrate to something substantially fine-grained (e.g., > Bazel), I can't think of this happening with Maven or Gradle. Migrating to > such exotic solutions have their own trade-offs too. > > On Fri, Jun 11, 2021 at 10:29 AM Volkan Yazıcı <volkan.yaz...@gmail.com> > wrote: > > > To start the discussion for breaking up the modules into separate > > projects, I propose the following structure: > > > > *logging-log4j* > > log4j-1.2-api > > log4j-api > > log4j-bom > > log4j-core > > log4j-core-its > > log4j-gctests > > log4j-iostreams > > log4j-layout-template-json > > log4j-perf > > log4j-plugins > > > > *logging-log4j-appender* > > log4j-cassandra > > log4j-couchdb > > log4j-csv > > log4j-flume-ng > > log4j-mongodb3 > > log4j-mongodb4 > > log4j-smtp > > > > *logging-log4j-appender-jdbc* > > log4j-jdbc (?) > > log4j-jdbc-dbcp2 (?) > > log4j-jpa > > > > *logging-log4j-appender-queue* > > log4j-jeromq > > log4j-jms > > log4j-kafka > > log4j-redis > > > > *logging-log4j-binding* > > log4j-jcl > > log4j-jpl > > log4j-jul > > log4j-liquibase > > log4j-slf4j18-impl > > log4j-slf4j-impl > > log4j-to-slf4j > > > > *logging-log4j-container* > > log4j-docker > > log4j-kubernetes > > > > *logging-log4j-gui* > > log4j-jmx-gui > > > > *logging-log4j-jee* > > log4j-appserver > > log4j-taglib > > log4j-web > > > > *logging-log4j-layout-jackson* > > log4j-layout-jackson > > log4j-layout-jackson-json > > log4j-layout-jackson-xml > > log4j-layout-jackson-yaml > > > > *logging-log4j-osgi* > > log4j-osgi > > > > *logging-log4j-spring* > > log4j-spring-boot > > log4j-spring-cloud-config > > > > Note that above breakdown contains every available module in master, > > except log4j-samples, which has the following sub-modules: > > > > log4j-samples-loggerProperties (contains 2 very trivial example classes, > > log4j-core [tests] contains more comprehensive alternatives) > > log4j-samples-flume-remote (flume-specific) > > log4j-samples-flume-embedded (flume-specific) > > log4j-samples-flume-common (flume-specific) > > log4j-samples-configuration (contains 3 very trivial example classes, > > log4j-core [tests] contains more comprehensive alternatives) > > > > I propose removing log4j-samples module and, if necessary, moving > > Flume-related parts to the log4j-flume-ng. > > > > I have kept log4j-layout-template-json in the logging-log4j project, since > > it has no external dependencies. This said, I am okay with moving it to a > > separate logging-log4j-layout project. > > > > Please share your remarks. Eventually, I want to translate this into a > > JIRA ticket. > > > > Kind regards. > > > > On Thu, Jun 10, 2021 at 5:43 PM Ralph Goers <ralph.go...@dslextreme.com> > > wrote: > > > >> Gary, > >> > >> I am -1 to almost every item on your list. > >> > >> When I said break up I meant mostly moving most everything outside of > >> log4j-core, > >> log4j-api, and log4j-plugins into separate repos such as > >> logging-log4j-nosql, > >> logging-log4j-pubsub, etc. These would not require groupId or artifactId > >> changes > >> although the versioning would potentially be out of synch with the main > >> releases > >> as each would be on its own release cycle. This would greatly simplify > >> releasing > >> core but it would require careful though on what the versions would be > >> for the > >> “extra” projects. > >> > >> As for further breaking up core, that should revolve primarily around > >> reducing the > >> dependencies listed in module-info.java to the bare minimum. > >> > >> There will be no log4j3. We cannot change groupIds, artifactIds, or > >> package names, > >> other than what has been done to support JPMS. A world in which a log4j2 > >> and > >> log4j3 try to co-exist would be an unmitigated disaster. Commons can > >> happily get > >> away with that. Log4j cannot. > >> > >> If an application had both log4j2 and log4j3 jars present they would end > >> up with > >> multiple LoggerContexts, multiple Configurations, and multiple Appender > >> Managers > >> where today there is only a single one. That would mean two instances of > >> the same > >> configuration file would be active at once. So when it is time to > >> rollover it would > >> be performed twice instead of once as a simple example. For this reason > >> we > >> CANNOT break backward compatibility. > >> > >> However, we are talking about runtime backward compatibility. The Plugin > >> system > >> was changed internally in 3.0 so that plugins compiled with 3.0 use > >> ServiceLoader > >> instead of the data file. However, it will still find and use 2.x plugins > >> when they are > >> present and can be located. > >> > >> The meaning of this should be clear. It is 3.0 because to take advantage > >> of its > >> features you may have to make code changes. But it will tolerate code > >> that was > >> compiled for 2.x. > >> > >> The reasons why it is 3.0 and not a simple upgrade to 2.x are: > >> 1. Plugins must be compiled with 3.0 to use the ServiceLoader packaging. > >> 2. It requires Java 11. We still need to support Java 8. > >> 3. It fully supports JPMS. Release 2.x does not. It is likely that > >> applications with > >> multiple Module Layers might not be able to find all the plugins. Adding > >> full JPMS > >> support to 2.x simply isn’t possible. > >> 4. It will be introducing new DI injection features not present in 2.x. > >> > >> Major releases do not imply that you are completely breaking backward > >> compatibility. > >> They imply that some kind of compatibility is broken, which we are doing > >> by > >> requiring coding changes to Plugins to compile with 3.0. This means we > >> need to > >> leave in any classes or methods that existing plugins might have used. It > >> means > >> we have to continue using our own Supplier unless it can be verified that > >> an > >> application using the Supplier in 2.x can run with 3.0 even if it is > >> converted to > >> java.util.function.Supplier. I have no idea if the code the compiler > >> generates > >> for lambdas actually implements the declared interface or not. > >> > >> Log4j 3.0 is a major change. But that doesn’t mean we can screw our users > >> by > >> breaking everything. > >> > >> Ralph > >> > >> > >> > >> > On Jun 10, 2021, at 6:32 AM, Gary Gregory <garydgreg...@gmail.com> > >> wrote: > >> > > >> > These are all IMOs of course, YMMV: > >> > - What's the rush to 3.0? > >> > > >> > - I'm all for breaking up the core and other artifacts into more > >> > artifacts based on their dependencies requirement such that depending > >> > on Log4j 3 does not "suck in the world", for example, I should be able > >> > to depend on a currently non-existent "log4j3-console" and only bring > >> > in a tiny bit of code (API, a tiny core, and no plugin system). I did > >> > a fair amount of breaking up of various artifacts a while back. > >> > > >> > - 3.0 is a MAJOR release that gives us the opportunity to drop > >> > deprecated APIs and code like our custom functional interfaces: > >> > Supplier and so on. If we do not clean up, then there is no point in a > >> > major release. Basically, I expect to break binary and source > >> > compatibility. > >> > > >> > - 3.0 must be in a new package namespace and new Maven coordinates. I > >> > MUST be able to run Log4j 1, 2, and 3 in the same class loader. I can > >> > already run Log4j 1 and 2 side by side which is good. > >> > > >> > Gary > >> > > >> > On Thu, Jun 10, 2021 at 8:47 AM Volkan Yazıcı <volkan.yaz...@gmail.com> > >> wrote: > >> >> > >> >> Ralph, count me in for such a change. I really want to have separate > >> >> sub-projects for such modules. This will extremely speed up > >> build/release > >> >> times too, which is nowadays of uttermost importance to my peace of > >> mind > >> >> while developing. > >> >> > >> >> This said, I am reluctant about such a major change when we are this > >> close > >> >> to the 3.0.0 release. I guess this would definitely postpone the 3.0.0 > >> >> release to 2022. This will probably break the backward compatibility at > >> >> least for the artifact groupId, am I wrong? Not to mention that the > >> entire > >> >> website needs to be adapted to this multi-project setup too. Is there > >> >> anything else? > >> >> > >> >> On Thu, Jun 3, 2021 at 5:31 PM Ralph Goers <ralph.go...@dslextreme.com > >> > > >> >> wrote: > >> >> > >> >>> Yeah - I have proposed moving all these extra integrations to a > >> separate > >> >>> repo but > >> >>> I’ve never gotten consensus. I’d prefer to have a project like > >> >>> log4j-pubsub where > >> >>> things like JMS, JeroMQ, etc can go live, log4j-nosql for all the > >> nosql > >> >>> modules, etc. > >> >>> The problem seems to be that some people believe that we would have > >> to cut > >> >>> a > >> >>> release of those every time we do a log4j release. > >> >>> > >> >>> If we were to do that 3.0 would be the right time. > >> >>> > >> > > >> > >> > >>