On 07/03/2016 09:41 AM, Peter Levart wrote:



On 07/03/2016 12:09 AM, Mandy Chung wrote:
>In order to put more weight into --dry-run, I suggest extending its behavior 
to report to the stdout, the result of resolving the modules when successfull.
Are you aware of -Xdiag:resolver?

Mandy


No, I wasn't aware of that option. Nice. It presents roughly the same info in a more procedural form.

Regards, Peter


...OTOH the quasi-graphical tree display (the idea is stolen from "mvn dependency:tree" command) has some additional useful info such as "uses of a service that was not satisfied" and in my opinion better visualizes a global view of why all resolved modules are pulled-in. The procedural "evaluation" of resolving and the final list of resolved modules is useful too. If you like this display:


[Resolver] Root module app located
[Resolver]   (file:///home/peter/tmp/test/out/app/)
[Resolver] Module lib located, required by app
[Resolver]   (file:///home/peter/tmp/test/out/lib/)
[Resolver] Module java.base located, required by app
[Resolver]   (jrt:/java.base)
[Resolver] Module util located, required by app
[Resolver]   (file:///home/peter/tmp/test/out/util/)
[Resolver] Module java.desktop provides java.net.ContentHandlerFactory, used by java.base
[Resolver]   (jrt:/java.desktop)
[Resolver] Module jdk.charsets provides java.nio.charset.spi.CharsetProvider, used by java.base
[Resolver]   (jrt:/jdk.charsets)
[Resolver] Module jdk.localedata provides sun.util.resources.LocaleData$CommonResourceBundleProvider, used by java.base
[Resolver]   (jrt:/jdk.localedata)
[Resolver] Module jdk.zipfs provides java.nio.file.spi.FileSystemProvider, used by java.base
[Resolver]   (jrt:/jdk.zipfs)
[Resolver] Module java.logging provides jdk.internal.logger.DefaultLoggerFinder, used by java.base
[Resolver]   (jrt:/java.logging)
[Resolver] Module jdk.security.auth provides javax.security.auth.spi.LoginModule, used by java.base
[Resolver]   (jrt:/jdk.security.auth)
[Resolver] Module java.management provides javax.security.auth.spi.LoginModule, used by java.base
[Resolver]   (jrt:/java.management)
[Resolver] Module java.security.jgss provides sun.security.ssl.ClientKeyExchangeService, used by java.base
[Resolver]   (jrt:/java.security.jgss)
[Resolver] Module java.security.jgss provides java.security.Provider, used by java.base [Resolver] Module jdk.security.jgss provides java.security.Provider, used by java.base
[Resolver]   (jrt:/jdk.security.jgss)
[Resolver] Module java.security.sasl provides java.security.Provider, used by java.base
[Resolver]   (jrt:/java.security.sasl)
[Resolver] Module java.xml.crypto provides java.security.Provider, used by java.base
[Resolver]   (jrt:/java.xml.crypto)
[Resolver] Module java.smartcardio provides java.security.Provider, used by java.base
[Resolver]   (jrt:/java.smartcardio)
[Resolver] Module jdk.crypto.ec provides java.security.Provider, used by java.base
[Resolver]   (jrt:/jdk.crypto.ec)
[Resolver] Module java.naming provides java.security.Provider, used by java.base
[Resolver]   (jrt:/java.naming)
[Resolver] Module jdk.crypto.pkcs11 provides java.security.Provider, used by java.base
[Resolver]   (jrt:/jdk.crypto.pkcs11)
[Resolver] Module jdk.localedata provides sun.util.locale.provider.LocaleDataMetaInfo, used by java.base [Resolver] Module jdk.localedata provides sun.util.resources.LocaleData$SupplementaryResourceBundleProvider, used by java.base
[Resolver] Module service provides my.lib.Service, used by app
[Resolver]   (file:///home/peter/tmp/test/out/service/)
[Resolver] Module service provides my.lib.Service, used by util
[Resolver] Module java.xml located, required by java.xml.crypto
[Resolver]   (jrt:/java.xml)
[Resolver] Module java.rmi located, required by java.management
[Resolver]   (jrt:/java.rmi)
[Resolver] Module java.datatransfer located, required by java.desktop
[Resolver]   (jrt:/java.datatransfer)
[Resolver] Module java.prefs located, required by java.desktop
[Resolver]   (jrt:/java.prefs)
[Resolver] Module jdk.naming.rmi provides javax.naming.spi.InitialContextFactory, used by java.naming
[Resolver]   (jrt:/jdk.naming.rmi)
[Resolver] Module jdk.naming.dns provides javax.naming.spi.InitialContextFactory, used by java.naming
[Resolver]   (jrt:/jdk.naming.dns)
[Resolver] Module java.desktop provides sun.datatransfer.DesktopDatatransferService, used by java.datatransfer [Resolver] Module jdk.management provides sun.management.spi.PlatformMBeanProvider, used by java.management
[Resolver]   (jrt:/jdk.management)
[Resolver] Result:
[Resolver]   app
[Resolver]   java.base
[Resolver]   java.datatransfer
[Resolver]   java.desktop
[Resolver]   java.logging
[Resolver]   java.management
[Resolver]   java.naming
[Resolver]   java.prefs
[Resolver]   java.rmi
[Resolver]   java.security.jgss
[Resolver]   java.security.sasl
[Resolver]   java.smartcardio
[Resolver]   java.xml
[Resolver]   java.xml.crypto
[Resolver]   jdk.charsets
[Resolver]   jdk.crypto.ec
[Resolver]   jdk.crypto.pkcs11
[Resolver]   jdk.localedata
[Resolver]   jdk.management
[Resolver]   jdk.naming.dns
[Resolver]   jdk.naming.rmi
[Resolver]   jdk.security.auth
[Resolver]   jdk.security.jgss
[Resolver]   jdk.zipfs
[Resolver]   lib
[Resolver]   service
[Resolver]   util
[Resolver]
[Resolver] Dependency tree (Legend: * root module, -- requires, -= requires public, -> uses, -< provides with)
[Resolver]
[Resolver] * app
[Resolver]   +-- java.base
[Resolver]   |   +-> java.lang.System$LoggerFinder
[Resolver]   |   +-> java.net.ContentHandlerFactory
[Resolver] | | \-< java.desktop (sun.awt.www.content.MultimediaContentHandlers)
[Resolver]   |   |       +-- java.base ...
[Resolver]   |   |       +-= java.datatransfer
[Resolver]   |   |       |   +-- java.base ...
[Resolver]   |   |       |   \-> sun.datatransfer.DesktopDatatransferService
[Resolver] | | | \-< java.desktop (sun.awt.datatransfer.DesktopDatatransferServiceImpl) ...
[Resolver]   |   |       +-- java.prefs
[Resolver]   |   |       |   +-- java.base ...
[Resolver]   |   |       |   +-- java.xml
[Resolver]   |   |       |   |   +-- java.base ...
[Resolver]   |   |       |   |   +-> javax.xml.datatype.DatatypeFactory
[Resolver] | | | | +-> javax.xml.parsers.DocumentBuilderFactory
[Resolver]   |   |       |   |   +-> javax.xml.parsers.SAXParserFactory
[Resolver]   |   |       |   |   +-> javax.xml.stream.XMLEventFactory
[Resolver]   |   |       |   |   +-> javax.xml.stream.XMLInputFactory
[Resolver]   |   |       |   |   +-> javax.xml.stream.XMLOutputFactory
[Resolver]   |   |       |   |   +-> javax.xml.transform.TransformerFactory
[Resolver]   |   |       |   |   +-> javax.xml.validation.SchemaFactory
[Resolver]   |   |       |   |   +-> javax.xml.xpath.XPathFactory
[Resolver]   |   |       |   |   \-> org.xml.sax.XMLReader
[Resolver]   |   |       |   \-> java.util.prefs.PreferencesFactory
[Resolver]   |   |       +-= java.xml ...
[Resolver]   |   |       +-> java.awt.im.spi.InputMethodDescriptor
[Resolver]   |   |       +-> javax.accessibility.AccessibilityProvider
[Resolver]   |   |       +-> javax.imageio.spi.ImageInputStreamSpi
[Resolver]   |   |       +-> javax.imageio.spi.ImageOutputStreamSpi
[Resolver]   |   |       +-> javax.imageio.spi.ImageReaderSpi
[Resolver]   |   |       +-> javax.imageio.spi.ImageTranscoderSpi
[Resolver]   |   |       +-> javax.imageio.spi.ImageWriterSpi
[Resolver]   |   |       +-> javax.print.PrintServiceLookup
[Resolver] | | | \-< java.desktop (sun.print.PrintServiceLookupProvider) ...
[Resolver]   |   |       +-> javax.print.StreamPrintServiceFactory
[Resolver] | | | \-< java.desktop (sun.print.PSStreamPrinterFactory) ...
[Resolver]   |   |       +-> javax.sound.midi.spi.MidiDeviceProvider
[Resolver] | | | +-< java.desktop (com.sun.media.sound.MidiInDeviceProvider) ... [Resolver] | | | +-< java.desktop (com.sun.media.sound.MidiOutDeviceProvider) ... [Resolver] | | | +-< java.desktop (com.sun.media.sound.RealTimeSequencerProvider) ... [Resolver] | | | \-< java.desktop (com.sun.media.sound.SoftProvider) ...
[Resolver]   |   |       +-> javax.sound.midi.spi.MidiFileReader
[Resolver] | | | \-< java.desktop (com.sun.media.sound.StandardMidiFileReader) ...
[Resolver]   |   |       +-> javax.sound.midi.spi.MidiFileWriter
[Resolver] | | | \-< java.desktop (com.sun.media.sound.StandardMidiFileWriter) ...
[Resolver]   |   |       +-> javax.sound.midi.spi.SoundbankReader
[Resolver] | | | +-< java.desktop (com.sun.media.sound.AudioFileSoundbankReader) ... [Resolver] | | | +-< java.desktop (com.sun.media.sound.DLSSoundbankReader) ... [Resolver] | | | +-< java.desktop (com.sun.media.sound.JARSoundbankReader) ... [Resolver] | | | \-< java.desktop (com.sun.media.sound.SF2SoundbankReader) ...
[Resolver]   |   |       +-> javax.sound.sampled.spi.AudioFileReader
[Resolver] | | | +-< java.desktop (com.sun.media.sound.AiffFileReader) ... [Resolver] | | | +-< java.desktop (com.sun.media.sound.AuFileReader) ... [Resolver] | | | +-< java.desktop (com.sun.media.sound.SoftMidiAudioFileReader) ... [Resolver] | | | +-< java.desktop (com.sun.media.sound.WaveExtensibleFileReader) ... [Resolver] | | | +-< java.desktop (com.sun.media.sound.WaveFileReader) ... [Resolver] | | | \-< java.desktop (com.sun.media.sound.WaveFloatFileReader) ...
[Resolver]   |   |       +-> javax.sound.sampled.spi.AudioFileWriter
[Resolver] | | | +-< java.desktop (com.sun.media.sound.AiffFileWriter) ... [Resolver] | | | +-< java.desktop (com.sun.media.sound.AuFileWriter) ... [Resolver] | | | +-< java.desktop (com.sun.media.sound.WaveFileWriter) ... [Resolver] | | | \-< java.desktop (com.sun.media.sound.WaveFloatFileWriter) ... [Resolver] | | +-> javax.sound.sampled.spi.FormatConversionProvider [Resolver] | | | +-< java.desktop (com.sun.media.sound.AlawCodec) ... [Resolver] | | | +-< java.desktop (com.sun.media.sound.AudioFloatFormatConverter) ... [Resolver] | | | +-< java.desktop (com.sun.media.sound.PCMtoPCMCodec) ... [Resolver] | | | \-< java.desktop (com.sun.media.sound.UlawCodec) ...
[Resolver]   |   |       \-> javax.sound.sampled.spi.MixerProvider
[Resolver] | | +-< java.desktop (com.sun.media.sound.DirectAudioDeviceProvider) ... [Resolver] | | \-< java.desktop (com.sun.media.sound.PortMixerProvider) ...
[Resolver]   |   +-> java.net.spi.URLStreamHandlerProvider
[Resolver]   |   +-> java.nio.channels.spi.AsynchronousChannelProvider
[Resolver]   |   +-> java.nio.channels.spi.SelectorProvider
[Resolver]   |   +-> java.nio.charset.spi.CharsetProvider
[Resolver]   |   |   \-< jdk.charsets (sun.nio.cs.ext.ExtendedCharsets)
[Resolver]   |   |       \-- java.base ...
[Resolver]   |   +-> java.nio.file.spi.FileSystemProvider
[Resolver] | | +-< java.base (jdk.internal.jrtfs.JrtFileSystemProvider) ...
[Resolver]   |   |   \-< jdk.zipfs (jdk.nio.zipfs.ZipFileSystemProvider)
[Resolver]   |   |       \-- java.base ...
[Resolver]   |   +-> java.nio.file.spi.FileTypeDetector
[Resolver]   |   +-> java.security.Provider
[Resolver] | | +-< java.naming (sun.security.provider.certpath.ldap.JdkLDAP)
[Resolver]   |   |   |   +-- java.base ...
[Resolver]   |   |   |   +-- java.security.sasl
[Resolver]   |   |   |   |   +-- java.base ...
[Resolver]   |   |   |   |   \-- java.logging
[Resolver]   |   |   |   |       \-- java.base ...
[Resolver]   |   |   |   +-> javax.naming.ldap.StartTlsResponse
[Resolver]   |   |   |   \-> javax.naming.spi.InitialContextFactory
[Resolver] | | | +-< jdk.naming.dns (com.sun.jndi.dns.DnsContextFactory)
[Resolver]   |   |   |       |   +-- java.base ...
[Resolver]   |   |   |       |   \-- java.naming ...
[Resolver] | | | \-< jdk.naming.rmi (com.sun.jndi.rmi.registry.RegistryContextFactory)
[Resolver]   |   |   |           +-- java.base ...
[Resolver]   |   |   |           +-- java.naming ...
[Resolver]   |   |   |           \-- java.rmi
[Resolver]   |   |   |               +-- java.base ...
[Resolver]   |   |   |               +-- java.logging ...
[Resolver]   |   |   |               \-> java.rmi.server.RMIClassLoaderSpi
[Resolver]   |   |   +-< java.security.jgss (sun.security.jgss.SunProvider)
[Resolver]   |   |   |   +-- java.base ...
[Resolver]   |   |   |   \-- java.naming ...
[Resolver] | | +-< java.security.sasl (com.sun.security.sasl.Provider) ...
[Resolver]   |   |   +-< java.smartcardio (sun.security.smartcardio.SunPCSC)
[Resolver]   |   |   |   \-- java.base ...
[Resolver] | | +-< java.xml.crypto (org.jcp.xml.dsig.internal.dom.XMLDSigRI)
[Resolver]   |   |   |   +-- java.base ...
[Resolver]   |   |   |   +-- java.logging ...
[Resolver]   |   |   |   \-= java.xml ...
[Resolver]   |   |   +-< jdk.crypto.ec (sun.security.ec.SunEC)
[Resolver]   |   |   |   \-- java.base ...
[Resolver]   |   |   +-< jdk.crypto.pkcs11 (sun.security.pkcs11.SunPKCS11)
[Resolver]   |   |   |   +-- java.base ...
[Resolver]   |   |   |   \-- jdk.crypto.ec ...
[Resolver] | | \-< jdk.security.jgss (com.sun.security.sasl.gsskerb.JdkSASL)
[Resolver]   |   |       +-- java.base ...
[Resolver]   |   |       +-- java.logging ...
[Resolver]   |   |       +-= java.security.jgss ...
[Resolver]   |   |       \-- java.security.sasl ...
[Resolver]   |   +-> java.text.spi.BreakIteratorProvider
[Resolver]   |   +-> java.text.spi.CollatorProvider
[Resolver]   |   +-> java.text.spi.DateFormatProvider
[Resolver]   |   +-> java.text.spi.DateFormatSymbolsProvider
[Resolver]   |   +-> java.text.spi.DecimalFormatSymbolsProvider
[Resolver]   |   +-> java.text.spi.NumberFormatProvider
[Resolver]   |   +-> java.time.chrono.AbstractChronology
[Resolver]   |   +-> java.time.chrono.Chronology
[Resolver]   |   +-> java.time.zone.ZoneRulesProvider
[Resolver]   |   +-> java.util.spi.CalendarDataProvider
[Resolver]   |   +-> java.util.spi.CalendarNameProvider
[Resolver]   |   +-> java.util.spi.CurrencyNameProvider
[Resolver]   |   +-> java.util.spi.LocaleNameProvider
[Resolver]   |   +-> java.util.spi.ResourceBundleControlProvider
[Resolver]   |   +-> java.util.spi.ResourceBundleProvider
[Resolver]   |   +-> java.util.spi.TimeZoneNameProvider
[Resolver]   |   +-> javax.security.auth.spi.LoginModule
[Resolver] | | +-< java.management (com.sun.jmx.remote.security.FileLoginModule)
[Resolver]   |   |   |   +-- java.base ...
[Resolver]   |   |   |   +-- java.logging ...
[Resolver]   |   |   |   +-- java.naming ...
[Resolver]   |   |   |   +-= java.rmi ...
[Resolver]   |   |   |   +-> javax.management.remote.JMXConnectorProvider
[Resolver] | | | +-> javax.management.remote.JMXConnectorServerProvider
[Resolver]   |   |   |   \-> sun.management.spi.PlatformMBeanProvider
[Resolver] | | | \-< jdk.management (com.sun.management.internal.PlatformMBeanProviderImpl)
[Resolver]   |   |   |           +-- java.base ...
[Resolver]   |   |   |           \-= java.management ...
[Resolver] | | +-< jdk.security.auth (com.sun.security.auth.module.JndiLoginModule)
[Resolver]   |   |   |   +-- java.base ...
[Resolver]   |   |   |   +-= java.naming ...
[Resolver]   |   |   |   \-- java.security.jgss ...
[Resolver] | | +-< jdk.security.auth (com.sun.security.auth.module.KeyStoreLoginModule) ... [Resolver] | | +-< jdk.security.auth (com.sun.security.auth.module.Krb5LoginModule) ... [Resolver] | | +-< jdk.security.auth (com.sun.security.auth.module.LdapLoginModule) ... [Resolver] | | +-< jdk.security.auth (com.sun.security.auth.module.NTLoginModule) ... [Resolver] | | \-< jdk.security.auth (com.sun.security.auth.module.UnixLoginModule) ...
[Resolver]   |   +-> jdk.internal.logger.DefaultLoggerFinder
[Resolver] | | \-< java.logging (sun.util.logging.internal.LoggingProviderImpl) ...
[Resolver]   |   +-> sun.security.ssl.ClientKeyExchangeService
[Resolver] | | \-< java.security.jgss (sun.security.krb5.internal.ssl.Krb5KeyExchangeService) ...
[Resolver]   |   +-> sun.util.locale.provider.LocaleDataMetaInfo
[Resolver] | | +-< jdk.localedata (sun.util.resources.cldr.provider.CLDRLocaleDataMetaInfo)
[Resolver]   |   |   |   \-- java.base ...
[Resolver] | | \-< jdk.localedata (sun.util.resources.provider.NonBaseLocaleDataMetaInfo) ... [Resolver] | +-> sun.util.resources.LocaleData$CommonResourceBundleProvider [Resolver] | | \-< jdk.localedata (sun.util.resources.provider.LocaleDataProvider) ... [Resolver] | +-> sun.util.resources.LocaleData$SupplementaryResourceBundleProvider [Resolver] | | \-< jdk.localedata (sun.util.resources.provider.SupplementaryLocaleDataProvider) ...
[Resolver]   |   \-> sun.util.spi.CalendarProvider
[Resolver]   +-- lib
[Resolver]   |   \-- java.base ...
[Resolver]   +-- util
[Resolver]   |   +-- java.base ...
[Resolver]   |   +-- lib ...
[Resolver]   |   \-> my.lib.Service
[Resolver]   |       \-< service (my.service.ServiceImpl)
[Resolver]   |           +-- java.base ...
[Resolver]   |           \-- lib ...
[Resolver]   \-> my.lib.Service ...



...then this is what makes it (as part of -Xdiag:resolver option):

http://cr.openjdk.java.net/~plevart/jdk9-dev/Xdiag-resolver-tree/webrev.01/


Use it at will.

Regards, Peter

Reply via email to