- java.lang.Object
-
- java.lang.module.ModuleDescriptor.Builder
-
- Enclosing class:
- ModuleDescriptor
public static final class ModuleDescriptor.Builder extends Object
A builder for buildingModuleDescriptor
objects.ModuleDescriptor
defines thenewModule
,newOpenModule
, andnewAutomaticModule
methods to create builders for building normal, open, and automatic modules.The set of packages in the module are accumulated by the
Builder
as theexports
,opens
,packages
,provides
, andmainClass
methods are invoked.The module names, package names, and class names that are parameters specified to the builder methods are the module names, package names, and qualified names of classes (in named packages) as defined in the The Java™ Language Specification.
Example usage:
ModuleDescriptor descriptor = ModuleDescriptor.newModule("stats.core") .requires("java.base") .exports("org.acme.stats.core.clustering") .exports("org.acme.stats.core.regression") .packages(Set.of("org.acme.stats.core.internal")) .build();
- API Note:
- A
Builder
checks the components and invariants as components are added to the builder. The rationale for this is to detect errors as early as possible and not defer all validation to thebuild
method. - Since:
- 9
-
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description ModuleDescriptor
build()
Builds and returns aModuleDescriptor
from its components.ModuleDescriptor.Builder
exports(ModuleDescriptor.Exports e)
Adds an exported package.ModuleDescriptor.Builder
exports(String pn)
Adds an exported package.ModuleDescriptor.Builder
exports(String pn, Set<String> targets)
Adds an exported package.ModuleDescriptor.Builder
exports(Set<ModuleDescriptor.Exports.Modifier> ms, String pn)
Adds an exported package with the given (and possibly empty) set of modifiers.ModuleDescriptor.Builder
exports(Set<ModuleDescriptor.Exports.Modifier> ms, String pn, Set<String> targets)
Adds an exported package with the given (and possibly empty) set of modifiers.ModuleDescriptor.Builder
mainClass(String mc)
Sets the module main class.ModuleDescriptor.Builder
opens(ModuleDescriptor.Opens obj)
Adds an open package.ModuleDescriptor.Builder
opens(String pn)
Adds an open package.ModuleDescriptor.Builder
opens(String pn, Set<String> targets)
Adds an open package.ModuleDescriptor.Builder
opens(Set<ModuleDescriptor.Opens.Modifier> ms, String pn)
Adds an open package with the given (and possibly empty) set of modifiers.ModuleDescriptor.Builder
opens(Set<ModuleDescriptor.Opens.Modifier> ms, String pn, Set<String> targets)
Adds an open package with the given (and possibly empty) set of modifiers.ModuleDescriptor.Builder
packages(Set<String> pns)
Adds packages to the module.ModuleDescriptor.Builder
provides(ModuleDescriptor.Provides p)
Provides a service with one or more implementations.ModuleDescriptor.Builder
provides(String service, List<String> providers)
Provides implementations of a service.ModuleDescriptor.Builder
requires(ModuleDescriptor.Requires req)
Adds a dependence on a module.ModuleDescriptor.Builder
requires(String mn)
Adds a dependence on a module with an empty set of modifiers.ModuleDescriptor.Builder
requires(Set<ModuleDescriptor.Requires.Modifier> ms, String mn)
Adds a dependence on a module with the given (and possibly empty) set of modifiers.ModuleDescriptor.Builder
requires(Set<ModuleDescriptor.Requires.Modifier> ms, String mn, ModuleDescriptor.Version compiledVersion)
Adds a dependence on a module with the given (and possibly empty) set of modifiers.ModuleDescriptor.Builder
uses(String service)
Adds a service dependence.ModuleDescriptor.Builder
version(ModuleDescriptor.Version v)
Sets the module version.ModuleDescriptor.Builder
version(String vs)
Sets the module version.
-
-
-
Method Detail
-
requires
public ModuleDescriptor.Builder requires(ModuleDescriptor.Requires req)
Adds a dependence on a module.- Parameters:
req
- The dependence- Returns:
- This builder
- Throws:
IllegalArgumentException
- If the dependence is on the module that this builder was initialized to buildIllegalStateException
- If the dependence on the module has already been declared or this builder is for an automatic module
-
requires
public ModuleDescriptor.Builder requires(Set<ModuleDescriptor.Requires.Modifier> ms, String mn, ModuleDescriptor.Version compiledVersion)
Adds a dependence on a module with the given (and possibly empty) set of modifiers. The dependence includes the version of the module that that was recorded at compile-time.- Parameters:
ms
- The set of modifiersmn
- The module namecompiledVersion
- The version of the module recorded at compile-time- Returns:
- This builder
- Throws:
IllegalArgumentException
- If the module name isnull
, is not a legal module name, or is equal to the module name that this builder was initialized to buildIllegalStateException
- If the dependence on the module has already been declared or this builder is for an automatic module
-
requires
public ModuleDescriptor.Builder requires(Set<ModuleDescriptor.Requires.Modifier> ms, String mn)
Adds a dependence on a module with the given (and possibly empty) set of modifiers.- Parameters:
ms
- The set of modifiersmn
- The module name- Returns:
- This builder
- Throws:
IllegalArgumentException
- If the module name isnull
, is not a legal module name, or is equal to the module name that this builder was initialized to buildIllegalStateException
- If the dependence on the module has already been declared or this builder is for an automatic module
-
requires
public ModuleDescriptor.Builder requires(String mn)
Adds a dependence on a module with an empty set of modifiers.- Parameters:
mn
- The module name- Returns:
- This builder
- Throws:
IllegalArgumentException
- If the module name isnull
, is not a legal module name, or is equal to the module name that this builder was initialized to buildIllegalStateException
- If the dependence on the module has already been declared or this builder is for an automatic module
-
exports
public ModuleDescriptor.Builder exports(ModuleDescriptor.Exports e)
Adds an exported package.- Parameters:
e
- The export- Returns:
- This builder
- Throws:
IllegalStateException
- If thepackage
is already declared as exported or this builder is for an automatic module
-
exports
public ModuleDescriptor.Builder exports(Set<ModuleDescriptor.Exports.Modifier> ms, String pn, Set<String> targets)
Adds an exported package with the given (and possibly empty) set of modifiers. The package is exported to a set of target modules.- Parameters:
ms
- The set of modifierspn
- The package nametargets
- The set of target modules names- Returns:
- This builder
- Throws:
IllegalArgumentException
- If the package name isnull
or is not a legal package name, the set of target modules is empty, or the set of target modules contains a name that is not a legal module nameIllegalStateException
- If the package is already declared as exported or this builder is for an automatic module
-
exports
public ModuleDescriptor.Builder exports(Set<ModuleDescriptor.Exports.Modifier> ms, String pn)
Adds an exported package with the given (and possibly empty) set of modifiers. The package is exported to all modules.- Parameters:
ms
- The set of modifierspn
- The package name- Returns:
- This builder
- Throws:
IllegalArgumentException
- If the package name isnull
or is not a legal package nameIllegalStateException
- If the package is already declared as exported or this builder is for an automatic module
-
exports
public ModuleDescriptor.Builder exports(String pn, Set<String> targets)
Adds an exported package. The package is exported to a set of target modules.- Parameters:
pn
- The package nametargets
- The set of target modules names- Returns:
- This builder
- Throws:
IllegalArgumentException
- If the package name isnull
or is not a legal package name, the set of target modules is empty, or the set of target modules contains a name that is not a legal module nameIllegalStateException
- If the package is already declared as exported or this builder is for an automatic module
-
exports
public ModuleDescriptor.Builder exports(String pn)
Adds an exported package. The package is exported to all modules.- Parameters:
pn
- The package name- Returns:
- This builder
- Throws:
IllegalArgumentException
- If the package name isnull
or is not a legal package nameIllegalStateException
- If the package is already declared as exported or this builder is for an automatic module
-
opens
public ModuleDescriptor.Builder opens(ModuleDescriptor.Opens obj)
Adds an open package.- Parameters:
obj
- TheOpens
object- Returns:
- This builder
- Throws:
IllegalStateException
- If the package is already declared as open, or this is a builder for an open module or automatic module
-
opens
public ModuleDescriptor.Builder opens(Set<ModuleDescriptor.Opens.Modifier> ms, String pn, Set<String> targets)
Adds an open package with the given (and possibly empty) set of modifiers. The package is open to a set of target modules.- Parameters:
ms
- The set of modifierspn
- The package nametargets
- The set of target modules names- Returns:
- This builder
- Throws:
IllegalArgumentException
- If the package name isnull
or is not a legal package name, the set of target modules is empty, or the set of target modules contains a name that is not a legal module nameIllegalStateException
- If the package is already declared as open, or this is a builder for an open module or automatic module
-
opens
public ModuleDescriptor.Builder opens(Set<ModuleDescriptor.Opens.Modifier> ms, String pn)
Adds an open package with the given (and possibly empty) set of modifiers. The package is open to all modules.- Parameters:
ms
- The set of modifierspn
- The package name- Returns:
- This builder
- Throws:
IllegalArgumentException
- If the package name isnull
or is not a legal package nameIllegalStateException
- If the package is already declared as open, or this is a builder for an open module or automatic module
-
opens
public ModuleDescriptor.Builder opens(String pn, Set<String> targets)
Adds an open package. The package is open to a set of target modules.- Parameters:
pn
- The package nametargets
- The set of target modules names- Returns:
- This builder
- Throws:
IllegalArgumentException
- If the package name isnull
or is not a legal package name, the set of target modules is empty, or the set of target modules contains a name that is not a legal module nameIllegalStateException
- If the package is already declared as open, or this is a builder for an open module or automatic module
-
opens
public ModuleDescriptor.Builder opens(String pn)
Adds an open package. The package is open to all modules.- Parameters:
pn
- The package name- Returns:
- This builder
- Throws:
IllegalArgumentException
- If the package name isnull
or is not a legal package nameIllegalStateException
- If the package is already declared as open, or this is a builder for an open module or automatic module
-
uses
public ModuleDescriptor.Builder uses(String service)
Adds a service dependence.- Parameters:
service
- The service type- Returns:
- This builder
- Throws:
IllegalArgumentException
- If the service type isnull
or not a qualified name of a class in a named packageIllegalStateException
- If a dependency on the service type has already been declared or this is a builder for an automatic module
-
provides
public ModuleDescriptor.Builder provides(ModuleDescriptor.Provides p)
Provides a service with one or more implementations. The package for eachprovider
(or provider factory) is added to the module if not already added.- Parameters:
p
- The provides- Returns:
- This builder
- Throws:
IllegalStateException
- If the providers for the service type have already been declared
-
provides
public ModuleDescriptor.Builder provides(String service, List<String> providers)
Provides implementations of a service. The package for each provider (or provider factory) is added to the module if not already added.- Parameters:
service
- The service typeproviders
- The list of provider or provider factory class names- Returns:
- This builder
- Throws:
IllegalArgumentException
- If the service type or any of the provider class names isnull
or not a qualified name of a class in a named package, or the list of provider class names is emptyIllegalStateException
- If the providers for the service type have already been declared
-
packages
public ModuleDescriptor.Builder packages(Set<String> pns)
Adds packages to the module. All packages in the set of package names that are not in the module are added to module.- Parameters:
pns
- The (possibly empty) set of package names- Returns:
- This builder
- Throws:
IllegalArgumentException
- If any of the package names isnull
or is not a legal package name
-
version
public ModuleDescriptor.Builder version(ModuleDescriptor.Version v)
Sets the module version.- Parameters:
v
- The version- Returns:
- This builder
-
version
public ModuleDescriptor.Builder version(String vs)
Sets the module version.- Parameters:
vs
- The version string to parse- Returns:
- This builder
- Throws:
IllegalArgumentException
- Ifvs
isnull
or cannot be parsed as a version string- See Also:
ModuleDescriptor.Version.parse(String)
-
mainClass
public ModuleDescriptor.Builder mainClass(String mc)
Sets the module main class. The package for the main class is added to the module if not already added. In other words, this method is equivalent to first invoking this builder'spackages
method to add the package name of the main class.- Parameters:
mc
- The module main class- Returns:
- This builder
- Throws:
IllegalArgumentException
- IfmainClass
isnull
or not a qualified name of a class in a named package
-
build
public ModuleDescriptor build()
Builds and returns aModuleDescriptor
from its components.The module will require "
java.base
" even if the dependence has not been declared (the exception is when building a module named "java.base
" as it cannot require itself). The dependence on "java.base
" will have theMANDATED
modifier if the dependence was not declared.- Returns:
- The module descriptor
-
-