Class ByteBuddyMojo

  • All Implemented Interfaces:
    org.apache.maven.plugin.ContextEnabled, org.apache.maven.plugin.Mojo
    Direct Known Subclasses:
    ByteBuddyMojo.ForProductionTypes, ByteBuddyMojo.ForTestTypes

    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
      static class  ByteBuddyMojo.ForProductionTypes
      A Byte Buddy plugin that transforms a project's production class files.
      static class  ByteBuddyMojo.ForTestTypes
      A Byte Buddy plugin that transforms a project's test class files.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected java.lang.String artifactId
      The built project's artifact id.
      protected boolean failFast
      When set to true, this mojo fails immediately if a plugin cannot be applied.
      protected boolean failOnLiveInitializer
      When transforming classes during build time, it is not possible to apply any transformations which require a class in its loaded state.
      protected java.lang.String groupId
      The built project's group id.
      protected Initialization initialization
      The initializer used for creating a ByteBuddy instance and for applying a transformation.
      protected java.lang.String packaging
      The built project's packaging.
      protected org.apache.maven.project.MavenProject project
      The Maven project.
      protected java.util.List<org.eclipse.aether.repository.RemoteRepository> remoteRepositories
      A list of all remote repositories.
      protected org.eclipse.aether.RepositorySystem repositorySystem
      The currently used repository system.
      protected org.eclipse.aether.RepositorySystemSession repositorySystemSession
      The currently used system session for the repository system.
      protected boolean skip
      When set to true, this mojo is not applied to the current module.
      protected java.lang.String suffix
      Specifies the method name suffix that is used when type's method need to be rebased.
      protected java.util.List<Transformation> transformations
      The list of transformations.
      protected java.lang.String version
      The built project's version.
      protected boolean warnOnMissingOutputDirectory
      When set to true, this mojo warns of an non-existent output directory.
      • Fields inherited from interface org.apache.maven.plugin.Mojo

        ROLE
    • Constructor Summary

      Constructors 
      Constructor Description
      ByteBuddyMojo()  
    • Method Summary

      All Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method Description
      void execute()  
      protected abstract java.util.List<java.lang.String> getClassPathElements()
      Returns the class path elements of the relevant output directory.
      protected abstract java.lang.String getOutputDirectory()
      Returns the output directory to search for class files.
      • Methods inherited from class org.apache.maven.plugin.AbstractMojo

        getLog, getPluginContext, setLog, setPluginContext
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • groupId

        @Parameter(defaultValue="${project.groupId}",
                   required=true,
                   readonly=true)
        protected java.lang.String groupId
        The built project's group id.
      • artifactId

        @Parameter(defaultValue="${project.artifactId}",
                   required=true,
                   readonly=true)
        protected java.lang.String artifactId
        The built project's artifact id.
      • version

        @Parameter(defaultValue="${project.version}",
                   required=true,
                   readonly=true)
        protected java.lang.String version
        The built project's version.
      • packaging

        @Parameter(defaultValue="${project.packaging}",
                   required=true,
                   readonly=true)
        protected java.lang.String packaging
        The built project's packaging.
      • project

        @Parameter(defaultValue="${project}",
                   readonly=true)
        protected org.apache.maven.project.MavenProject project
        The Maven project.
      • transformations

        @Parameter
        protected 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 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

        @Parameter
        protected 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

        @Parameter
        protected 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)
        protected 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)
        protected boolean skip
        When set to true, this mojo is not applied to the current module.
      • warnOnMissingOutputDirectory

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

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

        @Component
        protected org.eclipse.aether.RepositorySystem repositorySystem
        The currently used repository system.
      • repositorySystemSession

        @Parameter(defaultValue="${repositorySystemSession}",
                   required=true,
                   readonly=true)
        protected org.eclipse.aether.RepositorySystemSession repositorySystemSession
        The currently used system session for the repository system.
      • remoteRepositories

        @Parameter(defaultValue="${project.remoteProjectRepositories}",
                   required=true,
                   readonly=true)
        protected java.util.List<org.eclipse.aether.repository.RemoteRepository> remoteRepositories
        A list of all remote repositories.
    • Constructor Detail

      • ByteBuddyMojo

        public ByteBuddyMojo()
    • 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
      • getOutputDirectory

        protected abstract java.lang.String getOutputDirectory()
        Returns the output directory to search for class files.
        Returns:
        The output directory to search for class files.
      • getClassPathElements

        protected abstract java.util.List<java.lang.String> getClassPathElements()
        Returns the class path elements of the relevant output directory.
        Returns:
        The class path elements of the relevant output directory.