Class ByteBuddyMojo
- All Implemented Interfaces:
org.apache.maven.plugin.ContextEnabled
,org.apache.maven.plugin.Mojo
- Direct Known Subclasses:
ByteBuddyMojo.ForProductionTypes
,ByteBuddyMojo.ForTestTypes
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static class
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
A Byte Buddy plugin that transforms a project's production class files.static class
A Byte Buddy plugin that transforms a project's test class files.protected static class
ABuildLogger
implementation for a MavenLog
.protected static class
APlugin.Engine.Listener
that logs several relevant events during the build.protected static class
A transformer that is applied during the plugin's execution. -
Field Summary
FieldsModifier and TypeFieldDescriptionorg.sonatype.plexus.build.incremental.BuildContext
The build context to support incremental builds.Determines if the build should discover Byte Buddy build plugins on this Maven plugin's class loader.boolean
When set totrue
, the debug information of class files should be parsed to extract parameter names.boolean
When set totrue
, this mojo fails immediately if a plugin cannot be applied.boolean
When transforming classes during build time, it is not possible to apply any transformations which require a class in its loaded state.boolean
Determines if plugins are attempted to be built incrementally.The initializer used for creating aByteBuddy
instance and for applying a transformation.private static final String
The file extension for Java class files.private static final String
The file extension for Java source files.org.apache.maven.project.MavenProject
The Maven project.org.eclipse.aether.RepositorySystem
The currently used repository system.org.eclipse.aether.RepositorySystemSession
The currently used system session for the repository system.boolean
When set totrue
, this mojo is not applied to the current module.Specifies the method name suffix that is used when type's method need to be rebased.int
Indicates the amount of threads used for parallel type processing or0
for serial processing.The list of transformations.boolean
When set totrue
, this mojo warns of not having transformed any types.boolean
When set totrue
, this mojo warns of an non-existent output directory.Fields inherited from interface org.apache.maven.plugin.Mojo
ROLE
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate Plugin.Engine.Summary
apply
(File root, List<? extends String> classPath, List<ByteBuddyMojo.Transformer> transformers, Plugin.Engine.Source source) Applies the instrumentation.void
execute()
private static String
findJavaVersionString
(org.apache.maven.project.MavenProject project, String property) Makes a best effort of locating the configured Java version.Returns the class path elements of the relevant output directory.protected abstract String
Returns the output directory to search for class files.protected abstract String
Returns the source directory that determines the class files to process.Methods inherited from class org.apache.maven.plugin.AbstractMojo
getLog, getPluginContext, setLog, setPluginContext
-
Field Details
-
JAVA_FILE_EXTENSION
The file extension for Java source files.- See Also:
-
JAVA_CLASS_EXTENSION
The file extension for Java class files.- See Also:
-
context
The build context to support incremental builds. -
project
@UnknownNull @Parameter(defaultValue="${project}", readonly=true) public org.apache.maven.project.MavenProject projectThe Maven project. -
repositorySystem
The currently used repository system. -
repositorySystemSession
@MaybeNull @Parameter(defaultValue="${repositorySystemSession}", readonly=true) public org.eclipse.aether.RepositorySystemSession repositorySystemSessionThe currently used system session for the repository system. -
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
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
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 failOnLiveInitializerWhen 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 skipWhen set totrue
, this mojo is not applied to the current module. -
warnOnMissingOutputDirectory
@Parameter(defaultValue="true", required=true) public boolean warnOnMissingOutputDirectoryWhen set totrue
, this mojo warns of an non-existent output directory. -
warnOnEmptyTypeSet
@Parameter(defaultValue="true", required=true) public boolean warnOnEmptyTypeSetWhen set totrue
, this mojo warns of not having transformed any types. -
failFast
@Parameter(defaultValue="true", required=true) public boolean failFastWhen set totrue
, this mojo fails immediately if a plugin cannot be applied. -
extendedParsing
@Parameter(defaultValue="false", required=true) public boolean extendedParsingWhen set totrue
, the debug information of class files should be parsed to extract parameter names. -
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. -
threads
@Parameter(defaultValue="0", required=true) public int threadsIndicates the amount of threads used for parallel type processing or0
for serial processing. -
incremental
@Parameter(defaultValue="false", required=true) public boolean incrementalDetermines if plugins are attempted to be built incrementally.
-
-
Constructor Details
-
ByteBuddyMojo
public ByteBuddyMojo()
-
-
Method Details
-
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
-
getOutputDirectory
Returns the output directory to search for class files.- Returns:
- The output directory to search for class files.
-
getSourceDirectory
Returns the source directory that determines the class files to process.- Returns:
- The source directory that serves as an input for the transformation.
-
getClassPathElements
protected abstract List<String> getClassPathElements() throws org.apache.maven.plugin.MojoFailureExceptionReturns the class path elements of the relevant output directory.- Returns:
- The class path elements of the relevant output directory.
- Throws:
org.apache.maven.plugin.MojoFailureException
- If the class path cannot be resolved.
-
apply
private Plugin.Engine.Summary apply(File root, List<? extends String> classPath, List<ByteBuddyMojo.Transformer> transformers, Plugin.Engine.Source source) throws org.apache.maven.plugin.MojoExecutionException, IOException Applies the instrumentation.- Parameters:
root
- The root folder that contains all class files.classPath
- An iterable over all class path elements.transformers
- The transformers to apply.source
- The source for the plugin's application.- Returns:
- A summary of the applied transformation.
- Throws:
org.apache.maven.plugin.MojoExecutionException
- If the plugin cannot be applied.IOException
- If an I/O exception occurs.
-
findJavaVersionString
@MaybeNull private static String findJavaVersionString(org.apache.maven.project.MavenProject project, 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.
-