Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
A maven mojo that utilizes allows the use of the bnd generate function
This Mojo triggers the generate mechanism and can make use of the external plugins of bnd if provided as configuration. Signed-off-by: Juergen Albert <j.albert@data-in-motion.biz>
- Loading branch information
1 parent
9b8a654
commit ed6d824
Showing
88 changed files
with
3,024 additions
and
105 deletions.
There are no files selected for viewing
134 changes: 134 additions & 0 deletions
134
biz.aQute.bnd.maven/src/aQute/bnd/maven/lib/configuration/Configurations.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,134 @@ | ||
package aQute.bnd.maven.lib.configuration; | ||
|
||
import java.io.File; | ||
import java.util.List; | ||
import java.util.Objects; | ||
import java.util.Optional; | ||
|
||
import org.apache.maven.model.Plugin; | ||
import org.apache.maven.model.PluginExecution; | ||
import org.apache.maven.model.PluginManagement; | ||
import org.apache.maven.plugin.MojoExecution; | ||
import org.apache.maven.project.MavenProject; | ||
import org.codehaus.plexus.util.xml.Xpp3Dom; | ||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
|
||
import aQute.bnd.build.Project; | ||
import aQute.bnd.osgi.Processor; | ||
import aQute.lib.io.IO; | ||
import aQute.lib.utf8properties.UTF8Properties; | ||
|
||
/** | ||
* A helper to read configurations for maven plugins consistently over the | ||
* various Mojos. | ||
* | ||
* @author Juergen Albert | ||
*/ | ||
public class Configurations { | ||
|
||
protected final static Logger logger = LoggerFactory.getLogger(Configurations.class); | ||
|
||
public static File loadProperties(Processor processor, MavenProject project, MojoExecution mojoExecution) | ||
throws Exception { | ||
// Load parent project properties first | ||
loadParentProjectProperties(processor, project, mojoExecution); | ||
|
||
// Load current project properties | ||
Xpp3Dom configuration = Optional.ofNullable(project.getBuildPlugins()) | ||
.flatMap(new FlatMapHelper(mojoExecution)::getConfiguration) | ||
.orElseGet(Configurations::defaultConfiguration); | ||
return loadProjectProperties(processor, project, project, configuration); | ||
} | ||
|
||
private static void loadParentProjectProperties(Processor builder, MavenProject currentProject, | ||
MojoExecution mojoExecution) throws Exception { | ||
MavenProject parentProject = currentProject.getParent(); | ||
if (parentProject == null) { | ||
return; | ||
} | ||
loadParentProjectProperties(builder, parentProject, mojoExecution); | ||
|
||
// Get configuration from parent project | ||
Xpp3Dom configuration = Optional.ofNullable(parentProject.getBuildPlugins()) | ||
.flatMap(new FlatMapHelper(mojoExecution)::getConfiguration) | ||
.orElse(null); | ||
if (configuration != null) { | ||
// Load parent project's properties | ||
loadProjectProperties(builder, parentProject, parentProject, configuration); | ||
return; | ||
} | ||
|
||
// Get configuration in project's pluginManagement | ||
configuration = Optional.ofNullable(currentProject.getPluginManagement()) | ||
.map(PluginManagement::getPlugins) | ||
.flatMap(new FlatMapHelper(mojoExecution)::getConfiguration) | ||
.orElseGet(Configurations::defaultConfiguration); | ||
// Load properties from parent project's bnd file or configuration in | ||
// project's pluginManagement | ||
loadProjectProperties(builder, parentProject, currentProject, configuration); | ||
} | ||
|
||
private static File loadProjectProperties(Processor processor, MavenProject bndProject, MavenProject pomProject, | ||
Xpp3Dom configuration) throws Exception { | ||
// check for bnd file configuration | ||
File baseDir = bndProject.getBasedir(); | ||
if (baseDir != null) { // file system based pom | ||
File pomFile = bndProject.getFile(); | ||
processor.updateModified(pomFile.lastModified(), "POM: " + pomFile); | ||
// check for bnd file | ||
Xpp3Dom bndfileElement = configuration.getChild("bndfile"); | ||
String bndFileName = (bndfileElement != null) ? bndfileElement.getValue() : Project.BNDFILE; | ||
File bndFile = IO.getFile(baseDir, bndFileName); | ||
if (bndFile.isFile()) { | ||
logger.debug("loading bnd properties from file: {}", bndFile); | ||
// we use setProperties to handle -include | ||
processor.setProperties(bndFile.getParentFile(), processor.loadProperties(bndFile)); | ||
return bndFile; | ||
} | ||
// no bnd file found, so we fall through | ||
} | ||
|
||
// check for bnd-in-pom configuration | ||
baseDir = pomProject.getBasedir(); | ||
File pomFile = pomProject.getFile(); | ||
if (baseDir != null) { | ||
processor.updateModified(pomFile.lastModified(), "POM: " + pomFile); | ||
} | ||
Xpp3Dom bndElement = configuration.getChild("bnd"); | ||
if (bndElement != null) { | ||
logger.debug("loading bnd properties from bnd element in pom: {}", pomProject); | ||
UTF8Properties properties = new UTF8Properties(); | ||
properties.load(bndElement.getValue(), pomFile, processor); | ||
// we use setProperties to handle -include | ||
processor.setProperties(baseDir, properties.replaceHere(baseDir)); | ||
} | ||
return pomFile; | ||
} | ||
|
||
private static class FlatMapHelper { | ||
|
||
private MojoExecution mojoExecution; | ||
|
||
public FlatMapHelper(MojoExecution mojoExecution) { | ||
this.mojoExecution = mojoExecution; | ||
} | ||
|
||
public Optional<Xpp3Dom> getConfiguration(List<Plugin> plugins) { | ||
return plugins.stream() | ||
.filter(p -> Objects.equals(p, mojoExecution.getPlugin())) | ||
.map(Plugin::getExecutions) | ||
.flatMap(List::stream) | ||
.filter(e -> Objects.equals(e.getId(), mojoExecution.getExecutionId())) | ||
.findFirst() | ||
.map(PluginExecution::getConfiguration) | ||
.map(Xpp3Dom.class::cast) | ||
.map(Xpp3Dom::new); | ||
} | ||
} | ||
|
||
private static Xpp3Dom defaultConfiguration() { | ||
return new Xpp3Dom("configuration"); | ||
} | ||
|
||
} |
2 changes: 1 addition & 1 deletion
2
biz.aQute.bnd.maven/src/aQute/bnd/maven/lib/configuration/package-info.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
@Version("1.1.0") | ||
@Version("1.2.0") | ||
@Export | ||
package aQute.bnd.maven.lib.configuration; | ||
|
||
|
Oops, something went wrong.