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
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate org.apache.maven.archiver.MavenArchiveConfigurationThe archive configuration to use.private org.apache.maven.artifact.resolver.ArtifactCollectorprotected org.apache.maven.artifact.factory.ArtifactFactoryprivate org.apache.maven.artifact.metadata.ArtifactMetadataSourceprotected org.apache.maven.artifact.resolver.ArtifactResolverArtifact resolver, needed to download source jars for inclusion in classpath.protected org.sonatype.plexus.build.incremental.BuildContextprivate StringThe directory for the generated JAR.private static final Stringprivate static final Stringprotected StringClassifier type of the bundle to be installed.protected booleanIf true, remove any inlined or embedded dependencies from the resulting pom.private static final String[]protected org.apache.maven.shared.dependency.graph.DependencyGraphBuilderprotected FileWhere to put the dependency reduced pom.protected FileFile where the BND class-path will be dumpedprotected FileFile where the BND instructions will be dumpedprivate static final String[]protected StringComma separated list of artifactIds to exclude from the dependency classpath passed to BND (use "true" to exclude everything)protected booleanWhen true, dump the generated SCR filesprivate StringFinal name of the bundle (without classifier or extension)The BND instructions for the bundle.private static final Stringprotected org.apache.maven.artifact.repository.ArtifactRepositoryLocal maven repository.private org.codehaus.plexus.archiver.manager.ArchiverManagerprivate org.apache.maven.artifact.handler.manager.ArtifactHandlerManagerprivate final Maven2OsgiConverterUse locally patched version for now.private org.apache.maven.execution.MavenSessionprivate org.apache.maven.project.MavenProjectHelperprotected FileDirectory where the manifest will be writtenprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprotected org.apache.maven.project.MavenProjectBuilderProjectBuilder, needed to create projects from the artifacts.protected booleanOutput a nicely formatted manifest that still respects the 72 character line limit.private static final StringProject types which are not supported, but silently ignored.private FileThe directory for the generated bundles.private StringTimestamp for reproducible output archive entries, either formatted as ISO 8601yyyy-MM-dd'T'HH:mm:ssXXXor as an int representing seconds since the epoch (like SOURCE_DATE_EPOCH).protected StringPackaging type of the bundle to be installed.protected org.apache.maven.project.MavenProjectThe Maven project.protected List<org.apache.maven.artifact.repository.ArtifactRepository> Remote repositories which will be searched for source attachments.protected FileDirectory where the SCR files will be writtenprotected org.apache.maven.execution.MavenSessionprivate booleanProject types which this plugin supports.protected booleanWhen true, unpack the bundle contents to the outputDirectoryFields inherited from interface org.apache.maven.plugin.Mojo
ROLE -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate static voidaddLocalPackages(File outputDirectory, aQute.bnd.osgi.Analyzer analyzer) protected voidaddMavenInstructions(org.apache.maven.project.MavenProject currentProject, aQute.bnd.osgi.Builder builder) protected static voidaddMavenSourcePath(org.apache.maven.project.MavenProject currentProject, aQute.bnd.osgi.Analyzer analyzer, org.apache.maven.plugin.logging.Log log) protected aQute.bnd.osgi.BuilderbuildOSGiBundle(org.apache.maven.project.MavenProject currentProject, Map<String, String> originalInstructions, BundlePlugin.ClassPathItem[] classpath) protected StringconvertVersionToOsgi(String version) Convert a Maven version into an OSGi compliant versionprivate Stringprivate voidcreateDependencyReducedPom(Set<String> artifactsToRemove) private voiddoMavenMetadata(org.apache.maven.project.MavenProject currentProject, aQute.bnd.osgi.Jar jar) protected static StringBuilderdumpClasspath(List<aQute.bnd.osgi.Jar> classpath, StringBuilder buf) protected static StringBuilderdumpInstructions(Properties properties, StringBuilder buf) protected static StringBuilderdumpManifest(Manifest manifest, StringBuilder buf) voidexecute()protected voidexecute(Map<String, String> originalInstructions, BundlePlugin.ClassPathItem[] classpath) private static AttributesfilterAttributes(aQute.bnd.osgi.Instructions instructions, Attributes source, Set<aQute.bnd.osgi.Instruction> nomatch) protected static FilegetBase(org.apache.maven.project.MavenProject currentProject) protected Stringprotected StringgetBundleName(org.apache.maven.project.MavenProject currentProject) TODO this should return getMaven2Osgi().getBundleFileName( project.getArtifact() )protected BundlePlugin.ClassPathItem[]getClasspath(org.apache.maven.project.MavenProject currentProject) private static StringgetCreatedByVersion(String groupId, String artifactId) protected PropertiesgetDefaultProperties(org.apache.maven.project.MavenProject currentProject) protected Collection<org.apache.maven.artifact.Artifact> getEmbeddableArtifacts(org.apache.maven.project.MavenProject currentProject, aQute.bnd.osgi.Analyzer analyzer) protected FilegetFile(org.apache.maven.artifact.Artifact artifact) Get the file for an Artifactprivate Stringprivate StringgetId(org.apache.maven.artifact.Artifact artifact) private StringgetId(org.apache.maven.model.Dependency dependency) protected Maven2OsgiConverterprotected static StringgetMavenResourcePaths(org.apache.maven.project.MavenProject currentProject, boolean test) private static List<org.apache.maven.model.Resource> getMavenResources(org.apache.maven.project.MavenProject currentProject, boolean test) getOptionalPackages(org.apache.maven.project.MavenProject currentProject) protected aQute.bnd.osgi.BuildergetOSGiBuilder(org.apache.maven.project.MavenProject currentProject, Map<String, String> originalInstructions, BundlePlugin.ClassPathItem[] classpath) protected Fileprivate static StringgetPackageName(String filename) protected org.apache.maven.project.MavenProjectgetProperties(org.apache.maven.model.Model projectModel, String prefix) private Collection<org.apache.maven.artifact.Artifact> getSelectedDependencies(Collection<org.apache.maven.artifact.Artifact> artifacts) private static voidheader(Properties properties, String key, Object value) protected static voidincludeJava9Fixups(org.apache.maven.project.MavenProject currentProject, aQute.bnd.osgi.Analyzer analyzer) Downgrade the message "Classes found in the wrong directory" to a warning.protected static voidincludeMavenResources(org.apache.maven.project.MavenProject currentProject, aQute.bnd.osgi.Analyzer analyzer, org.apache.maven.plugin.logging.Log log) protected booleanisTransitivelyOptional(HashSet<String> optionalArtifactIds, org.apache.maven.artifact.Artifact artifact) Check to see if any dependency along the dependency trail of the artifact is optional.private static voidmergeAttributes(Attributes... attributesArray) protected static voidmergeManifest(aQute.bnd.osgi.Instructions instructions, Manifest... manifests) protected voidmergeMavenManifest(org.apache.maven.project.MavenProject currentProject, aQute.bnd.osgi.Builder builder) private static StringBufferprintLicenses(List<org.apache.maven.model.License> licenses) protected static StringremoveTagFromInstruction(String instruction, String tag) protected booleanreportErrors(String prefix, aQute.bnd.osgi.Analyzer analyzer) protected static Stringprotected static Propertiessanitize(Properties properties) protected voidsetBuildDirectory(String _buildirectory) protected voidsetOutputDirectory(File _outputDirectory) private byte[]toFileContentAsBytes(Properties properties) transformDirectives(Map<String, String> originalInstructions) private voidunpackBundle(File jarFile) booleanupdateExcludesInDeps(org.apache.maven.project.MavenProject project, List<org.apache.maven.model.Dependency> dependencies, List<org.apache.maven.model.Dependency> transitiveDeps) Methods inherited from class org.apache.maven.plugin.AbstractMojo
getLog, getPluginContext, setLog, setPluginContext
-
Field Details
-
manifestLocation
@Parameter(property="manifestLocation", defaultValue="${project.build.outputDirectory}/META-INF") protected File manifestLocationDirectory where the manifest will be written -
niceManifest
@Parameter(property="niceManifest", defaultValue="false") protected boolean niceManifestOutput a nicely formatted manifest that still respects the 72 character line limit. -
dumpInstructions
File where the BND instructions will be dumped -
dumpClasspath
File where the BND class-path will be dumped -
unpackBundle
@Parameter(property="unpackBundle") protected boolean unpackBundleWhen true, unpack the bundle contents to the outputDirectory -
excludeDependencies
Comma separated list of artifactIds to exclude from the dependency classpath passed to BND (use "true" to exclude everything) -
finalName
Final name of the bundle (without classifier or extension) -
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
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 createDependencyReducedPomIf true, remove any inlined or embedded dependencies from the resulting pom. -
dependencyReducedPomLocation
@Parameter(defaultValue="${basedir}/dependency-reduced-pom.xml") protected File dependencyReducedPomLocationWhere 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
Directory where the SCR files will be written -
exportScr
@Parameter protected boolean exportScrWhen 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 mavenProjectBuilderProjectBuilder, 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 artifactResolverArtifact 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 localRepositoryLocal maven repository. -
remoteArtifactRepositories
@Parameter(readonly=true, required=true, defaultValue="${project.remoteArtifactRepositories}") protected List<org.apache.maven.artifact.repository.ArtifactRepository> remoteArtifactRepositoriesRemote repositories which will be searched for source attachments. -
supportedProjectTypes
-
noWarningProjectTypes
-
outputDirectory
The directory for the generated bundles. -
buildDirectory
The directory for the generated JAR. -
project
@Parameter(defaultValue="${project}", readonly=true, required=true) protected org.apache.maven.project.MavenProject projectThe Maven project. -
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
Use locally patched version for now. -
archive
@Parameter private org.apache.maven.archiver.MavenArchiveConfiguration archiveThe archive configuration to use. -
m_mavenSession
@Parameter(defaultValue="${session}", readonly=true, required=true) private org.apache.maven.execution.MavenSession m_mavenSession -
outputTimestamp
Timestamp for reproducible output archive entries, either formatted as ISO 8601yyyy-MM-dd'T'HH:mm:ssXXXor 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
- See Also:
-
MAVEN_RESOURCES
- See Also:
-
MAVEN_TEST_RESOURCES
- See Also:
-
LOCAL_PACKAGES
- See Also:
-
MAVEN_SOURCES
- See Also:
-
MAVEN_TEST_SOURCES
- See Also:
-
BUNDLE_PLUGIN_EXTENSION
- See Also:
-
BUNDLE_PLUGIN_PREPEND_EXTENSION
- See Also:
-
EMPTY_STRING_ARRAY
-
DEFAULT_INCLUDES
-
NL
-
-
Constructor Details
-
BundlePlugin
public BundlePlugin()
-
-
Method Details
-
getMaven2OsgiConverter
-
getProject
protected org.apache.maven.project.MavenProject getProject() -
getInstructions
-
execute
public void execute() throws org.apache.maven.plugin.MojoExecutionException- Throws:
org.apache.maven.plugin.MojoExecutionException- See Also:
-
transformDirectives
-
reportErrors
-
execute
protected void execute(Map<String, String> originalInstructions, BundlePlugin.ClassPathItem[] classpath) throws org.apache.maven.plugin.MojoExecutionException- Throws:
org.apache.maven.plugin.MojoExecutionException
-
getOSGiBuilder
-
sanitize
-
sanitize
-
addMavenInstructions
-
createDependencyReducedPom
private void createDependencyReducedPom(Set<String> artifactsToRemove) throws IOException, org.apache.maven.project.ProjectBuildingException, org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException - Throws:
IOExceptionorg.apache.maven.project.ProjectBuildingExceptionorg.apache.maven.shared.dependency.graph.DependencyGraphBuilderException
-
getId
-
getId
-
getId
-
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
-
dumpInstructions
-
dumpClasspath
-
dumpManifest
-
includeMavenResources
protected static void includeMavenResources(org.apache.maven.project.MavenProject currentProject, aQute.bnd.osgi.Analyzer analyzer, org.apache.maven.plugin.logging.Log log) -
mergeMavenManifest
-
getCreatedByVersion
-
createdBy
-
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:
-
mergeAttributes
- Throws:
IOException
-
getOptionalPackages
protected Set<String> getOptionalPackages(org.apache.maven.project.MavenProject currentProject) throws IOException, org.apache.maven.plugin.MojoExecutionException - Throws:
IOExceptionorg.apache.maven.plugin.MojoExecutionException
-
isTransitivelyOptional
-
unpackBundle
-
removeTagFromInstruction
-
getProperties
-
printLicenses
-
doMavenMetadata
private void doMavenMetadata(org.apache.maven.project.MavenProject currentProject, aQute.bnd.osgi.Jar jar) throws IOException - Parameters:
jar-- Throws:
IOException
-
toFileContentAsBytes
-
getClasspath
protected BundlePlugin.ClassPathItem[] getClasspath(org.apache.maven.project.MavenProject currentProject) throws IOException, org.apache.maven.plugin.MojoExecutionException - Throws:
IOExceptionorg.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
Get the file for an Artifact- Parameters:
artifact-
-
header
-
convertVersionToOsgi
-
getBundleName
TODO this should return getMaven2Osgi().getBundleFileName( project.getArtifact() ) -
getBuildDirectory
-
setBuildDirectory
-
getDefaultProperties
-
getBase
-
getOutputDirectory
-
setOutputDirectory
-
addLocalPackages
private static void addLocalPackages(File outputDirectory, aQute.bnd.osgi.Analyzer analyzer) throws IOException - Throws:
IOException
-
getPackageName
-
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.
-