Package org.apache.felix.bundleplugin
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.AbstractMojoCreate an OSGi bundle from Maven project
-
-
Field Summary
Fields Modifier and Type Field Description protected org.apache.maven.artifact.factory.ArtifactFactoryartifactFactoryprotected org.apache.maven.artifact.resolver.ArtifactResolverartifactResolverArtifact resolver, needed to download source jars for inclusion in classpath.protected org.sonatype.plexus.build.incremental.BuildContextbuildContextprotected StringclassifierClassifier type of the bundle to be installed.protected booleancreateDependencyReducedPomIf true, remove any inlined or embedded dependencies from the resulting pom.protected org.apache.maven.shared.dependency.graph.DependencyGraphBuilderdependencyGraphBuilderprotected FiledependencyReducedPomLocationWhere to put the dependency reduced pom.protected FiledumpClasspathFile where the BND class-path will be dumpedprotected FiledumpInstructionsFile where the BND instructions will be dumpedprotected StringexcludeDependenciesComma separated list of artifactIds to exclude from the dependency classpath passed to BND (use "true" to exclude everything)protected booleanexportScrWhen true, dump the generated SCR filesprotected org.apache.maven.artifact.repository.ArtifactRepositorylocalRepositoryLocal maven repository.protected FilemanifestLocationDirectory where the manifest will be writtenprotected org.apache.maven.project.MavenProjectBuildermavenProjectBuilderProjectBuilder, needed to create projects from the artifacts.protected booleanniceManifestOutput a nicely formatted manifest that still respects the 72 character line limit.protected List<String>noWarningProjectTypesProject types which are not supported, but silently ignored.protected StringpackagingPackaging type of the bundle to be installed.protected org.apache.maven.project.MavenProjectprojectThe Maven project.protected List<org.apache.maven.artifact.repository.ArtifactRepository>remoteArtifactRepositoriesRemote repositories which will be searched for source attachments.protected FilescrLocationDirectory where the SCR files will be writtenprotected org.apache.maven.execution.MavenSessionsessionprotected List<String>supportedProjectTypesProject types which this plugin supports.protected booleanunpackBundleWhen true, unpack the bundle contents to the outputDirectory
-
Constructor Summary
Constructors Constructor Description BundlePlugin()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description 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, org.apache.felix.bundleplugin.BundlePlugin.ClassPathItem[] classpath)protected StringconvertVersionToOsgi(String version)Convert a Maven version into an OSGi compliant versionprotected 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, org.apache.felix.bundleplugin.BundlePlugin.ClassPathItem[] classpath)protected static FilegetBase(org.apache.maven.project.MavenProject currentProject)protected StringgetBuildDirectory()protected StringgetBundleName(org.apache.maven.project.MavenProject currentProject)TODO this should return getMaven2Osgi().getBundleFileName( project.getArtifact() )protected org.apache.felix.bundleplugin.BundlePlugin.ClassPathItem[]getClasspath(org.apache.maven.project.MavenProject currentProject)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 Artifactprotected Map<String,String>getInstructions()protected Maven2OsgiConvertergetMaven2OsgiConverter()protected static StringgetMavenResourcePaths(org.apache.maven.project.MavenProject currentProject, boolean test)protected Set<String>getOptionalPackages(org.apache.maven.project.MavenProject currentProject)protected aQute.bnd.osgi.BuildergetOSGiBuilder(org.apache.maven.project.MavenProject currentProject, Map<String,String> originalInstructions, org.apache.felix.bundleplugin.BundlePlugin.ClassPathItem[] classpath)protected FilegetOutputDirectory()protected org.apache.maven.project.MavenProjectgetProject()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.protected static voidmergeManifest(aQute.bnd.osgi.Instructions instructions, Manifest... manifests)protected voidmergeMavenManifest(org.apache.maven.project.MavenProject currentProject, aQute.bnd.osgi.Builder builder)protected static StringremoveTagFromInstruction(String instruction, String tag)protected booleanreportErrors(String prefix, aQute.bnd.osgi.Analyzer analyzer)protected static Stringsanitize(Object value)protected static Propertiessanitize(Properties properties)protected voidsetBuildDirectory(String _buildirectory)protected voidsetOutputDirectory(File _outputDirectory)protected static Map<String,String>transformDirectives(Map<String,String> originalInstructions)booleanupdateExcludesInDeps(org.apache.maven.project.MavenProject project, List<org.apache.maven.model.Dependency> dependencies, List<org.apache.maven.model.Dependency> transitiveDeps)
-
-
-
Field Detail
-
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
@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)
-
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 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
@Parameter(defaultValue="${project.build.outputDirectory}") protected File scrLocationDirectory where the SCR files will be written
-
exportScr
@Parameter protected boolean exportScr
When true, dump the generated SCR files
-
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
-
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 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
@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.
-
project
@Parameter(defaultValue="${project}", readonly=true, required=true) protected org.apache.maven.project.MavenProject projectThe Maven project.
-
buildContext
@Component protected org.sonatype.plexus.build.incremental.BuildContext buildContext
-
-
Method Detail
-
getMaven2OsgiConverter
protected Maven2OsgiConverter getMaven2OsgiConverter()
-
getProject
protected org.apache.maven.project.MavenProject getProject()
-
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, org.apache.felix.bundleplugin.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, org.apache.felix.bundleplugin.BundlePlugin.ClassPathItem[] classpath) throws Exception- Throws:
Exception
-
sanitize
protected static Properties sanitize(Properties properties)
-
addMavenInstructions
protected void addMavenInstructions(org.apache.maven.project.MavenProject currentProject, aQute.bnd.osgi.Builder builder) throws Exception- Throws:
Exception
-
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, org.apache.felix.bundleplugin.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
-
mergeManifest
protected static void mergeManifest(aQute.bnd.osgi.Instructions instructions, Manifest... manifests) throws IOException- 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
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-
-
removeTagFromInstruction
protected static String removeTagFromInstruction(String instruction, String tag)
-
getClasspath
protected org.apache.felix.bundleplugin.BundlePlugin.ClassPathItem[] getClasspath(org.apache.maven.project.MavenProject currentProject) throws IOException, org.apache.maven.plugin.MojoExecutionException- Throws:
IOExceptionorg.apache.maven.plugin.MojoExecutionException
-
getFile
protected File getFile(org.apache.maven.artifact.Artifact artifact)
Get the file for an Artifact- Parameters:
artifact-
-
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)
-
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.
-
-