Class AbstractProtocMojo

java.lang.Object
org.apache.maven.plugin.AbstractMojo
org.xolstice.maven.plugin.protobuf.AbstractProtocMojo
All Implemented Interfaces:
org.apache.maven.plugin.ContextEnabled, org.apache.maven.plugin.Mojo
Direct Known Subclasses:
AbstractProtocCompileMojo, AbstractProtocTestCompileMojo

abstract class AbstractProtocMojo extends org.apache.maven.plugin.AbstractMojo
Abstract Mojo implementation.

This class is extended by ProtocCompileMojo and ProtocTestCompileMojo in order to override the specific configuration for compiling the main or test classes respectively.

  • Field Details

    • project

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

      @Parameter(defaultValue="${session}", readonly=true) protected org.apache.maven.execution.MavenSession session
      The current Maven Session Object.
      Since:
      0.2.0
    • buildContext

      @Component protected org.sonatype.plexus.build.incremental.BuildContext buildContext
      Build context that tracks changes to the source and target files.
      Since:
      0.3.0
    • toolchainManager

      @Component protected org.apache.maven.toolchain.ToolchainManager toolchainManager
      An optional tool chain manager.
      Since:
      0.2.0
    • projectHelper

      @Component protected org.apache.maven.project.MavenProjectHelper projectHelper
      A helper used to add resources to the project.
    • attachProtoSources

      @Parameter(required=true, defaultValue="true") protected boolean attachProtoSources
      If set to true, then the specified protobuf source files from this project will be attached as resources to the build, for subsequent inclusion into the final artifact. This is the default behaviour, as it allows downstream projects to import protobuf definitions from the upstream projects, and those imports are automatically resolved at build time.

      If distribution of .proto source files is undesirable for security reasons or because of other considerations, then this parameter should be set to false.

      Since:
      0.4.1
    • descriptorSetFileName

      @Parameter(required=true, defaultValue="${project.build.finalName}.protobin") protected String descriptorSetFileName
      The descriptor set file name. Only used if writeDescriptorSet is set to true.
      Since:
      0.3.0
    • writeDescriptorSet

      @Parameter(required=true, defaultValue="false") protected boolean writeDescriptorSet
      If set to true, the compiler will generate a binary descriptor set file for the specified .proto files.
      Since:
      0.3.0
    • attachDescriptorSet

      @Parameter(required=true, defaultValue="false") protected boolean attachDescriptorSet
      If set to true, the generated descriptor set will be attached to the build.
      Since:
      0.4.1
    • includeDependenciesInDescriptorSet

      @Parameter(required=false, defaultValue="false") protected boolean includeDependenciesInDescriptorSet
      If true and writeDescriptorSet has been set, the compiler will include all dependencies in the descriptor set making it "self-contained".
      Since:
      0.3.0
    • includeSourceInfoInDescriptorSet

      @Parameter(required=false, defaultValue="false") protected boolean includeSourceInfoInDescriptorSet
      If true and writeDescriptorSet has been set, do not strip SourceCodeInfo from the FileDescriptorProto. This results in vastly larger descriptors that include information about the original location of each decl in the source file as well as surrounding comments.
      Since:
      0.4.4
    • useArgumentFile

      @Parameter(required=false, defaultValue="false") protected boolean useArgumentFile
      If set to true, all command line arguments to protoc will be written to a file, and only a path to that file will be passed to protoc on the command line. This helps prevent Command line is too long errors when the number of .proto files is large.

      NOTE: This is only supported for protoc 3.5.0 and higher.

      Since:
      0.6.0
  • Constructor Details

    • AbstractProtocMojo

      AbstractProtocMojo()
  • Method Details

    • execute

      public void execute() throws org.apache.maven.plugin.MojoExecutionException, org.apache.maven.plugin.MojoFailureException
      Executes the mojo.
      Throws:
      org.apache.maven.plugin.MojoExecutionException
      org.apache.maven.plugin.MojoFailureException
    • createProtocPlugins

      protected void createProtocPlugins()
      Generates native launchers for java protoc plugins. These launchers will later be added as parameters for protoc compiler.
      Since:
      0.3.0
    • detectJavaHome

      protected String detectJavaHome()
      Attempts to detect java home directory, using jdk toolchain if available, with a fallback to java.home system property.
      Returns:
      path to java home directory.
      Since:
      0.3.0
    • addProtocBuilderParameters

      protected void addProtocBuilderParameters(Protoc.Builder protocBuilder)
      Adds mojo-specific parameters to the protoc builder.
      Parameters:
      protocBuilder - the builder to be modified.
    • skipMojo

      protected boolean skipMojo()

      Determine if the mojo execution should get skipped.

      This is the case if:
      • skip is true
      • if the mojo gets executed on a project with packaging type 'pom' and forceMojoExecution is false
      Returns:
      true if the mojo execution should be skipped.
      Since:
      0.2.0
    • findGeneratedFilesInDirectory

      protected static List<File> findGeneratedFilesInDirectory(File directory)
    • lastModified

      protected static long lastModified(Iterable<File> files)
      Returns timestamp for the most recently modified file in the given set.
      Parameters:
      files - a collection of file descriptors.
      Returns:
      timestamp of the most recently modified file.
    • checkFilesUpToDate

      protected boolean checkFilesUpToDate(Iterable<File> sourceFiles, Iterable<File> targetFiles)
      Checks that the source files don't have modification time that is later than the target files.
      Parameters:
      sourceFiles - a collection of source files.
      targetFiles - a collection of target files.
      Returns:
      true, if source files are not later than the target files; false, otherwise.
    • hasDelta

      protected boolean hasDelta(Iterable<File> files)
      Checks if the injected build context has changes in any of the specified files.
      Parameters:
      files - files to be checked for changes.
      Returns:
      true, if at least one file has changes; false, if no files have changes.
      Since:
      0.3.0
    • checkParameters

      protected void checkParameters()
    • getProtoSourceRoot

      protected abstract File getProtoSourceRoot()
    • getIncludes

      protected String[] getIncludes()
    • getExcludes

      protected String[] getExcludes()
    • getDependencyArtifacts

      protected abstract List<org.apache.maven.artifact.Artifact> getDependencyArtifacts()
    • getOutputDirectory

      protected abstract File getOutputDirectory()
      Returns the output directory for generated sources. Depends on build phase so must be defined in concrete implementation.
      Returns:
      output directory for generated sources.
    • getDescriptorSetOutputDirectory

      protected abstract File getDescriptorSetOutputDirectory()
      Returns output directory for descriptor set file. Depends on build phase so must be defined in concrete implementation.
      Returns:
      output directory for generated descriptor set.
      Since:
      0.3.0
    • doAttachFiles

      protected void doAttachFiles()
    • doAttachProtoSources

      protected abstract void doAttachProtoSources()
    • doAttachGeneratedFiles

      protected abstract void doAttachGeneratedFiles()
    • getDependencyArtifactFiles

      protected List<File> getDependencyArtifactFiles()
      Gets the File for each dependency artifact.
      Returns:
      A list of all dependency artifacts.
    • makeProtoPathFromJars

      protected List<File> makeProtoPathFromJars(File temporaryProtoFileDirectory, Iterable<File> classpathElementFiles)
      Unpacks proto descriptors that are bundled inside dependent artifacts into a temporary directory. This is needed because protobuf compiler cannot handle imported descriptors that are packed inside jar files.
      Parameters:
      temporaryProtoFileDirectory - temporary directory to serve as root for unpacked structure.
      classpathElementFiles - classpath elements, can be either jar files or directories.
      Returns:
      a list of import roots for protobuf compiler (these will all be subdirectories of the temporary directory).
    • findProtoFilesInDirectory

      protected List<File> findProtoFilesInDirectory(File directory)
    • findProtoFilesInDirectories

      protected List<File> findProtoFilesInDirectories(Iterable<File> directories)
    • truncatePath

      protected String truncatePath(String jarPath)
      Truncates the path of jar files so that they are relative to the local repository.
      Parameters:
      jarPath - the full path of a jar file.
      Returns:
      the truncated path relative to the local repository or root of the drive.
    • toHexString

      protected static String toHexString(byte[] byteArray)
    • resolveBinaryArtifact

      protected File resolveBinaryArtifact(org.apache.maven.artifact.Artifact artifact)
    • createDependencyArtifact

      protected org.apache.maven.artifact.Artifact createDependencyArtifact(String artifactSpec)
      Creates a dependency artifact from a specification in groupId:artifactId:version[:type[:classifier]] format.
      Parameters:
      artifactSpec - artifact specification.
      Returns:
      artifact object instance.
    • createDependencyArtifact

      protected org.apache.maven.artifact.Artifact createDependencyArtifact(String groupId, String artifactId, String version, String type, String classifier)