Class ByteBuddyMojo
- java.lang.Object
-
- org.apache.maven.plugin.AbstractMojo
-
- net.bytebuddy.build.maven.ByteBuddyMojo
-
- All Implemented Interfaces:
org.apache.maven.plugin.ContextEnabled
,org.apache.maven.plugin.Mojo
- Direct Known Subclasses:
ByteBuddyMojo.ForDependencyFolder
,ByteBuddyMojo.ForExplicitLocations
,ByteBuddyMojo.ForLifecycleTypes
public abstract class ByteBuddyMojo extends org.apache.maven.plugin.AbstractMojo
A Maven plugin for applying Byte Buddy transformations during a build.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static class
ByteBuddyMojo.Coordinate
A coordinate to locate a managed dependency.private static class
ByteBuddyMojo.FilePrefixMatcher
Matches elements which represent a Java class that is represented in the list or an inner class of the classes represented in the list.static class
ByteBuddyMojo.ForDependencyFolder
Transforms all jars for a folder containing jar files, typically project dependencies.static class
ByteBuddyMojo.ForExplicitLocations
Transforms specified classes from files in a folder or a jar file to a folder or jar file.static class
ByteBuddyMojo.ForLifecycleTypes
A version of the plugin that is bound to Maven's lifecycle.protected static class
ByteBuddyMojo.MavenBuildLogger
ABuildLogger
implementation for a MavenLog
.protected static class
ByteBuddyMojo.StalenessFilter
A filter for files that were written before a given timestamp, to avoid duplicate application.protected static class
ByteBuddyMojo.TransformationLogger
APlugin.Engine.Listener
that logs several relevant events during the build.protected static class
ByteBuddyMojo.Transformer
A transformer that is applied during the plugin's execution.
-
Field Summary
Fields Modifier and Type Field Description boolean
classPathDiscovery
Scans the class path (or test class path) for Byte Buddy plugins to apply.Discovery
discovery
Determines if the build should discover Byte Buddy build plugins on this Maven plugin's class loader.org.apache.maven.plugin.MojoExecution
execution
The current execution of this plugin.boolean
extendedParsing
When set totrue
, the debug information of class files should be parsed to extract parameter names.boolean
failFast
When set totrue
, this mojo fails immediately if a plugin cannot be applied.boolean
failOnLiveInitializer
When transforming classes during build time, it is not possible to apply any transformations which require a class in its loaded state.Initialization
initialization
The initializer used for creating aByteBuddy
instance and for applying a transformation.private static java.lang.String
JAVA_CLASS_EXTENSION
The file extension for Java class files.private static java.lang.String
JAVA_FILE_EXTENSION
The file extension for Java source files.java.lang.Integer
multiReleaseVersion
Defines the version to use for resolving multi-release jar files.org.apache.maven.project.MavenProject
project
The Maven project.org.eclipse.aether.RepositorySystem
repositorySystem
The currently used repository system.org.eclipse.aether.RepositorySystemSession
repositorySystemSession
The currently used system session for the repository system.boolean
skip
When set totrue
, this mojo is not applied to the current module.int
staleMilliseconds
Determines the tolerance of many milliseconds between this plugin run and the last edit are permitted for considering a file as stale if the plugin was executed before.java.lang.String
suffix
Specifies the method name suffix that is used when type's method need to be rebased.int
threads
Indicates the amount of threads used for parallel type processing or0
for serial processing.java.util.List<Transformation>
transformations
The list of transformations.boolean
warnOnEmptyTypeSet
When set totrue
, this mojo warns of not having transformed any types.boolean
warnOnMissingOutputDirectory
When set totrue
, this mojo warns of an non-existent output directory.
-
Constructor Summary
Constructors Constructor Description ByteBuddyMojo()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected abstract void
apply(java.util.List<ByteBuddyMojo.Transformer> transformers, java.util.List<java.lang.String> elements, java.util.Map<ByteBuddyMojo.Coordinate,java.lang.String> coordinates)
Applies this mojo for the given setup.void
execute()
private static java.lang.String
findJavaVersionString(org.apache.maven.project.MavenProject project, java.lang.String property)
Makes a best effort of locating the configured Java version.protected abstract java.util.List<java.lang.String>
resolveClassPathElements(java.util.Map<ByteBuddyMojo.Coordinate,java.lang.String> coordinates)
Resolves the class path elements of the relevant output directory.protected Plugin.Engine.Summary
transform(java.util.List<? extends java.lang.String> classPath, java.util.Map<ByteBuddyMojo.Coordinate,java.lang.String> coordinates, java.util.List<ByteBuddyMojo.Transformer> transformers, Plugin.Engine.Source source, Plugin.Engine.Target target, java.io.File file, boolean filtered)
Applies the instrumentation.
-
-
-
Field Detail
-
JAVA_FILE_EXTENSION
private static final java.lang.String JAVA_FILE_EXTENSION
The file extension for Java source files.- See Also:
- Constant Field Values
-
JAVA_CLASS_EXTENSION
private static final java.lang.String JAVA_CLASS_EXTENSION
The file extension for Java class files.- See Also:
- Constant Field Values
-
project
@UnknownNull @Parameter(defaultValue="${project}", readonly=true) public org.apache.maven.project.MavenProject project
The Maven project.
-
execution
@UnknownNull @Parameter(defaultValue="${mojoExecution}", readonly=true) public org.apache.maven.plugin.MojoExecution execution
The current execution of this plugin.
-
repositorySystem
@UnknownNull @Component public org.eclipse.aether.RepositorySystem repositorySystem
The currently used repository system.
-
repositorySystemSession
@MaybeNull @Parameter(defaultValue="${repositorySystemSession}", readonly=true) public org.eclipse.aether.RepositorySystemSession repositorySystemSession
The currently used system session for the repository system.
-
transformations
@MaybeNull @Parameter public java.util.List<Transformation> transformations
The list of transformations. A transformation must specify the
plugin
property, containing the name of a class to apply. Additionally, it is possible to optionally specify Maven coordinates for a project that contains this plugin class asgroupId
,artifactId
andversion
. If any of the latter properties is not set, this projects coordinate is used.For example, the following configuration applies the
foo.Bar
class which must implementPlugin
from artifacttransform-artifact
with this project's group and version:<transformations> <transformation> <plugin>foo.Bar< /plugin> <artifactId>transform-artifact< /artifactId> < /transformation> < /transformations>
If the list of
transformations
is empty or is not supplied at all, this plugin does not apply but prints a warning.
-
initialization
@MaybeNull @Parameter public Initialization initialization
The initializer used for creating a
ByteBuddy
instance and for applying a transformation. By default, a type is rebased. The initializer'sentryPoint
property can be set to any constant name ofEntryPoint.Default
or to a class name. If the latter applies, it is possible to set Maven coordinates for a Maven plugin which defines this class where any property defaults to this project's coordinates.For example, the following configuration applies the
foo.Qux
class which must implementEntryPoint
from artifactinitialization-artifact
with this project's group and version:<initialization> <entryPoint>foo.Qux< /entryPoint> <artifactId>initialization-artifact< /artifactId> < /initialization>
-
suffix
@MaybeNull @Parameter public java.lang.String suffix
Specifies the method name suffix that is used when type's method need to be rebased. If this property is not set or is empty, a random suffix will be appended to any rebased method. If this property is set, the supplied value is appended to the original method name.
-
failOnLiveInitializer
@Parameter(defaultValue="true", required=true) public boolean failOnLiveInitializer
When transforming classes during build time, it is not possible to apply any transformations which require a class in its loaded state. Such transformations might imply setting a type's static field to a user interceptor or similar transformations. If this property is set tofalse
, this plugin does not throw an exception if such a live initializer is defined during a transformation process.
-
skip
@Parameter(defaultValue="false", required=true) public boolean skip
When set totrue
, this mojo is not applied to the current module.
-
warnOnMissingOutputDirectory
@Parameter(defaultValue="true", required=true) public boolean warnOnMissingOutputDirectory
When set totrue
, this mojo warns of an non-existent output directory.
-
warnOnEmptyTypeSet
@Parameter(defaultValue="true", required=true) public boolean warnOnEmptyTypeSet
When set totrue
, this mojo warns of not having transformed any types.
-
failFast
@Parameter(defaultValue="true", required=true) public boolean failFast
When set totrue
, this mojo fails immediately if a plugin cannot be applied.
-
extendedParsing
@Parameter(defaultValue="false", required=true) public boolean extendedParsing
When set totrue
, the debug information of class files should be parsed to extract parameter names.
-
discovery
@MaybeNull @Parameter(defaultValue="EMPTY", required=true) public Discovery discovery
Determines if the build should discover Byte Buddy build plugins on this Maven plugin's class loader. Discovered plugins are stored by their name in the /META-INF/net.bytebuddy/build.plugins file where each line contains the fully qualified class name. Discovered plugins are not provided with any explicit constructor arguments.
-
classPathDiscovery
@Parameter(defaultValue="false", required=true) public boolean classPathDiscovery
Scans the class path (or test class path) for Byte Buddy plugins to apply. This is not normally recommended as it might cause a spurious application of plugins that are accidentally configured on the class path. It can however serve as a convenience in projects with few dependencies where this allows for the use of Maven's dependency version management.
-
threads
@Parameter(defaultValue="0", required=true) public int threads
Indicates the amount of threads used for parallel type processing or0
for serial processing.
-
staleMilliseconds
@Parameter(defaultValue="0", required=true) public int staleMilliseconds
Determines the tolerance of many milliseconds between this plugin run and the last edit are permitted for considering a file as stale if the plugin was executed before. Can be set to-1
to disable.
-
multiReleaseVersion
@MaybeNull @Parameter public java.lang.Integer multiReleaseVersion
Defines the version to use for resolving multi-release jar files. If not set, the Java compile version is used.
-
-
Method Detail
-
execute
public void execute() throws org.apache.maven.plugin.MojoExecutionException, org.apache.maven.plugin.MojoFailureException
- Throws:
org.apache.maven.plugin.MojoExecutionException
org.apache.maven.plugin.MojoFailureException
-
resolveClassPathElements
protected abstract java.util.List<java.lang.String> resolveClassPathElements(java.util.Map<ByteBuddyMojo.Coordinate,java.lang.String> coordinates) throws org.apache.maven.plugin.MojoExecutionException, org.apache.maven.plugin.MojoFailureException
Resolves the class path elements of the relevant output directory.- Parameters:
coordinates
- Versions for managed dependencies.- Returns:
- The class path elements of the relevant output directory.
- Throws:
org.apache.maven.plugin.MojoExecutionException
- If the user configuration results in an error.org.apache.maven.plugin.MojoFailureException
- If the plugin application raises an error.
-
apply
protected abstract void apply(java.util.List<ByteBuddyMojo.Transformer> transformers, java.util.List<java.lang.String> elements, java.util.Map<ByteBuddyMojo.Coordinate,java.lang.String> coordinates) throws org.apache.maven.plugin.MojoExecutionException, org.apache.maven.plugin.MojoFailureException, java.io.IOException
Applies this mojo for the given setup.- Parameters:
transformers
- The transformers to apply.elements
- The class path elements to consider.coordinates
- Versions for managed dependencies.- Throws:
org.apache.maven.plugin.MojoExecutionException
- If the plugin fails due to a user error.org.apache.maven.plugin.MojoFailureException
- If the plugin fails due to an application error.java.io.IOException
- If an I/O exception occurs.
-
transform
protected Plugin.Engine.Summary transform(java.util.List<? extends java.lang.String> classPath, java.util.Map<ByteBuddyMojo.Coordinate,java.lang.String> coordinates, java.util.List<ByteBuddyMojo.Transformer> transformers, Plugin.Engine.Source source, Plugin.Engine.Target target, java.io.File file, boolean filtered) throws org.apache.maven.plugin.MojoExecutionException, java.io.IOException
Applies the instrumentation.- Parameters:
classPath
- An iterable over all class path elements.coordinates
- Versions for managed dependencies.transformers
- The transformers to apply.source
- The source for the plugin engine's application.target
- The target for the plugin engine's application.file
- The file representing the source location.filtered
-true
if files are already filtered and should not be checked for staleness.- Returns:
- A summary of the applied transformation.
- Throws:
org.apache.maven.plugin.MojoExecutionException
- If the plugin cannot be applied.java.io.IOException
- If an I/O exception occurs.
-
findJavaVersionString
@MaybeNull private static java.lang.String findJavaVersionString(org.apache.maven.project.MavenProject project, java.lang.String property)
Makes a best effort of locating the configured Java version.- Parameters:
project
- The relevant Maven project.property
- The targeted Maven property.- Returns:
- The Java version string of the configured build Java version or
null
if no explicit configuration was detected.
-
-