FWIW, Some of this is borne out by looking at the stats at https://repository.apache.org/#central-stat <https://repository.apache.org/#central-stat>. The good news is that the downloads are 3 times what they were a year ago. But you can see that the usage of these extra components is 1000 times smaller than log4j-core.
Ralph > On Jan 21, 2018, at 9:35 PM, Ralph Goers <ralph.go...@dslextreme.com> wrote: > > Remko, > > I am all for speeding up the build. I have been complaining about this for > well over a year and it keeps getting worse with every release. The compile > of log4j-core takes less than 20 seconds on the machine provided by my > employer. On the same machine the tests take 11 minutes. On this machine the > whole build takes about 16 minutes. This is a bit frustrating as I perform a > complete build at least once before I commit 95% of my changes. > > My personal machine, which is where I run the release builds, is over 6 years > old now and is considerably slower. On that machine a “normal” build > currently takes . In addition, the release build does perform more work and > runs through the build twice (although I am not sure it runs the tests twice > anymore) so it is considerably longer. Also with every release we add new > unit tests. It wasn’t too long ago that I was marveling that we had over 900 > unit tests. We now have over 2,400. In addition, each release also requires > building the web site, which can take a long time as well. > > While I suspect about 1/3 of the time of a “normal” build could be cut by > executing some stuff in parallel that “fix” will only last for a short while > as we keep adding components related to third party projects (Mongo, > Cassandra, DBCP2, etc) that most likely don’t change much once they are done. > I can’t remember the tag library module required changes. Many of them only > change when the third party project changes (such as Mongo 2 vs Mongo 3). On > that note I really don’t want to see Mongo 2 and Mongo 3 projects as part of > the Log4j main build. > > In addition to speeding up the build I would prefer to have the main log4j > releases follow the 80/20 rule - they should contain only the stuff 80% of > our users will use. I would venture a guess that at least 80% only use the > File and Console appenders. > > While we may not have as firm of a plugin API as Maven does, almost > everything a user should need to create an Appender, Layout, Lookup or Filter > should be as backward compatible as the Log4j API. If we can’t guarantee > backward compatibility for those components we have a big problem as users > are creating these kinds of components all the time. We cannot be breaking > them. So from that standpoint we should have no problem moving those kinds of > plugins out of the main build. > > Ralph > > > >> On Jan 21, 2018, at 5:51 PM, Remko Popma <remko.po...@gmail.com> wrote: >> >> Log4j2 is not like Maven. Maven (I assume) has a plugin API. Log4j2 modules >> depend on the internals of log4j-core. >> >> I agree with Gary that not being able to verify that a core change doesn’t >> break any modules when they live outside the main project is a valid >> concern. >> >> Why are we talking about modules and repos when the issue is that it takes >> too long to do a release? Maven reports most modules as taking a handful of >> seconds to build. >> >> I keep thinking: >> >> 1. We’re running the tests twice during a release. Let’s change this. >> Logically, once should be enough. What prevents us from doing this? >> >> 2. Core tests take unnecessarily long. By running some tests in parallel and >> some other tests without forking I have hope we can run all core tests in >> ~15 minutes. >> >> Won’t those two changes be much more impactful in reducing the release time >> than any amount of module or repo reshuffling? >> >> Remko >> >> (Shameless plug) Every java main() method deserves http://picocli.info >> >>> On Jan 22, 2018, at 8:14, Ralph Goers <ralph.go...@dslextreme.com> wrote: >>> >>> I am very much against the idea of a single repo. Yes, you can have >>> multiple projects in the repo but I am not sure how that can be sanely >>> released. I much prefer the model that Maven has taken. They are now using >>> gitbox [1] which seems to allow GitHub to be the primary repo. Every Maven >>> plugin is individually released. Scroll down the link below to the Maven >>> section and you can see all the plugin repos. >>> >>> The upside to this is that it are: >>> 1. It is far easier to perform releases of the individual components. >>> 2. It is much easier to accept plugin contributions. >>> The downsides are: >>> 1. A page like https://maven.apache.org/plugins/ >>> <https://maven.apache.org/plugins/> is needed to keep track of the plugin >>> versions. >>> 2. It could make sense to have log4j-parent and log4j-bom projects. The >>> first to help keep the builds similar and the second to help customers pick >>> up the latest versions. >>> >>> Ralph >>> >>> [1] https://gitbox.apache.org/repos/asf >>> <https://gitbox.apache.org/repos/asf> >>> >>>> On Jan 21, 2018, at 8:55 AM, Gary Gregory <garydgreg...@gmail.com> wrote: >>>> >>>> Hi All, >>>> >>>> I am writing this to in an effort to understand how we can manage and grow >>>> Log4j. I use the term 'grow' not in the 'bigger is better' sense but more >>>> in the maturing sense. >>>> >>>> I am prompted to write this by Ralph's comment that log4j-core and the main >>>> repo is too big and that releases take too long make, partially prompted by >>>> my addition of a new module called log4j-jdbc-dbcp2 which currently >>>> contains one small class with a dependency on Apache Commons DBCP 2. >>>> >>>> I would like to express my gratitude at Ralph's efforts to revitalized >>>> Log4j and performing most release management duties. Thank you Ralph! >>>> >>>> I can see two main orthogonal issues: >>>> - The size of the git repo. >>>> - The size of the log4j-core module. >>>> >>>> Ralph has proposed that new modules like log4j-jdbc-dbcp2 be moved to >>>> another 'plugin' repo. >>>> >>>> I really dislike this idea: >>>> - The plugin repo has never been released. Not that one releases a repo but >>>> you get the point. >>>> - How do you keep things in sync between repos and code when we have no >>>> official 'core' SPI. >>>> >>>> For my money, we should keep _everything_ in one repo. Good enough for >>>> Google, so good enough for me. What we release out of that repo is a >>>> different story and what I would like to discuss next. >>>> >>>> This is not the same as Maven plugins IMO but the case could be made for it >>>> I suppose where a lot/most plugins live in their own repos. It is not the >>>> same as with Maven IMO because our plugins rely on log4j-core and it's >>>> guts, for which we only make loose compatibility guarantees -- as opposed >>>> to log4j-core where we are strict(er). Maven OTOH, has a API for plugin >>>> auteurs. >>>> >>>> For example, log4j-jdbc-dbcp2 replies on the guts of log4j-core and we have >>>> no 'official' core SPI, so splitting it off into a separate repo would >>>> greatly increase the risk of it falling out of sync. It is just so much >>>> more easier to maintain when it is all in one repo. >>>> >>>> My proposal is to: >>>> >>>> - Put everything back into one repo (Chainsaw too?) >>>> - Define a core SPI for plugin writers where we make some statement about >>>> BC, more than the casual 'we try not break stuff.' >>>> - Defining what Log4j project 'components' we have and release based on >>>> that. For example, today, all of the main Log4j repo is one component with >>>> many modules. Chainsaw would be another component of the Log4j project. >>>> Maybe we need to redefine components: API, File, JDBC and so on. A >>>> component can have one of more module >>>> - Got for there. >>>> >>>> Thoughts? Help me flush this out? >>>> >>>> Thank you for reading! >>>> Gary >>> >> > > >