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.
  • Field Details

    • JAVA_FILE_EXTENSION

      private static final String JAVA_FILE_EXTENSION
      The file extension for Java source files.
      See Also:
    • JAVA_CLASS_EXTENSION

      private static final String JAVA_CLASS_EXTENSION
      The file extension for Java class files.
      See Also:
    • 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 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 as groupId, artifactId and version. 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 implement Plugin from artifact transform-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's entryPoint property can be set to any constant name of EntryPoint.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 implement EntryPoint from artifact initialization-artifact with this project's group and version:

      
       <initialization>
         <entryPoint>foo.Qux< /entryPoint>
         <artifactId>initialization-artifact< /artifactId>
       < /initialization>
       
    • suffix

      @MaybeNull @Parameter public 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 to false, 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 to true, this mojo is not applied to the current module.
    • warnOnMissingOutputDirectory

      @Parameter(defaultValue="true", required=true) public boolean warnOnMissingOutputDirectory
      When set to true, this mojo warns of an non-existent output directory.
    • warnOnEmptyTypeSet

      @Parameter(defaultValue="true", required=true) public boolean warnOnEmptyTypeSet
      When set to true, this mojo warns of not having transformed any types.
    • failFast

      @Parameter(defaultValue="true", required=true) public boolean failFast
      When set to true, this mojo fails immediately if a plugin cannot be applied.
    • extendedParsing

      @Parameter(defaultValue="false", required=true) public boolean extendedParsing
      When set to true, 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 or 0 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 Integer multiReleaseVersion
      Defines the version to use for resolving multi-release jar files. If not set, the Java compile version is used.
  • 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
    • resolveClassPathElements

      protected abstract List<String> resolveClassPathElements(Map<ByteBuddyMojo.Coordinate,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(List<ByteBuddyMojo.Transformer> transformers, List<String> elements, Map<ByteBuddyMojo.Coordinate,String> coordinates) throws org.apache.maven.plugin.MojoExecutionException, org.apache.maven.plugin.MojoFailureException, 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.
      IOException - If an I/O exception occurs.
    • transform

      protected Plugin.Engine.Summary transform(List<? extends String> classPath, Map<ByteBuddyMojo.Coordinate,String> coordinates, List<ByteBuddyMojo.Transformer> transformers, Plugin.Engine.Source source, Plugin.Engine.Target target, File file, boolean filtered) throws org.apache.maven.plugin.MojoExecutionException, 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.
      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.