It'd probably be confusing to make a log4j-core-all that only works with
Java 7 and 8, too, so it'd have to be doable somehow. I wonder how
shaded/shadowed applications are supposed to work in Java 9?

On 24 April 2017 at 14:12, Ralph Goers <ralph.go...@dslextreme.com> wrote:

> Yeah, I have no idea how you would build the module-info.class file.
> module-info.java is compiled by the compiler and it performs checks to make
> sure the things being exported are really there. So you would need to have
> a maven module that unpacks all the classes and then compiles the
> module-info.java and then creates the uber jar for that to work.
>
> Ralph
>
> > On Apr 24, 2017, at 11:36 AM, Matt Sicker <boa...@gmail.com> wrote:
> >
> > It doesn't sound like there's a proper way to export a Java 9 module from
> > two separate JARs, though I'm not clear on the details. If we package up
> > the modules into a sort of log4j-core-all artifact, that'd be an assembly
> > detail for distribution.
> >
> > On 24 April 2017 at 13:19, Remko Popma <remko.po...@gmail.com> wrote:
> >
> >> I must be missing something, I don't see the problem. Users wouldn't
> have
> >> both the combined jar and the single-module jars on the classpath
> together,
> >> so there should not be an issue...
> >>
> >> For example, assume our current log4j-core jar is split up into
> >> * log4j-core-slim
> >> * log4j-core-appender-db
> >> * log4j-core-appender-mom
> >> * log4j-core-appender-net
> >>
> >> That is 4 jars where we used to have 1.
> >>
> >> Now, the combined jar ("log4j-core-all", for example) would have all
> >> classes of the above 4 jars.
> >>
> >> Users can then use log4j-core-all + log4j-api similar to how they
> >> currently do, no?
> >>
> >> Are you worried about users combining log4j-core-all with
> >> log4j-core-appender-db?
> >>
> >> Remko
> >>
> >> (Shameless plug) Every main() method deserves http://picocli.info
> >>
> >>> On Apr 25, 2017, at 2:55, Ralph Goers <ralph.go...@dslextreme.com>
> >> wrote:
> >>>
> >>> Guess what? If I am understanding Stephen correctly uber jars are not
> >> going to work as you can’t have multiple modules that export the same
> >> package.
> >>>
> >>> Ralph
> >>>
> >>>> On Apr 24, 2017, at 10:43 AM, Remko Popma <remko.po...@gmail.com>
> >> wrote:
> >>>>
> >>>> How many new modules are we talking about, concretely?
> >>>>
> >>>> Matt mentioned the StackOverflow questions about transitive
> dependencies
> >>>> etc, but I imagine splitting log4j-core into 5 or more new modules
> will
> >>>> also cause confusion... It won't be trivial for users to figure out
> >> which
> >>>> of the many modules they do or don't need. The coarse granularity of
> the
> >>>> current modules is a good thing for users.
> >>>>
> >>>> What problem are we trying to solve? And how can we solve it with the
> >> least
> >>>> disruption to our users?
> >>>>
> >>>> Would it be an idea, for example, to provide separate jars for the
> >> separate
> >>>> modules, but in addition create a combined jar (log4j-core-all) that
> >>>> contains all the classes in log4j-core as well as the classes in the
> new
> >>>> modules we split out from core?
> >>>>
> >>>>
> >>>>> On Tue, Apr 25, 2017 at 2:00 AM, Matt Sicker <boa...@gmail.com>
> wrote:
> >>>>>
> >>>>> I agree with Ralph here. I'm sure we'll figure out rather quickly
> which
> >>>>> modules are easy to put into rarely updated repositories.
> >>>>>
> >>>>>> On 24 April 2017 at 11:39, Ralph Goers <ralph.go...@dslextreme.com>
> >> wrote:
> >>>>>>
> >>>>>> I would prefer a hybrid approach.  First things should be moved to
> >>>>>> separate modules. Then, if they don’t seem to be modified frequently
> >> they
> >>>>>> can be moved to a separate repo. For example, I think it would be OK
> >> for
> >>>>>> the Flume Appender to be in a separate repo. It hasn’t changed in
> >> quite a
> >>>>>> while and I can’t remember the last time it was modified due to
> >> changes
> >>>>> in
> >>>>>> Log4j it has and while continue to change with changes made in Flume
> >>>>>> releases.  I imagine we have quite a few components that are
> similar.
> >>>>>>
> >>>>>> Ralph
> >>>>>>
> >>>>>>> On Apr 24, 2017, at 8:39 AM, Gary Gregory <garydgreg...@gmail.com>
> >>>>>> wrote:
> >>>>>>>
> >>>>>>> On Apr 24, 2017 2:38 AM, "Mikael Ståldal" <
> mikael.stal...@magine.com
> >>>
> >>>>>> wrote:
> >>>>>>>
> >>>>>>> I fully agree with Matt's both proposals.
> >>>>>>>
> >>>>>>> I'm skeptic to creating more repositories (than we already have)
> >>>>> though.
> >>>>>> I
> >>>>>>> think that we should start by splitting out modules from log4j-core
> >> and
> >>>>>>> keep those modules in the main repository with synchronized
> >> versioning
> >>>>>> and
> >>>>>>> releases, at least for the 2.9 release. We can always move those
> >>>>> modules
> >>>>>> to
> >>>>>>> other repositories later if we want to.
> >>>>>>>
> >>>>>>>
> >>>>>>> I do not like more repos either. Since we have already gone down
> the
> >>>>> more
> >>>>>>> modules road, I say we keep going.
> >>>>>>>
> >>>>>>> Gary
> >>>>>>>
> >>>>>>>
> >>>>>>> It is a lot of administrative work to create a new repository (as
> we
> >>>>> have
> >>>>>>> seen for log4j-scala), I don't want us to do all that work over and
> >>>>> over
> >>>>>>> again unless really necessary.
> >>>>>>>
> >>>>>>> We have a JIRA ticket for this:
> >>>>>>> https://issues.apache.org/jira/browse/LOG4J2-1650
> >>>>>>>
> >>>>>>> I have already started by breaking out log4j-server:
> >>>>>>> https://issues.apache.org/jira/browse/LOG4J2-1851
> >>>>>>>
> >>>>>>> I think the next step is to break out plugins (layouts and
> appenders)
> >>>>>> with
> >>>>>>> optional 3rd party dependencies into their own modules.
> >>>>>>>
> >>>>>>>
> >>>>>>>> On Sun, Apr 23, 2017 at 7:45 PM, Matt Sicker <boa...@gmail.com>
> >> wrote:
> >>>>>>>>
> >>>>>>>> I think I brought this topic up like 3 years ago when I was
> working
> >> on
> >>>>>>>> initial OSGi support, but now that we have 3 more years worth of
> >> code
> >>>>>>>> additions and optional features, I think this might be a more
> >>>>>> appropriate
> >>>>>>>> time to discuss it again in light of experience.
> >>>>>>>>
> >>>>>>>> Building log4j-core itself already takes a long time, and many
> >> plugins
> >>>>>>>> aren't updated very often at all. In the past, requiring users to
> >>>>> simply
> >>>>>>>> add log4j-core plus any transitive dependencies to use optional
> >>>>> features
> >>>>>>>> seemed to work well enough, but I still think that's a confusing
> >>>>>>>> distribution mechanism as demonstrated by the numerous bug reports
> >> and
> >>>>>>>> Stack Overflow posts regarding missing transitive dependencies for
> >>>>>> various
> >>>>>>>> features. I spent some time experimenting with Log4j Boot a little
> >>>>> while
> >>>>>>>> ago to help alleviate this problem, but this may be unnecessary if
> >> we
> >>>>>> can
> >>>>>>>> agree to modularize log4j-core itself.
> >>>>>>>>
> >>>>>>>> I have two different proposals, both of which can be used at the
> >> same
> >>>>>>> time.
> >>>>>>>>
> >>>>>>>> 1. Split out everything from log4j-core that requires 3rd party
> >>>>>>>> dependencies (except for AsyncLogger, though perhaps we could
> >> consider
> >>>>>>>> shading and renaming those classes like some other low level
> >> libraries
> >>>>>> do
> >>>>>>>> with JCTools). Ideally, I'd like to see each module have required
> >>>>>>>> dependencies instead of optional ones, so that if, for instance, I
> >>>>>> include
> >>>>>>>> a "log4j-config-yaml" dependency, I know that Log4j will support
> >> YAML
> >>>>>>>> configuration without having to specify the individual Jackson
> >>>>>>>> dependencies.
> >>>>>>>>
> >>>>>>>> 2. Split out from log4j-core a sort of log4j-spi module which
> >> defines
> >>>>>>>> interfaces, abstract classes, and annotations for plugins that
> would
> >>>>> be
> >>>>>>>> promoted to the same level of backwards compatibility guarantees
> as
> >>>>>>>> log4j-api. This would aid in cementing what we really wish to
> >> maintain
> >>>>>>>> compatibility with in the backend while allowing other modules to
> >> have
> >>>>>>> less
> >>>>>>>> strict guarantees.
> >>>>>>>>
> >>>>>>>> With proposal #1, I'd think that we could more easily start moving
> >>>>>> modules
> >>>>>>>> into separate repositories and release trains. Without #2, though,
> >>>>> this
> >>>>>>>> makes version support more annoying to handle, but that's what
> we'll
> >>>>>> face
> >>>>>>>> regardless as we separate more repositories. If we go this route,
> >> then
> >>>>>>>> there will be no need for a Log4j Boot subproject.
> >>>>>>>>
> >>>>>>>> What do you all think?
> >>>>>>>>
> >>>>>>>> --
> >>>>>>>> Matt Sicker <boa...@gmail.com>
> >>>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>> --
> >>>>>>> [image: MagineTV]
> >>>>>>>
> >>>>>>> *Mikael Ståldal*
> >>>>>>> Senior software developer
> >>>>>>>
> >>>>>>> *Magine TV*
> >>>>>>> mikael.stal...@magine.com
> >>>>>>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
> >>>>>>>
> >>>>>>> Privileged and/or Confidential Information may be contained in this
> >>>>>>> message. If you are not the addressee indicated in this message
> >>>>>>> (or responsible for delivery of the message to such a person), you
> >> may
> >>>>>> not
> >>>>>>> copy or deliver this message to anyone. In such case,
> >>>>>>> you should destroy this message and kindly notify the sender by
> reply
> >>>>>>> email.
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>
> >>>>>
> >>>>> --
> >>>>> Matt Sicker <boa...@gmail.com>
> >>>>>
> >>>
> >>>
> >>
> >
> >
> >
> > --
> > Matt Sicker <boa...@gmail.com>
>
>
>


-- 
Matt Sicker <boa...@gmail.com>

Reply via email to