Class BundlePlugin

java.lang.Object
org.apache.maven.plugin.AbstractMojo
org.apache.felix.bundleplugin.BundlePlugin
All Implemented Interfaces:
org.apache.maven.plugin.ContextEnabled, org.apache.maven.plugin.Mojo
Direct Known Subclasses:
AntPlugin, InstructionsPlugin, ManifestPlugin

@Mojo(name="bundle", requiresDependencyResolution=TEST, threadSafe=true, defaultPhase=PACKAGE) public class BundlePlugin extends org.apache.maven.plugin.AbstractMojo
Create an OSGi bundle from Maven project
  • Field Details

    • manifestLocation

      @Parameter(property="manifestLocation", defaultValue="${project.build.outputDirectory}/META-INF") protected File manifestLocation
      Directory where the manifest will be written
    • niceManifest

      @Parameter(property="niceManifest", defaultValue="false") protected boolean niceManifest
      Output a nicely formatted manifest that still respects the 72 character line limit.
    • dumpInstructions

      @Parameter(property="dumpInstructions") protected File dumpInstructions
      File where the BND instructions will be dumped
    • dumpClasspath

      @Parameter(property="dumpClasspath") protected File dumpClasspath
      File where the BND class-path will be dumped
    • unpackBundle

      @Parameter(property="unpackBundle") protected boolean unpackBundle
      When true, unpack the bundle contents to the outputDirectory
    • excludeDependencies

      @Parameter(property="excludeDependencies") protected String excludeDependencies
      Comma separated list of artifactIds to exclude from the dependency classpath passed to BND (use "true" to exclude everything)
    • finalName

      @Parameter(defaultValue="${project.build.finalName}") private String finalName
      Final name of the bundle (without classifier or extension)
    • classifier

      @Parameter protected String classifier
      Classifier type of the bundle to be installed. For example, "jdk14". Defaults to none which means this is the project's main bundle.
    • packaging

      @Parameter protected String packaging
      Packaging type of the bundle to be installed. For example, "jar". Defaults to none which means use the same packaging as the project.
    • createDependencyReducedPom

      @Parameter protected boolean createDependencyReducedPom
      If true, remove any inlined or embedded dependencies from the resulting pom.
    • dependencyReducedPomLocation

      @Parameter(defaultValue="${basedir}/dependency-reduced-pom.xml") protected File dependencyReducedPomLocation
      Where to put the dependency reduced pom. Note: setting a value for this parameter with a directory other than ${basedir} will change the value of ${basedir} for all executions that come after the shade execution. This is often not what you want. This is considered an open issue with this plugin.
    • scrLocation

      @Parameter(defaultValue="${project.build.outputDirectory}") protected File scrLocation
      Directory where the SCR files will be written
    • exportScr

      @Parameter protected boolean exportScr
      When true, dump the generated SCR files
    • m_projectHelper

      @Component private org.apache.maven.project.MavenProjectHelper m_projectHelper
    • m_archiverManager

      @Component private org.codehaus.plexus.archiver.manager.ArchiverManager m_archiverManager
    • m_artifactHandlerManager

      @Component private org.apache.maven.artifact.handler.manager.ArtifactHandlerManager m_artifactHandlerManager
    • session

      @Parameter(defaultValue="${session}", readonly=true) protected org.apache.maven.execution.MavenSession session
    • mavenProjectBuilder

      @Component protected org.apache.maven.project.MavenProjectBuilder mavenProjectBuilder
      ProjectBuilder, needed to create projects from the artifacts.
    • dependencyGraphBuilder

      @Component protected org.apache.maven.shared.dependency.graph.DependencyGraphBuilder dependencyGraphBuilder
    • artifactMetadataSource

      @Component private org.apache.maven.artifact.metadata.ArtifactMetadataSource artifactMetadataSource
    • artifactCollector

      @Component private org.apache.maven.artifact.resolver.ArtifactCollector artifactCollector
    • artifactFactory

      @Component protected org.apache.maven.artifact.factory.ArtifactFactory artifactFactory
    • artifactResolver

      @Component protected org.apache.maven.artifact.resolver.ArtifactResolver artifactResolver
      Artifact resolver, needed to download source jars for inclusion in classpath.
    • localRepository

      @Parameter(readonly=true, required=true, defaultValue="${localRepository}") protected org.apache.maven.artifact.repository.ArtifactRepository localRepository
      Local maven repository.
    • remoteArtifactRepositories

      @Parameter(readonly=true, required=true, defaultValue="${project.remoteArtifactRepositories}") protected List<org.apache.maven.artifact.repository.ArtifactRepository> remoteArtifactRepositories
      Remote repositories which will be searched for source attachments.
    • supportedProjectTypes

      @Parameter protected List<String> supportedProjectTypes
      Project types which this plugin supports.
    • noWarningProjectTypes

      @Parameter protected List<String> noWarningProjectTypes
      Project types which are not supported, but silently ignored.
    • outputDirectory

      @Parameter(defaultValue="${project.build.outputDirectory}") private File outputDirectory
      The directory for the generated bundles.
    • buildDirectory

      @Parameter(defaultValue="${project.build.directory}") private String buildDirectory
      The directory for the generated JAR.
    • project

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

      @Parameter private Map<String,String> instructions
      The BND instructions for the bundle. Maven will expand property macros in these values. If you want to use a BND macro, you must double the dollar sign for the plugin to pass it to BND correctly. For example:
      <_consumer-policy>$${range;[===,+)}<code></_consumer-policy>
    • m_maven2OsgiConverter

      private final Maven2OsgiConverter m_maven2OsgiConverter
      Use locally patched version for now.
    • archive

      @Parameter private org.apache.maven.archiver.MavenArchiveConfiguration archive
      The archive configuration to use.
    • m_mavenSession

      @Parameter(defaultValue="${session}", readonly=true, required=true) private org.apache.maven.execution.MavenSession m_mavenSession
    • outputTimestamp

      @Parameter(defaultValue="${project.build.outputTimestamp}") private String outputTimestamp
      Timestamp for reproducible output archive entries, either formatted as ISO 8601 yyyy-MM-dd'T'HH:mm:ssXXX or as an int representing seconds since the epoch (like SOURCE_DATE_EPOCH).
      Since:
      5.1.3
    • buildContext

      @Component protected org.sonatype.plexus.build.incremental.BuildContext buildContext
    • skip

      @Parameter(defaultValue="false", property="bundle.skip") private boolean skip
    • MAVEN_SYMBOLICNAME

      private static final String MAVEN_SYMBOLICNAME
      See Also:
    • MAVEN_RESOURCES

      private static final String MAVEN_RESOURCES
      See Also:
    • MAVEN_TEST_RESOURCES

      private static final String MAVEN_TEST_RESOURCES
      See Also:
    • LOCAL_PACKAGES

      private static final String LOCAL_PACKAGES
      See Also:
    • MAVEN_SOURCES

      private static final String MAVEN_SOURCES
      See Also:
    • MAVEN_TEST_SOURCES

      private static final String MAVEN_TEST_SOURCES
      See Also:
    • BUNDLE_PLUGIN_EXTENSION

      private static final String BUNDLE_PLUGIN_EXTENSION
      See Also:
    • BUNDLE_PLUGIN_PREPEND_EXTENSION

      private static final String BUNDLE_PLUGIN_PREPEND_EXTENSION
      See Also:
    • EMPTY_STRING_ARRAY

      private static final String[] EMPTY_STRING_ARRAY
    • DEFAULT_INCLUDES

      private static final String[] DEFAULT_INCLUDES
    • NL

      private static final String NL
  • Constructor Details

    • BundlePlugin

      public BundlePlugin()
  • Method Details

    • getMaven2OsgiConverter

      protected Maven2OsgiConverter getMaven2OsgiConverter()
    • getProject

      protected org.apache.maven.project.MavenProject getProject()
    • getInstructions

      protected Map<String,String> getInstructions()
    • execute

      public void execute() throws org.apache.maven.plugin.MojoExecutionException
      Throws:
      org.apache.maven.plugin.MojoExecutionException
      See Also:
      • Mojo.execute()
    • transformDirectives

      protected static Map<String,String> transformDirectives(Map<String,String> originalInstructions)
    • reportErrors

      protected boolean reportErrors(String prefix, aQute.bnd.osgi.Analyzer analyzer)
    • execute

      protected void execute(Map<String,String> originalInstructions, BundlePlugin.ClassPathItem[] classpath) throws org.apache.maven.plugin.MojoExecutionException
      Throws:
      org.apache.maven.plugin.MojoExecutionException
    • getOSGiBuilder

      protected aQute.bnd.osgi.Builder getOSGiBuilder(org.apache.maven.project.MavenProject currentProject, Map<String,String> originalInstructions, BundlePlugin.ClassPathItem[] classpath) throws Exception
      Throws:
      Exception
    • sanitize

      protected static Properties sanitize(Properties properties)
    • sanitize

      protected static String sanitize(Object value)
    • addMavenInstructions

      protected void addMavenInstructions(org.apache.maven.project.MavenProject currentProject, aQute.bnd.osgi.Builder builder) throws Exception
      Throws:
      Exception
    • createDependencyReducedPom

      private void createDependencyReducedPom(Set<String> artifactsToRemove) throws IOException, org.apache.maven.project.ProjectBuildingException, org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException
      Throws:
      IOException
      org.apache.maven.project.ProjectBuildingException
      org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException
    • getId

      private String getId(org.apache.maven.artifact.Artifact artifact)
    • getId

      private String getId(org.apache.maven.model.Dependency dependency)
    • getId

      private String getId(String groupId, String artifactId, String type, String classifier)
    • updateExcludesInDeps

      public boolean updateExcludesInDeps(org.apache.maven.project.MavenProject project, List<org.apache.maven.model.Dependency> dependencies, List<org.apache.maven.model.Dependency> transitiveDeps) throws org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException
      Throws:
      org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException
    • buildOSGiBundle

      protected aQute.bnd.osgi.Builder buildOSGiBundle(org.apache.maven.project.MavenProject currentProject, Map<String,String> originalInstructions, BundlePlugin.ClassPathItem[] classpath) throws Exception
      Throws:
      Exception
    • dumpInstructions

      protected static StringBuilder dumpInstructions(Properties properties, StringBuilder buf)
    • dumpClasspath

      protected static StringBuilder dumpClasspath(List<aQute.bnd.osgi.Jar> classpath, StringBuilder buf)
    • dumpManifest

      protected static StringBuilder dumpManifest(Manifest manifest, StringBuilder buf)
    • includeMavenResources

      protected static void includeMavenResources(org.apache.maven.project.MavenProject currentProject, aQute.bnd.osgi.Analyzer analyzer, org.apache.maven.plugin.logging.Log log)
    • mergeMavenManifest

      protected void mergeMavenManifest(org.apache.maven.project.MavenProject currentProject, aQute.bnd.osgi.Builder builder) throws Exception
      Throws:
      Exception
    • getCreatedByVersion

      private static String getCreatedByVersion(String groupId, String artifactId)
    • createdBy

      private String createdBy(String description, String groupId, String artifactId)
    • mergeManifest

      protected static void mergeManifest(aQute.bnd.osgi.Instructions instructions, Manifest... manifests) throws IOException
      Throws:
      IOException
    • filterAttributes

      private static Attributes filterAttributes(aQute.bnd.osgi.Instructions instructions, Attributes source, Set<aQute.bnd.osgi.Instruction> nomatch)
      See Also:
      • Analyzer.filter(aQute.bnd.osgi.Instructions, aQute.bnd.osgi.Packages, java.util.Set<aQute.bnd.osgi.Instruction>)
    • mergeAttributes

      private static void mergeAttributes(Attributes... attributesArray) throws IOException
      Throws:
      IOException
    • getOptionalPackages

      protected Set<String> getOptionalPackages(org.apache.maven.project.MavenProject currentProject) throws IOException, org.apache.maven.plugin.MojoExecutionException
      Throws:
      IOException
      org.apache.maven.plugin.MojoExecutionException
    • isTransitivelyOptional

      protected boolean isTransitivelyOptional(HashSet<String> optionalArtifactIds, org.apache.maven.artifact.Artifact artifact)
      Check to see if any dependency along the dependency trail of the artifact is optional.
      Parameters:
      artifact -
    • unpackBundle

      private void unpackBundle(File jarFile)
    • removeTagFromInstruction

      protected static String removeTagFromInstruction(String instruction, String tag)
    • getProperties

      private static Map<String,String> getProperties(org.apache.maven.model.Model projectModel, String prefix)
    • printLicenses

      private static StringBuffer printLicenses(List<org.apache.maven.model.License> licenses)
    • doMavenMetadata

      private void doMavenMetadata(org.apache.maven.project.MavenProject currentProject, aQute.bnd.osgi.Jar jar) throws IOException
      Parameters:
      jar -
      Throws:
      IOException
    • toFileContentAsBytes

      private byte[] toFileContentAsBytes(Properties properties)
    • getClasspath

      protected BundlePlugin.ClassPathItem[] getClasspath(org.apache.maven.project.MavenProject currentProject) throws IOException, org.apache.maven.plugin.MojoExecutionException
      Throws:
      IOException
      org.apache.maven.plugin.MojoExecutionException
    • getSelectedDependencies

      private Collection<org.apache.maven.artifact.Artifact> getSelectedDependencies(Collection<org.apache.maven.artifact.Artifact> artifacts) throws org.apache.maven.plugin.MojoExecutionException
      Throws:
      org.apache.maven.plugin.MojoExecutionException
    • getFile

      protected File getFile(org.apache.maven.artifact.Artifact artifact)
      Get the file for an Artifact
      Parameters:
      artifact -
    • header

      private static void header(Properties properties, String key, Object value)
    • convertVersionToOsgi

      protected String convertVersionToOsgi(String version)
      Convert a Maven version into an OSGi compliant version
      Parameters:
      version - Maven version
      Returns:
      the OSGi version
    • getBundleName

      protected String getBundleName(org.apache.maven.project.MavenProject currentProject)
      TODO this should return getMaven2Osgi().getBundleFileName( project.getArtifact() )
    • getBuildDirectory

      protected String getBuildDirectory()
    • setBuildDirectory

      protected void setBuildDirectory(String _buildirectory)
    • getDefaultProperties

      protected Properties getDefaultProperties(org.apache.maven.project.MavenProject currentProject)
    • getBase

      protected static File getBase(org.apache.maven.project.MavenProject currentProject)
    • getOutputDirectory

      protected File getOutputDirectory()
    • setOutputDirectory

      protected void setOutputDirectory(File _outputDirectory)
    • addLocalPackages

      private static void addLocalPackages(File outputDirectory, aQute.bnd.osgi.Analyzer analyzer) throws IOException
      Throws:
      IOException
    • getPackageName

      private static String getPackageName(String filename)
    • getMavenResources

      private static List<org.apache.maven.model.Resource> getMavenResources(org.apache.maven.project.MavenProject currentProject, boolean test)
    • getMavenResourcePaths

      protected static String getMavenResourcePaths(org.apache.maven.project.MavenProject currentProject, boolean test)
    • getEmbeddableArtifacts

      protected Collection<org.apache.maven.artifact.Artifact> getEmbeddableArtifacts(org.apache.maven.project.MavenProject currentProject, aQute.bnd.osgi.Analyzer analyzer) throws org.apache.maven.plugin.MojoExecutionException
      Throws:
      org.apache.maven.plugin.MojoExecutionException
    • addMavenSourcePath

      protected static void addMavenSourcePath(org.apache.maven.project.MavenProject currentProject, aQute.bnd.osgi.Analyzer analyzer, org.apache.maven.plugin.logging.Log log)
    • includeJava9Fixups

      protected static void includeJava9Fixups(org.apache.maven.project.MavenProject currentProject, aQute.bnd.osgi.Analyzer analyzer)
      Downgrade the message "Classes found in the wrong directory" to a warning. This allows the plugin to process a multi-release JAR (see JEP 238, http://openjdk.java.net/jeps/238). Note that the version-specific paths will NOT be visible at runtime nor processed by bnd for imported packages etc. This will not be possible until a runtime solution for multi-release JARs exists in OSGi. This fix only allows these JARs to be processed at all and to be usable on Java 8 (and below), and also on Java 9 where the version-specific customizations are optional.