From 4a4afea7f23d3404674a7c6a99d879318998213c Mon Sep 17 00:00:00 2001 From: Juergen Albert Date: Mon, 5 Sep 2022 15:07:10 +0200 Subject: [PATCH 1/3] Improved error Message for Bnd Code Generator Signed-off-by: Juergen Albert Signed-off-by: BJ Hargrave --- biz.aQute.bndlib/src/aQute/bnd/build/ProjectGenerate.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/biz.aQute.bndlib/src/aQute/bnd/build/ProjectGenerate.java b/biz.aQute.bndlib/src/aQute/bnd/build/ProjectGenerate.java index d3f0741a9b..6f3722d16b 100644 --- a/biz.aQute.bndlib/src/aQute/bnd/build/ProjectGenerate.java +++ b/biz.aQute.bndlib/src/aQute/bnd/build/ProjectGenerate.java @@ -93,7 +93,7 @@ private Result prepare(String sourceWithDuplicate, GeneratorSpec st) { Set sourceFiles = new FileSet(project.getBase(), source).getFiles(); if (sourceFiles.isEmpty()) - return err("No source files/directories specified"); + return err("No source files/directories found in fileset %s", source); File out = project.getFile(output); if (out.isDirectory()) { From 35699fd764266ab546a11b73d745414d74211456 Mon Sep 17 00:00:00 2001 From: Juergen Albert Date: Mon, 5 Sep 2022 15:05:15 +0200 Subject: [PATCH 2/3] Moved bnd Configuration load to reusable Helper Class Signed-off-by: Juergen Albert Signed-off-by: BJ Hargrave --- .../lib/configuration/BndConfiguration.java | 129 ++++++++++++++++++ .../maven/lib/configuration/package-info.java | 2 +- .../maven/plugin/AbstractBndMavenPlugin.java | 106 +------------- 3 files changed, 136 insertions(+), 101 deletions(-) create mode 100644 biz.aQute.bnd.maven/src/aQute/bnd/maven/lib/configuration/BndConfiguration.java diff --git a/biz.aQute.bnd.maven/src/aQute/bnd/maven/lib/configuration/BndConfiguration.java b/biz.aQute.bnd.maven/src/aQute/bnd/maven/lib/configuration/BndConfiguration.java new file mode 100644 index 0000000000..60253bcde5 --- /dev/null +++ b/biz.aQute.bnd.maven/src/aQute/bnd/maven/lib/configuration/BndConfiguration.java @@ -0,0 +1,129 @@ +package aQute.bnd.maven.lib.configuration; + +import static java.util.Objects.requireNonNull; + +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 Bnd configuration for maven plugins consistently over the + * various Mojos. + */ +public class BndConfiguration { + private final static Logger logger = LoggerFactory.getLogger(BndConfiguration.class); + + private final MavenProject project; + private final MojoExecution mojoExecution; + + public BndConfiguration(MavenProject project, MojoExecution mojoExecution) { + this.project = requireNonNull(project); + this.mojoExecution = requireNonNull(mojoExecution); + } + + public File loadProperties(Processor processor) throws Exception { + // Load parent project properties first + loadParentProjectProperties(processor, project); + + // Load current project properties + Xpp3Dom configuration = Optional.ofNullable(project.getBuildPlugins()) + .flatMap(this::getConfiguration) + .orElseGet(this::defaultConfiguration); + return loadProjectProperties(processor, project, project, configuration); + } + + private void loadParentProjectProperties(Processor builder, MavenProject currentProject) throws Exception { + MavenProject parentProject = currentProject.getParent(); + if (parentProject == null) { + return; + } + loadParentProjectProperties(builder, parentProject); + + // Get configuration from parent project + Xpp3Dom configuration = Optional.ofNullable(parentProject.getBuildPlugins()) + .flatMap(this::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(this::getConfiguration) + .orElseGet(this::defaultConfiguration); + // Load properties from parent project's bnd file or configuration in + // project's pluginManagement + loadProjectProperties(builder, parentProject, currentProject, configuration); + } + + private 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 Optional getConfiguration(List 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 Xpp3Dom defaultConfiguration() { + return new Xpp3Dom("configuration"); + } +} diff --git a/biz.aQute.bnd.maven/src/aQute/bnd/maven/lib/configuration/package-info.java b/biz.aQute.bnd.maven/src/aQute/bnd/maven/lib/configuration/package-info.java index f39dbf8a3a..46493f165a 100644 --- a/biz.aQute.bnd.maven/src/aQute/bnd/maven/lib/configuration/package-info.java +++ b/biz.aQute.bnd.maven/src/aQute/bnd/maven/lib/configuration/package-info.java @@ -1,4 +1,4 @@ -@Version("1.1.0") +@Version("1.2.0") @Export package aQute.bnd.maven.lib.configuration; diff --git a/maven/bnd-maven-plugin/src/main/java/aQute/bnd/maven/plugin/AbstractBndMavenPlugin.java b/maven/bnd-maven-plugin/src/main/java/aQute/bnd/maven/plugin/AbstractBndMavenPlugin.java index ca98dd7a79..527da020b5 100644 --- a/maven/bnd-maven-plugin/src/main/java/aQute/bnd/maven/plugin/AbstractBndMavenPlugin.java +++ b/maven/bnd-maven-plugin/src/main/java/aQute/bnd/maven/plugin/AbstractBndMavenPlugin.java @@ -30,7 +30,6 @@ import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Objects; import java.util.Optional; import java.util.Properties; import java.util.Set; @@ -44,6 +43,7 @@ import aQute.bnd.header.OSGiHeader; import aQute.bnd.maven.PomPropertiesResource; import aQute.bnd.maven.lib.configuration.BeanProperties; +import aQute.bnd.maven.lib.configuration.BndConfiguration; import aQute.bnd.osgi.Builder; import aQute.bnd.osgi.Constants; import aQute.bnd.osgi.FileResource; @@ -54,7 +54,6 @@ import aQute.bnd.version.Version; import aQute.lib.io.IO; import aQute.lib.strings.Strings; -import aQute.lib.utf8properties.UTF8Properties; import aQute.service.reporter.Report.Location; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.handler.ArtifactHandler; @@ -62,9 +61,6 @@ import org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter; import org.apache.maven.model.Developer; import org.apache.maven.model.License; -import org.apache.maven.model.Plugin; -import org.apache.maven.model.PluginExecution; -import org.apache.maven.model.PluginManagement; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecution; import org.apache.maven.plugin.MojoExecutionException; @@ -76,7 +72,6 @@ import org.apache.maven.settings.Settings; import org.apache.maven.shared.mapping.MappingUtils; import org.codehaus.plexus.util.StringUtils; -import org.codehaus.plexus.util.xml.Xpp3Dom; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.sonatype.plexus.build.incremental.BuildContext; @@ -147,7 +142,8 @@ public abstract class AbstractBndMavenPlugin extends AbstractMojo { * instructions, if any, for the parent project. */ @Parameter(defaultValue = Project.BNDFILE) - // This is not used and is for doc only; see loadProjectProperties + // This is not used and is for doc only; see {@link + // BndConfiguration#loadProperties(Processor)} @SuppressWarnings("unused") String bndfile; @@ -161,7 +157,8 @@ public abstract class AbstractBndMavenPlugin extends AbstractMojo { * instructions, if any, for the parent project. */ @Parameter - // This is not used and is for doc only; see loadProjectProperties + // This is not used and is for doc only; See {@link + // BndConfiguration#loadProperties(Processor)} @SuppressWarnings("unused") String bnd; @@ -236,7 +233,7 @@ public void execute() throws MojoExecutionException, MojoFailureException { builder.setTrace(logger.isDebugEnabled()); builder.setBase(project.getBasedir()); - propertiesFile = loadProperties(builder); + propertiesFile = new BndConfiguration(project, mojoExecution).loadProperties(builder); builder.setProperty("project.output", getClassesDir().getCanonicalPath()); // If no bundle to be built, we have nothing to do @@ -683,97 +680,6 @@ private String createArtifactName(Artifact artifact) { getExtension(artifact.getType())); } - private File loadProperties(Builder builder) throws Exception { - // Load parent project properties first - loadParentProjectProperties(builder, project); - - // Load current project properties - Xpp3Dom configuration = Optional.ofNullable(project.getBuildPlugins()) - .flatMap(this::getConfiguration) - .orElseGet(this::defaultConfiguration); - return loadProjectProperties(builder, project, project, configuration); - } - - private void loadParentProjectProperties(Builder builder, MavenProject currentProject) throws Exception { - MavenProject parentProject = currentProject.getParent(); - if (parentProject == null) { - return; - } - loadParentProjectProperties(builder, parentProject); - - // Get configuration from parent project - Xpp3Dom configuration = Optional.ofNullable(parentProject.getBuildPlugins()) - .flatMap(this::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(this::getConfiguration) - .orElseGet(this::defaultConfiguration); - // Load properties from parent project's bnd file or configuration in - // project's pluginManagement - loadProjectProperties(builder, parentProject, currentProject, configuration); - } - - private File loadProjectProperties(Builder builder, 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(); - builder.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 - builder.setProperties(bndFile.getParentFile(), builder.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) { - builder.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, builder); - // we use setProperties to handle -include - builder.setProperties(baseDir, properties.replaceHere(baseDir)); - } - return pomFile; - } - - private Optional getConfiguration(List 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 Xpp3Dom defaultConfiguration() { - return new Xpp3Dom("configuration"); - } - protected void reportErrorsAndWarnings(Builder builder) throws MojoFailureException { @SuppressWarnings("unchecked") Collection markedFiles = (Collection) buildContext.getValue(MARKED_FILES); From 4746f9d9afcae14130278379515b36227be8819f Mon Sep 17 00:00:00 2001 From: Juergen Albert Date: Mon, 5 Sep 2022 15:11:42 +0200 Subject: [PATCH 3/3] Adds generator maven plugin Signed-off-by: Juergen Albert Signed-off-by: BJ Hargrave --- maven/README.md | 5 + maven/bnd-generate-maven-plugin/.gitignore | 3 + maven/bnd-generate-maven-plugin/.project | 23 + .../org.eclipse.core.resources.prefs | 4 + .../.settings/org.eclipse.core.runtime.prefs | 2 + .../.settings/org.eclipse.jdt.core.prefs | 517 ++++++++++++++++++ .../.settings/org.eclipse.jdt.ui.prefs | 148 +++++ .../.settings/org.eclipse.m2e.core.prefs | 4 + .../Debug mvnDebug.launch | 21 + maven/bnd-generate-maven-plugin/README.md | 99 ++++ maven/bnd-generate-maven-plugin/pom.xml | 49 ++ .../bnd.bnd | 5 + .../invoker.properties | 7 + .../pom.xml | 43 ++ .../postbuild.groovy | 24 + .../src/main/resources/model/test.ecore | 5 + .../src/main/resources/model/test.genmodel | 12 + .../it/generate-dependency-management/bnd.bnd | 5 + .../invoker.properties | 7 + .../it/generate-dependency-management/pom.xml | 54 ++ .../postbuild.groovy | 24 + .../src/main/resources/model/test.ecore | 5 + .../src/main/resources/model/test.genmodel | 12 + .../bnd.bnd | 5 + .../invoker.properties | 7 + .../pom.xml | 62 +++ .../postbuild.groovy | 31 ++ .../src/main/resources/model/test.ecore | 5 + .../src/main/resources/model/test.genmodel | 12 + .../invoker.properties | 7 + .../pom.xml | 62 +++ .../postbuild.groovy | 27 + .../src/main/resources/model/test.ecore | 5 + .../src/main/resources/model/test.genmodel | 12 + .../invoker.properties | 7 + .../it/generate-maven-configuration/pom.xml | 54 ++ .../postbuild.groovy | 24 + .../src/main/resources/model/test.ecore | 5 + .../src/main/resources/model/test.genmodel | 12 + .../src/it/generate/bnd.bnd | 5 + .../src/it/generate/invoker.properties | 7 + .../src/it/generate/pom.xml | 46 ++ .../src/it/generate/postbuild.groovy | 24 + .../src/main/resources/model/test.ecore | 5 + .../src/main/resources/model/test.genmodel | 12 + .../src/it/settings.xml | 50 ++ .../maven/generate/plugin/BndContainer.java | 249 +++++++++ .../maven/generate/plugin/GenerateMojo.java | 198 +++++++ .../generate/plugin/GenerateOperation.java | 16 + .../aQute/bnd/maven/generate/plugin/Step.java | 74 +++ .../m2e/lifecycle-mapping-metadata.xml | 18 + maven/pom.xml | 1 + 52 files changed, 2120 insertions(+) create mode 100644 maven/bnd-generate-maven-plugin/.gitignore create mode 100644 maven/bnd-generate-maven-plugin/.project create mode 100644 maven/bnd-generate-maven-plugin/.settings/org.eclipse.core.resources.prefs create mode 100644 maven/bnd-generate-maven-plugin/.settings/org.eclipse.core.runtime.prefs create mode 100644 maven/bnd-generate-maven-plugin/.settings/org.eclipse.jdt.core.prefs create mode 100644 maven/bnd-generate-maven-plugin/.settings/org.eclipse.jdt.ui.prefs create mode 100644 maven/bnd-generate-maven-plugin/.settings/org.eclipse.m2e.core.prefs create mode 100644 maven/bnd-generate-maven-plugin/Debug mvnDebug.launch create mode 100644 maven/bnd-generate-maven-plugin/README.md create mode 100644 maven/bnd-generate-maven-plugin/pom.xml create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate-dependency-management-error/bnd.bnd create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate-dependency-management-error/invoker.properties create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate-dependency-management-error/pom.xml create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate-dependency-management-error/postbuild.groovy create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate-dependency-management-error/src/main/resources/model/test.ecore create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate-dependency-management-error/src/main/resources/model/test.genmodel create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate-dependency-management/bnd.bnd create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate-dependency-management/invoker.properties create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate-dependency-management/pom.xml create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate-dependency-management/postbuild.groovy create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate-dependency-management/src/main/resources/model/test.ecore create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate-dependency-management/src/main/resources/model/test.genmodel create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps-mixed/bnd.bnd create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps-mixed/invoker.properties create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps-mixed/pom.xml create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps-mixed/postbuild.groovy create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps-mixed/src/main/resources/model/test.ecore create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps-mixed/src/main/resources/model/test.genmodel create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps/invoker.properties create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps/pom.xml create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps/postbuild.groovy create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps/src/main/resources/model/test.ecore create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps/src/main/resources/model/test.genmodel create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration/invoker.properties create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration/pom.xml create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration/postbuild.groovy create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration/src/main/resources/model/test.ecore create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration/src/main/resources/model/test.genmodel create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate/bnd.bnd create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate/invoker.properties create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate/pom.xml create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate/postbuild.groovy create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate/src/main/resources/model/test.ecore create mode 100644 maven/bnd-generate-maven-plugin/src/it/generate/src/main/resources/model/test.genmodel create mode 100644 maven/bnd-generate-maven-plugin/src/it/settings.xml create mode 100644 maven/bnd-generate-maven-plugin/src/main/java/aQute/bnd/maven/generate/plugin/BndContainer.java create mode 100644 maven/bnd-generate-maven-plugin/src/main/java/aQute/bnd/maven/generate/plugin/GenerateMojo.java create mode 100644 maven/bnd-generate-maven-plugin/src/main/java/aQute/bnd/maven/generate/plugin/GenerateOperation.java create mode 100644 maven/bnd-generate-maven-plugin/src/main/java/aQute/bnd/maven/generate/plugin/Step.java create mode 100644 maven/bnd-generate-maven-plugin/src/main/resources/META-INF/m2e/lifecycle-mapping-metadata.xml diff --git a/maven/README.md b/maven/README.md index 229e14e905..136397b1bd 100644 --- a/maven/README.md +++ b/maven/README.md @@ -59,6 +59,10 @@ A plugin to run a bndrun file. A plugin to generate and export reports of projects. +## [bnd-generate-maven-plugin][11] + +A plugin to generate sources and resources. + # Building the Maven Plugins You must first run `./gradlew :build` to build the Bnd artifacts and install them in your local maven repo. @@ -113,3 +117,4 @@ pom's `pluginManagement` section, to configure the repository: [8]: bnd-testing-maven-plugin/README.md [9]: bnd-run-maven-plugin/README.md [10]: bnd-reporter-maven-plugin/README.md +[11]: bnd-generate-maven-plugin/README.md diff --git a/maven/bnd-generate-maven-plugin/.gitignore b/maven/bnd-generate-maven-plugin/.gitignore new file mode 100644 index 0000000000..16fbf9090b --- /dev/null +++ b/maven/bnd-generate-maven-plugin/.gitignore @@ -0,0 +1,3 @@ +/target/ +/bin/ +/.classpath diff --git a/maven/bnd-generate-maven-plugin/.project b/maven/bnd-generate-maven-plugin/.project new file mode 100644 index 0000000000..3a3e4bdc4c --- /dev/null +++ b/maven/bnd-generate-maven-plugin/.project @@ -0,0 +1,23 @@ + + + bnd-generate-maven-plugin + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/maven/bnd-generate-maven-plugin/.settings/org.eclipse.core.resources.prefs b/maven/bnd-generate-maven-plugin/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000000..abdea9ac03 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding/=UTF-8 diff --git a/maven/bnd-generate-maven-plugin/.settings/org.eclipse.core.runtime.prefs b/maven/bnd-generate-maven-plugin/.settings/org.eclipse.core.runtime.prefs new file mode 100644 index 0000000000..5a0ad22d2a --- /dev/null +++ b/maven/bnd-generate-maven-plugin/.settings/org.eclipse.core.runtime.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +line.separator=\n diff --git a/maven/bnd-generate-maven-plugin/.settings/org.eclipse.jdt.core.prefs b/maven/bnd-generate-maven-plugin/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000..88a52ef81d --- /dev/null +++ b/maven/bnd-generate-maven-plugin/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,517 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.builder.cleanOutputFolder=clean +org.eclipse.jdt.core.builder.duplicateResourceTask=warning +org.eclipse.jdt.core.builder.invalidClasspath=abort +org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore +org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch +org.eclipse.jdt.core.circularClasspath=error +org.eclipse.jdt.core.classpath.exclusionPatterns=enabled +org.eclipse.jdt.core.classpath.mainOnlyProjectHasTestOnlyDependency=error +org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled +org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=error +org.eclipse.jdt.core.codeComplete.argumentPrefixes= +org.eclipse.jdt.core.codeComplete.argumentSuffixes= +org.eclipse.jdt.core.codeComplete.fieldPrefixes= +org.eclipse.jdt.core.codeComplete.fieldSuffixes= +org.eclipse.jdt.core.codeComplete.localPrefixes= +org.eclipse.jdt.core.codeComplete.localSuffixes= +org.eclipse.jdt.core.codeComplete.staticFieldPrefixes= +org.eclipse.jdt.core.codeComplete.staticFieldSuffixes= +org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes= +org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes= +org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnull.secondary= +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary= +org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullable.secondary= +org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.doc.comment.support=enabled +org.eclipse.jdt.core.compiler.maxProblemPerUnit=100 +org.eclipse.jdt.core.compiler.problem.APILeak=warning +org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.autoboxing=ignore +org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning +org.eclipse.jdt.core.compiler.problem.deadCode=warning +org.eclipse.jdt.core.compiler.problem.deprecation=warning +org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled +org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled +org.eclipse.jdt.core.compiler.problem.discouragedReference=warning +org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore +org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore +org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled +org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore +org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning +org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning +org.eclipse.jdt.core.compiler.problem.forbiddenReference=error +org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning +org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled +org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning +org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning +org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore +org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning +org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled +org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled +org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled +org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public +org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore +org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning +org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore +org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled +org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning +org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore +org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled +org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public +org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag +org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore +org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled +org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled +org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled +org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning +org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore +org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning +org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning +org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore +org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning +org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning +org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning +org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore +org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning +org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore +org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning +org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning +org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore +org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore +org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore +org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled +org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning +org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled +org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled +org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore +org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning +org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning +org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled +org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning +org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning +org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore +org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning +org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning +org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled +org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info +org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore +org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore +org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore +org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled +org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedImport=warning +org.eclipse.jdt.core.compiler.problem.unusedLabel=warning +org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore +org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled +org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning +org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedWarningToken=ignore +org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning +org.eclipse.jdt.core.compiler.processAnnotations=disabled +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled +org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,NORMAL +org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME +org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false +org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647 +org.eclipse.jdt.core.formatter.align_type_members_on_columns=true +org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false +org.eclipse.jdt.core.formatter.align_with_spaces=false +org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_assignment=0 +org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0 +org.eclipse.jdt.core.formatter.alignment_for_enum_constants=17 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0 +org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_module_statements=16 +org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 +org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0 +org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 +org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=81 +org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0 +org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16 +org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0 +org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0 +org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 +org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_after_package=1 +org.eclipse.jdt.core.formatter.blank_lines_before_field=0 +org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 +org.eclipse.jdt.core.formatter.blank_lines_before_method=1 +org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 +org.eclipse.jdt.core.formatter.blank_lines_before_package=0 +org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 +org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 +org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=false +org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true +org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=false +org.eclipse.jdt.core.formatter.comment.format_block_comments=true +org.eclipse.jdt.core.formatter.comment.format_header=false +org.eclipse.jdt.core.formatter.comment.format_html=true +org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true +org.eclipse.jdt.core.formatter.comment.format_line_comments=true +org.eclipse.jdt.core.formatter.comment.format_source_code=true +org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true +org.eclipse.jdt.core.formatter.comment.indent_root_tags=true +org.eclipse.jdt.core.formatter.comment.indent_tag_description=false +org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert +org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert +org.eclipse.jdt.core.formatter.comment.line_length=80 +org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true +org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true +org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false +org.eclipse.jdt.core.formatter.compact_else_if=true +org.eclipse.jdt.core.formatter.continuation_indentation=1 +org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=1 +org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off +org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on +org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true +org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_empty_lines=false +org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true +org.eclipse.jdt.core.formatter.indentation.size=4 +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert +org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default=insert +org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert +org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert +org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert +org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert +org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case=insert +org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default=insert +org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert +org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert +org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert +org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.join_lines_in_comments=true +org.eclipse.jdt.core.formatter.join_wrapped_lines=true +org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_if_empty +org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_if_empty +org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_if_empty +org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false +org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_if_empty +org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_if_empty +org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_if_empty +org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_if_empty +org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_if_empty +org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_if_empty +org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false +org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_if_empty +org.eclipse.jdt.core.formatter.lineSplit=120 +org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false +org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines +org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.jdt.core.formatter.tabulation.char=tab +org.eclipse.jdt.core.formatter.tabulation.size=4 +org.eclipse.jdt.core.formatter.use_on_off_tags=true +org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false +org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true +org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false +org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true +org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true +org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true +org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true +org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true +org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true +org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true +org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true +org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true +org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true +org.eclipse.jdt.core.incompatibleJDKLevel=ignore +org.eclipse.jdt.core.incompleteClasspath=error +org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter diff --git a/maven/bnd-generate-maven-plugin/.settings/org.eclipse.jdt.ui.prefs b/maven/bnd-generate-maven-plugin/.settings/org.eclipse.jdt.ui.prefs new file mode 100644 index 0000000000..a21ff13162 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/.settings/org.eclipse.jdt.ui.prefs @@ -0,0 +1,148 @@ +cleanup.add_default_serial_version_id=true +cleanup.add_generated_serial_version_id=false +cleanup.add_missing_annotations=true +cleanup.add_missing_deprecated_annotations=true +cleanup.add_missing_methods=false +cleanup.add_missing_nls_tags=false +cleanup.add_missing_override_annotations=true +cleanup.add_missing_override_annotations_interface_methods=true +cleanup.add_serial_version_id=true +cleanup.always_use_blocks=true +cleanup.always_use_parentheses_in_expressions=false +cleanup.always_use_this_for_non_static_field_access=false +cleanup.always_use_this_for_non_static_method_access=false +cleanup.convert_functional_interfaces=true +cleanup.convert_to_enhanced_for_loop=true +cleanup.convert_to_enhanced_for_loop_if_loop_var_used=false +cleanup.correct_indentation=false +cleanup.format_source_code=false +cleanup.format_source_code_changes_only=false +cleanup.insert_inferred_type_arguments=false +cleanup.lazy_logical_operator=false +cleanup.make_local_variable_final=true +cleanup.make_parameters_final=false +cleanup.make_private_fields_final=true +cleanup.make_type_abstract_if_missing_method=false +cleanup.make_variable_declarations_final=false +cleanup.merge_conditional_blocks=false +cleanup.never_use_blocks=false +cleanup.never_use_parentheses_in_expressions=true +cleanup.number_suffix=true +cleanup.objects_equals=true +cleanup.organize_imports=false +cleanup.precompile_regex=true +cleanup.push_down_negation=false +cleanup.qualify_static_field_accesses_with_declaring_class=false +cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true +cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true +cleanup.qualify_static_member_accesses_with_declaring_class=true +cleanup.qualify_static_method_accesses_with_declaring_class=false +cleanup.remove_private_constructors=true +cleanup.remove_redundant_modifiers=true +cleanup.remove_redundant_semicolons=true +cleanup.remove_redundant_type_arguments=true +cleanup.remove_trailing_whitespaces=true +cleanup.remove_trailing_whitespaces_all=true +cleanup.remove_trailing_whitespaces_ignore_empty=false +cleanup.remove_unnecessary_array_creation=true +cleanup.remove_unnecessary_casts=true +cleanup.remove_unnecessary_nls_tags=true +cleanup.remove_unused_imports=true +cleanup.remove_unused_local_variables=false +cleanup.remove_unused_private_fields=true +cleanup.remove_unused_private_members=true +cleanup.remove_unused_private_methods=true +cleanup.remove_unused_private_types=true +cleanup.simplify_lambda_expression_and_method_ref=true +cleanup.sort_members=false +cleanup.sort_members_all=false +cleanup.use_anonymous_class_creation=false +cleanup.use_autoboxing=false +cleanup.use_blocks=false +cleanup.use_blocks_only_for_return_and_throw=false +cleanup.use_directly_map_method=true +cleanup.use_lambda=true +cleanup.use_parentheses_in_expressions=false +cleanup.use_this_for_non_static_field_access=false +cleanup.use_this_for_non_static_field_access_only_if_necessary=true +cleanup.use_this_for_non_static_method_access=false +cleanup.use_this_for_non_static_method_access_only_if_necessary=true +cleanup.use_type_arguments=false +cleanup.use_unboxing=false +cleanup.use_var=false +cleanup_profile=_bnd +cleanup_settings_version=2 +eclipse.preferences.version=1 +editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true +formatter_profile=_bnd +formatter_settings_version=16 +org.eclipse.jdt.ui.exception.name=e +org.eclipse.jdt.ui.gettersetter.use.is=true +org.eclipse.jdt.ui.ignorelowercasenames=true +org.eclipse.jdt.ui.importorder=java;javax; +org.eclipse.jdt.ui.javadoc=false +org.eclipse.jdt.ui.keywordthis=false +org.eclipse.jdt.ui.ondemandthreshold=99 +org.eclipse.jdt.ui.overrideannotation=true +org.eclipse.jdt.ui.staticondemandthreshold=99 +org.eclipse.jdt.ui.text.custom_code_templates= +sp_cleanup.add_default_serial_version_id=true +sp_cleanup.add_generated_serial_version_id=false +sp_cleanup.add_missing_annotations=true +sp_cleanup.add_missing_deprecated_annotations=true +sp_cleanup.add_missing_methods=false +sp_cleanup.add_missing_nls_tags=false +sp_cleanup.add_missing_override_annotations=true +sp_cleanup.add_missing_override_annotations_interface_methods=true +sp_cleanup.add_serial_version_id=false +sp_cleanup.always_use_blocks=true +sp_cleanup.always_use_parentheses_in_expressions=false +sp_cleanup.always_use_this_for_non_static_field_access=false +sp_cleanup.always_use_this_for_non_static_method_access=false +sp_cleanup.convert_functional_interfaces=false +sp_cleanup.convert_to_enhanced_for_loop=false +sp_cleanup.correct_indentation=false +sp_cleanup.format_source_code=true +sp_cleanup.format_source_code_changes_only=true +sp_cleanup.insert_inferred_type_arguments=false +sp_cleanup.make_local_variable_final=false +sp_cleanup.make_parameters_final=false +sp_cleanup.make_private_fields_final=true +sp_cleanup.make_type_abstract_if_missing_method=false +sp_cleanup.make_variable_declarations_final=false +sp_cleanup.never_use_blocks=false +sp_cleanup.never_use_parentheses_in_expressions=true +sp_cleanup.on_save_use_additional_actions=true +sp_cleanup.organize_imports=true +sp_cleanup.qualify_static_field_accesses_with_declaring_class=false +sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true +sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=false +sp_cleanup.qualify_static_member_accesses_with_declaring_class=true +sp_cleanup.qualify_static_method_accesses_with_declaring_class=false +sp_cleanup.remove_private_constructors=true +sp_cleanup.remove_redundant_modifiers=true +sp_cleanup.remove_redundant_semicolons=true +sp_cleanup.remove_redundant_type_arguments=false +sp_cleanup.remove_trailing_whitespaces=true +sp_cleanup.remove_trailing_whitespaces_all=true +sp_cleanup.remove_trailing_whitespaces_ignore_empty=false +sp_cleanup.remove_unnecessary_casts=true +sp_cleanup.remove_unnecessary_nls_tags=true +sp_cleanup.remove_unused_imports=true +sp_cleanup.remove_unused_local_variables=false +sp_cleanup.remove_unused_private_fields=true +sp_cleanup.remove_unused_private_members=false +sp_cleanup.remove_unused_private_methods=true +sp_cleanup.remove_unused_private_types=true +sp_cleanup.sort_members=false +sp_cleanup.sort_members_all=false +sp_cleanup.use_anonymous_class_creation=false +sp_cleanup.use_blocks=false +sp_cleanup.use_blocks_only_for_return_and_throw=false +sp_cleanup.use_lambda=true +sp_cleanup.use_parentheses_in_expressions=false +sp_cleanup.use_this_for_non_static_field_access=false +sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true +sp_cleanup.use_this_for_non_static_method_access=false +sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true +sp_cleanup.use_type_arguments=false diff --git a/maven/bnd-generate-maven-plugin/.settings/org.eclipse.m2e.core.prefs b/maven/bnd-generate-maven-plugin/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000000..f897a7f1cb --- /dev/null +++ b/maven/bnd-generate-maven-plugin/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/maven/bnd-generate-maven-plugin/Debug mvnDebug.launch b/maven/bnd-generate-maven-plugin/Debug mvnDebug.launch new file mode 100644 index 0000000000..7e79ce5809 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/Debug mvnDebug.launch @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/maven/bnd-generate-maven-plugin/README.md b/maven/bnd-generate-maven-plugin/README.md new file mode 100644 index 0000000000..9dff50c2dc --- /dev/null +++ b/maven/bnd-generate-maven-plugin/README.md @@ -0,0 +1,99 @@ +# bnd-generate-maven-plugin + +The `bnd-generate-maven-plugin` is a bnd based plugin to run bnd generators. + +## What does the `bnd-generate-maven-plugin` do? + +It provides a flexible mechanism, that can run system commands or run external generator plugins. A more general description about the use of generators in bnd can be found [here](https://bnd.bndtools.org/instructions/generate.html). A few examples can be found in the [tests](https://github.com/bndtools/bnd/tree/master/maven/bnd-generate-maven-plugin/src/it) for this plugin. + +An example that runs `dir` and pipes it to a file looks like + +``` + + biz.aQute.bnd + bnd-generate-maven-plugin + ${bnd.version} + + + + src/main/resources/marker.txt + dir > src/main/java/test.txt + src/main/java + + src/main/resources/model/test.genmodel + + + + + + + generate-sources + + bnd-generate + + + + +``` + +An example running a code generator twice located in an external artifact. + +``` + + biz.aQute.bnd + bnd-generate-maven-plugin + ${bnd.version} + + + + org.geckoprojects.emf + org.gecko.emf.osgi.codegen + 4.1.1.202202162308 + + + + + src/main/resources/model/test.genmodel + geckoEMF 1>out.log 2>out.log + src/main/java + + src/main/resources/model/test.genmodel + + + + src/main/resources/model/test.genmodel + geckoEMF 1>out.log 2>out.log + src/main/java2 + + src/main/resources/model/test.genmodel + + + + + + + generate-sources + + bnd-generate + + + + +``` + +## Configuration Properties + +This plugin supports configuration via an bnd file which uses the standard `-generate` instruction as described in the [bnd documentation](https://bnd.bndtools.org/instructions/generate.html). A more maven typical configuration is supported as well via the steps. Please note, that the steps will be translated in in a list of instructions as bnd understands internally as per definition in the documentation. Concretely it will result in the instruction `-generate.maven:` which may be overwritten if the exact same namespace is used in the `bndfile` or `bnd` configuration. + +| Configuration Property | Description | +| ---------------------- | ------------------------------------------------------------ | +|`bndfile` | File path to a bnd file containing bnd instructions for this project. The file path can be either absolute or relative to the project directory. _Defaults to `bnd.bnd`_.| +|`bnd` | Bnd instructions for this project specified directly in the pom file. This is generally be done using a `` section. If the projects has a `bndfile` configuration property or a file in the default location `bnd.bnd`, then this configuration element is ignored. | +| `externalPlugins` | A list of artefact's containing any of the desired code generators. The Artifact, that contains the required generator will be loaded by bnd in a completely isolated classloader and thus must be an uber jar containing all the classes it requires. | +| `steps` | A list of generate steps, that will be executed in the given order | +| `step.trigger` | A trigger is comprised of a ant like fileset expression like `src/main/resources/model/**.mymodel`. If the file is newer then any file in the output folder, the code will be generated again. _This is required when a step is configured._ | +| `step.output` | The output folder where the result will be expected. _This is required when a step is configured._ | +| `step.generateCommand` | A generate command conforms to the generate property in the original bnd [instruction](https://bnd.bndtools.org/instructions/generate.html). It can name an external plugin or call a main Class. _Default to `bnd.executablejar`._ | +| `step.systemCommand` | A System command that will be executed if set. | +| `step.properties` | A map of additional properties that the generator to call my need. | +| `skip` | Skip the goal. _Defaults to `false`._ Override with property `bnd.generate.skip`. | diff --git a/maven/bnd-generate-maven-plugin/pom.xml b/maven/bnd-generate-maven-plugin/pom.xml new file mode 100644 index 0000000000..9c65bbe6ac --- /dev/null +++ b/maven/bnd-generate-maven-plugin/pom.xml @@ -0,0 +1,49 @@ + + 4.0.0 + + biz.aQute.bnd + bnd-plugin-parent + ${revision} + ../bnd-plugin-parent + + bnd-generate-maven-plugin + Generate Code using the Plugin based BND Codegenerator function + Bnd Generate Maven Plugin + maven-plugin + https://bnd.bndtools.org/ + + https://github.com/bndtools/bnd + scm:git:https://github.com/bndtools/bnd.git + scm:git:git@github.com:bndtools/bnd.git + ${revision} + + + + ${maven.target.version} + + + + + org.apache.maven + maven-core + + + org.apache.maven + maven-plugin-api + + + org.apache.maven.plugin-tools + maven-plugin-annotations + + + org.slf4j + slf4j-api + + + ${project.groupId} + biz.aQute.bnd.maven + + + diff --git a/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management-error/bnd.bnd b/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management-error/bnd.bnd new file mode 100644 index 0000000000..ed96126992 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management-error/bnd.bnd @@ -0,0 +1,5 @@ +-generate:\ + src/main/resources/model/test.genmodel;\ + generate="geckoEMF 1>out.log 2>out.log";\ + genmodel="src/main/resources/model/test.genmodel";\ + output=src/main/java diff --git a/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management-error/invoker.properties b/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management-error/invoker.properties new file mode 100644 index 0000000000..dd0dc4a659 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management-error/invoker.properties @@ -0,0 +1,7 @@ +invoker.goals=--no-transfer-progress --fail-never package + +# Run mvn with --debug for debug logging +#invoker.debug=true + +# Run mvn in debugging mode and wait for a debugger to attach +#invoker.environmentVariables.MAVEN_DEBUG_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8000 diff --git a/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management-error/pom.xml b/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management-error/pom.xml new file mode 100644 index 0000000000..4720845e34 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management-error/pom.xml @@ -0,0 +1,43 @@ + + 4.0.0 + + + biz.aQute.bnd-test + generate-dependency-management-error + 0.0.1 + jar + + + + org.geckoprojects.emf + org.gecko.emf.osgi.api + 4.1.1.202202162308 + + + + + + + biz.aQute.bnd + bnd-generate-maven-plugin + ${bnd.version} + + + + org.geckoprojects.emf + org.gecko.emf.osgi.codegen + + + + + + generate-sources + + bnd-generate + + + + + + + \ No newline at end of file diff --git a/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management-error/postbuild.groovy b/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management-error/postbuild.groovy new file mode 100644 index 0000000000..4d3a5b181f --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management-error/postbuild.groovy @@ -0,0 +1,24 @@ +import aQute.bnd.build.Workspace +import aQute.bnd.build.model.BndEditModel +import aQute.bnd.osgi.Processor +import aQute.bnd.properties.Document +import aQute.bnd.version.MavenVersion +import aQute.lib.io.IO + +import java.util.jar.Attributes +import java.util.jar.JarFile; + +def baseVersion = new MavenVersion(bndVersion).toReleaseVersion() + +// Check the ecore file exist! +File ecore = new File(basedir,"src/main/resources/model/test.ecore") +assert ecore.isFile() + +// Check the genmodel file exist! +File genmodel = new File(basedir,"src/main/resources/model/test.genmodel") +assert genmodel.isFile() + +// Check the if some code generated file exist! +File testClass = new File(basedir,"src/main/java/aQute/bnd/maven/model/test/Test.java") +assert !testClass.isFile() + diff --git a/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management-error/src/main/resources/model/test.ecore b/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management-error/src/main/resources/model/test.ecore new file mode 100644 index 0000000000..b88fed4710 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management-error/src/main/resources/model/test.ecore @@ -0,0 +1,5 @@ + + + + diff --git a/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management-error/src/main/resources/model/test.genmodel b/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management-error/src/main/resources/model/test.genmodel new file mode 100644 index 0000000000..2621855f1e --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management-error/src/main/resources/model/test.genmodel @@ -0,0 +1,12 @@ + + + test.ecore + + + + diff --git a/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management/bnd.bnd b/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management/bnd.bnd new file mode 100644 index 0000000000..ed96126992 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management/bnd.bnd @@ -0,0 +1,5 @@ +-generate:\ + src/main/resources/model/test.genmodel;\ + generate="geckoEMF 1>out.log 2>out.log";\ + genmodel="src/main/resources/model/test.genmodel";\ + output=src/main/java diff --git a/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management/invoker.properties b/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management/invoker.properties new file mode 100644 index 0000000000..9c7a7746f7 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management/invoker.properties @@ -0,0 +1,7 @@ +invoker.goals=--no-transfer-progress package + +# Run mvn with --debug for debug logging +#invoker.debug=true + +# Run mvn in debugging mode and wait for a debugger to attach +#invoker.environmentVariables.MAVEN_DEBUG_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8000 diff --git a/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management/pom.xml b/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management/pom.xml new file mode 100644 index 0000000000..a3e23633a3 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management/pom.xml @@ -0,0 +1,54 @@ + + 4.0.0 + + + biz.aQute.bnd-test + generate-dependency-management + 0.0.1 + jar + + + + + org.geckoprojects.emf + org.gecko.emf.osgi.codegen + 4.1.1.202202162308 + + + + + + + + org.geckoprojects.emf + org.gecko.emf.osgi.api + 4.1.1.202202162308 + + + + + + + biz.aQute.bnd + bnd-generate-maven-plugin + ${bnd.version} + + + + org.geckoprojects.emf + org.gecko.emf.osgi.codegen + + + + + + generate-sources + + bnd-generate + + + + + + + \ No newline at end of file diff --git a/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management/postbuild.groovy b/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management/postbuild.groovy new file mode 100644 index 0000000000..a54bef6831 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management/postbuild.groovy @@ -0,0 +1,24 @@ +import aQute.bnd.build.Workspace +import aQute.bnd.build.model.BndEditModel +import aQute.bnd.osgi.Processor +import aQute.bnd.properties.Document +import aQute.bnd.version.MavenVersion +import aQute.lib.io.IO + +import java.util.jar.Attributes +import java.util.jar.JarFile; + +def baseVersion = new MavenVersion(bndVersion).toReleaseVersion() + +// Check the ecore file exist! +File ecore = new File(basedir,"src/main/resources/model/test.ecore") +assert ecore.isFile() + +// Check the genmodel file exist! +File genmodel = new File(basedir,"src/main/resources/model/test.genmodel") +assert genmodel.isFile() + +// Check the if some code generated file exist! +File testClass = new File(basedir,"src/main/java/aQute/bnd/maven/model/test/Test.java") +assert testClass.isFile() + diff --git a/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management/src/main/resources/model/test.ecore b/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management/src/main/resources/model/test.ecore new file mode 100644 index 0000000000..b88fed4710 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management/src/main/resources/model/test.ecore @@ -0,0 +1,5 @@ + + + + diff --git a/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management/src/main/resources/model/test.genmodel b/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management/src/main/resources/model/test.genmodel new file mode 100644 index 0000000000..2621855f1e --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate-dependency-management/src/main/resources/model/test.genmodel @@ -0,0 +1,12 @@ + + + test.ecore + + + + diff --git a/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps-mixed/bnd.bnd b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps-mixed/bnd.bnd new file mode 100644 index 0000000000..6ee70b1517 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps-mixed/bnd.bnd @@ -0,0 +1,5 @@ +-generate:\ + src/main/resources/model/test.genmodel;\ + generate="geckoEMF 1>out.log 2>out.log";\ + genmodel="src/main/resources/model/test.genmodel";\ + output=src/main/java3 diff --git a/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps-mixed/invoker.properties b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps-mixed/invoker.properties new file mode 100644 index 0000000000..9c7a7746f7 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps-mixed/invoker.properties @@ -0,0 +1,7 @@ +invoker.goals=--no-transfer-progress package + +# Run mvn with --debug for debug logging +#invoker.debug=true + +# Run mvn in debugging mode and wait for a debugger to attach +#invoker.environmentVariables.MAVEN_DEBUG_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8000 diff --git a/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps-mixed/pom.xml b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps-mixed/pom.xml new file mode 100644 index 0000000000..a0080ee7e6 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps-mixed/pom.xml @@ -0,0 +1,62 @@ + + 4.0.0 + + + biz.aQute.bnd-test + generate-maven-configuration-multiple-steps-mixed + 0.0.1 + jar + + + + org.geckoprojects.emf + org.gecko.emf.osgi.api + 4.1.1.202202162308 + + + + + + + biz.aQute.bnd + bnd-generate-maven-plugin + ${bnd.version} + + + + org.geckoprojects.emf + org.gecko.emf.osgi.codegen + 4.1.1.202202162308 + + + + + src/main/resources/model/test.genmodel + geckoEMF 1>out.log 2>out.log + src/main/java + + src/main/resources/model/test.genmodel + + + + src/main/resources/model/test.genmodel + geckoEMF 1>out.log 2>out.log + src/main/java2 + + src/main/resources/model/test.genmodel + + + + + + + generate-sources + + bnd-generate + + + + + + + \ No newline at end of file diff --git a/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps-mixed/postbuild.groovy b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps-mixed/postbuild.groovy new file mode 100644 index 0000000000..4180624b43 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps-mixed/postbuild.groovy @@ -0,0 +1,31 @@ +import aQute.bnd.build.Workspace +import aQute.bnd.build.model.BndEditModel +import aQute.bnd.osgi.Processor +import aQute.bnd.properties.Document +import aQute.bnd.version.MavenVersion +import aQute.lib.io.IO + +import java.util.jar.Attributes +import java.util.jar.JarFile; + +def baseVersion = new MavenVersion(bndVersion).toReleaseVersion() + +// Check the ecore file exist! +File ecore = new File(basedir,"src/main/resources/model/test.ecore") +assert ecore.isFile() + +// Check the genmodel file exist! +File genmodel = new File(basedir,"src/main/resources/model/test.genmodel") +assert genmodel.isFile() + +// Check the if some code generated file exist! +File testClass = new File(basedir,"src/main/java/aQute/bnd/maven/model/test/Test.java") +assert testClass.isFile() +// Check the if the second step was done +File testClass2 = new File(basedir,"src/main/java2/aQute/bnd/maven/model/test/Test.java") +assert testClass2.isFile() + +// Check the if the code from the bnd.bnd file instruction was generated +File testClass3 = new File(basedir,"src/main/java3/aQute/bnd/maven/model/test/Test.java") +assert testClass3.isFile() + diff --git a/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps-mixed/src/main/resources/model/test.ecore b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps-mixed/src/main/resources/model/test.ecore new file mode 100644 index 0000000000..b88fed4710 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps-mixed/src/main/resources/model/test.ecore @@ -0,0 +1,5 @@ + + + + diff --git a/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps-mixed/src/main/resources/model/test.genmodel b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps-mixed/src/main/resources/model/test.genmodel new file mode 100644 index 0000000000..2621855f1e --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps-mixed/src/main/resources/model/test.genmodel @@ -0,0 +1,12 @@ + + + test.ecore + + + + diff --git a/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps/invoker.properties b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps/invoker.properties new file mode 100644 index 0000000000..9c7a7746f7 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps/invoker.properties @@ -0,0 +1,7 @@ +invoker.goals=--no-transfer-progress package + +# Run mvn with --debug for debug logging +#invoker.debug=true + +# Run mvn in debugging mode and wait for a debugger to attach +#invoker.environmentVariables.MAVEN_DEBUG_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8000 diff --git a/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps/pom.xml b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps/pom.xml new file mode 100644 index 0000000000..dfec9f14e5 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps/pom.xml @@ -0,0 +1,62 @@ + + 4.0.0 + + + biz.aQute.bnd-test + generate-maven-configuration-multiple-steps + 0.0.1 + jar + + + + org.geckoprojects.emf + org.gecko.emf.osgi.api + 4.1.1.202202162308 + + + + + + + biz.aQute.bnd + bnd-generate-maven-plugin + ${bnd.version} + + + + org.geckoprojects.emf + org.gecko.emf.osgi.codegen + 4.1.1.202202162308 + + + + + src/main/resources/model/test.genmodel + geckoEMF 1>out.log 2>out.log + src/main/java + + src/main/resources/model/test.genmodel + + + + src/main/resources/model/test.genmodel + geckoEMF 1>out.log 2>out.log + src/main/java2 + + src/main/resources/model/test.genmodel + + + + + + + generate-sources + + bnd-generate + + + + + + + \ No newline at end of file diff --git a/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps/postbuild.groovy b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps/postbuild.groovy new file mode 100644 index 0000000000..efcc9340e5 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps/postbuild.groovy @@ -0,0 +1,27 @@ +import aQute.bnd.build.Workspace +import aQute.bnd.build.model.BndEditModel +import aQute.bnd.osgi.Processor +import aQute.bnd.properties.Document +import aQute.bnd.version.MavenVersion +import aQute.lib.io.IO + +import java.util.jar.Attributes +import java.util.jar.JarFile; + +def baseVersion = new MavenVersion(bndVersion).toReleaseVersion() + +// Check the ecore file exist! +File ecore = new File(basedir,"src/main/resources/model/test.ecore") +assert ecore.isFile() + +// Check the genmodel file exist! +File genmodel = new File(basedir,"src/main/resources/model/test.genmodel") +assert genmodel.isFile() + +// Check the if some code generated file exist! +File testClass = new File(basedir,"src/main/java/aQute/bnd/maven/model/test/Test.java") +assert testClass.isFile() +// Check the if the second step was done +File testClass2 = new File(basedir,"src/main/java2/aQute/bnd/maven/model/test/Test.java") +assert testClass2.isFile() + diff --git a/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps/src/main/resources/model/test.ecore b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps/src/main/resources/model/test.ecore new file mode 100644 index 0000000000..b88fed4710 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps/src/main/resources/model/test.ecore @@ -0,0 +1,5 @@ + + + + diff --git a/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps/src/main/resources/model/test.genmodel b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps/src/main/resources/model/test.genmodel new file mode 100644 index 0000000000..2621855f1e --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration-multiple-steps/src/main/resources/model/test.genmodel @@ -0,0 +1,12 @@ + + + test.ecore + + + + diff --git a/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration/invoker.properties b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration/invoker.properties new file mode 100644 index 0000000000..9c7a7746f7 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration/invoker.properties @@ -0,0 +1,7 @@ +invoker.goals=--no-transfer-progress package + +# Run mvn with --debug for debug logging +#invoker.debug=true + +# Run mvn in debugging mode and wait for a debugger to attach +#invoker.environmentVariables.MAVEN_DEBUG_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8000 diff --git a/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration/pom.xml b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration/pom.xml new file mode 100644 index 0000000000..aabbf1cd30 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration/pom.xml @@ -0,0 +1,54 @@ + + 4.0.0 + + + biz.aQute.bnd-test + generate-maven-configuration + 0.0.1 + jar + + + + org.geckoprojects.emf + org.gecko.emf.osgi.api + 4.1.1.202202162308 + + + + + + + biz.aQute.bnd + bnd-generate-maven-plugin + ${bnd.version} + + + + org.geckoprojects.emf + org.gecko.emf.osgi.codegen + 4.1.1.202202162308 + + + + + src/main/resources/model/test.genmodel + geckoEMF 1>out.log 2>out.log + src/main/java + + src/main/resources/model/test.genmodel + + + + + + + generate-sources + + bnd-generate + + + + + + + \ No newline at end of file diff --git a/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration/postbuild.groovy b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration/postbuild.groovy new file mode 100644 index 0000000000..a54bef6831 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration/postbuild.groovy @@ -0,0 +1,24 @@ +import aQute.bnd.build.Workspace +import aQute.bnd.build.model.BndEditModel +import aQute.bnd.osgi.Processor +import aQute.bnd.properties.Document +import aQute.bnd.version.MavenVersion +import aQute.lib.io.IO + +import java.util.jar.Attributes +import java.util.jar.JarFile; + +def baseVersion = new MavenVersion(bndVersion).toReleaseVersion() + +// Check the ecore file exist! +File ecore = new File(basedir,"src/main/resources/model/test.ecore") +assert ecore.isFile() + +// Check the genmodel file exist! +File genmodel = new File(basedir,"src/main/resources/model/test.genmodel") +assert genmodel.isFile() + +// Check the if some code generated file exist! +File testClass = new File(basedir,"src/main/java/aQute/bnd/maven/model/test/Test.java") +assert testClass.isFile() + diff --git a/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration/src/main/resources/model/test.ecore b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration/src/main/resources/model/test.ecore new file mode 100644 index 0000000000..b88fed4710 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration/src/main/resources/model/test.ecore @@ -0,0 +1,5 @@ + + + + diff --git a/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration/src/main/resources/model/test.genmodel b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration/src/main/resources/model/test.genmodel new file mode 100644 index 0000000000..2621855f1e --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate-maven-configuration/src/main/resources/model/test.genmodel @@ -0,0 +1,12 @@ + + + test.ecore + + + + diff --git a/maven/bnd-generate-maven-plugin/src/it/generate/bnd.bnd b/maven/bnd-generate-maven-plugin/src/it/generate/bnd.bnd new file mode 100644 index 0000000000..ed96126992 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate/bnd.bnd @@ -0,0 +1,5 @@ +-generate:\ + src/main/resources/model/test.genmodel;\ + generate="geckoEMF 1>out.log 2>out.log";\ + genmodel="src/main/resources/model/test.genmodel";\ + output=src/main/java diff --git a/maven/bnd-generate-maven-plugin/src/it/generate/invoker.properties b/maven/bnd-generate-maven-plugin/src/it/generate/invoker.properties new file mode 100644 index 0000000000..9c7a7746f7 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate/invoker.properties @@ -0,0 +1,7 @@ +invoker.goals=--no-transfer-progress package + +# Run mvn with --debug for debug logging +#invoker.debug=true + +# Run mvn in debugging mode and wait for a debugger to attach +#invoker.environmentVariables.MAVEN_DEBUG_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8000 diff --git a/maven/bnd-generate-maven-plugin/src/it/generate/pom.xml b/maven/bnd-generate-maven-plugin/src/it/generate/pom.xml new file mode 100644 index 0000000000..366c4f4af7 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate/pom.xml @@ -0,0 +1,46 @@ + + 4.0.0 + + + biz.aQute.bnd-test + generate + 0.0.1 + jar + + + + org.geckoprojects.emf + org.gecko.emf.osgi.api + 4.1.1.202202162308 + + + + + + + biz.aQute.bnd + bnd-generate-maven-plugin + ${bnd.version} + + + + org.geckoprojects.emf + org.gecko.emf.osgi.codegen + 4.1.1.202202162308 + + + + + + generate-sources + + bnd-generate + + + + + + + diff --git a/maven/bnd-generate-maven-plugin/src/it/generate/postbuild.groovy b/maven/bnd-generate-maven-plugin/src/it/generate/postbuild.groovy new file mode 100644 index 0000000000..a54bef6831 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate/postbuild.groovy @@ -0,0 +1,24 @@ +import aQute.bnd.build.Workspace +import aQute.bnd.build.model.BndEditModel +import aQute.bnd.osgi.Processor +import aQute.bnd.properties.Document +import aQute.bnd.version.MavenVersion +import aQute.lib.io.IO + +import java.util.jar.Attributes +import java.util.jar.JarFile; + +def baseVersion = new MavenVersion(bndVersion).toReleaseVersion() + +// Check the ecore file exist! +File ecore = new File(basedir,"src/main/resources/model/test.ecore") +assert ecore.isFile() + +// Check the genmodel file exist! +File genmodel = new File(basedir,"src/main/resources/model/test.genmodel") +assert genmodel.isFile() + +// Check the if some code generated file exist! +File testClass = new File(basedir,"src/main/java/aQute/bnd/maven/model/test/Test.java") +assert testClass.isFile() + diff --git a/maven/bnd-generate-maven-plugin/src/it/generate/src/main/resources/model/test.ecore b/maven/bnd-generate-maven-plugin/src/it/generate/src/main/resources/model/test.ecore new file mode 100644 index 0000000000..b88fed4710 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate/src/main/resources/model/test.ecore @@ -0,0 +1,5 @@ + + + + diff --git a/maven/bnd-generate-maven-plugin/src/it/generate/src/main/resources/model/test.genmodel b/maven/bnd-generate-maven-plugin/src/it/generate/src/main/resources/model/test.genmodel new file mode 100644 index 0000000000..2621855f1e --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/generate/src/main/resources/model/test.genmodel @@ -0,0 +1,12 @@ + + + test.ecore + + + + diff --git a/maven/bnd-generate-maven-plugin/src/it/settings.xml b/maven/bnd-generate-maven-plugin/src/it/settings.xml new file mode 100644 index 0000000000..2882bd7274 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/it/settings.xml @@ -0,0 +1,50 @@ + + + false + + + + + + + + + it-repo + + true + + + + local.central + @localRepositoryUrl@ + + ignore + true + + + ignore + true + + + + + + local.central + @localRepositoryUrl@ + + ignore + true + + + ignore + true + + + + + + + diff --git a/maven/bnd-generate-maven-plugin/src/main/java/aQute/bnd/maven/generate/plugin/BndContainer.java b/maven/bnd-generate-maven-plugin/src/main/java/aQute/bnd/maven/generate/plugin/BndContainer.java new file mode 100644 index 0000000000..6cdff7d7f9 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/main/java/aQute/bnd/maven/generate/plugin/BndContainer.java @@ -0,0 +1,249 @@ +package aQute.bnd.maven.generate.plugin; + +import java.io.File; +import java.io.FileOutputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.Properties; + +import aQute.bnd.annotation.ProviderType; +import aQute.bnd.build.Project; +import aQute.bnd.build.Workspace; +import aQute.bnd.maven.lib.configuration.BeanProperties; +import aQute.bnd.maven.lib.configuration.BndConfiguration; +import aQute.bnd.maven.lib.resolve.ImplicitFileSetRepository; +import aQute.bnd.maven.lib.resolve.LocalPostProcessor; +import aQute.bnd.maven.lib.resolve.PostProcessor; +import aQute.bnd.osgi.Processor; +import aQute.bnd.repository.fileset.FileSetRepository; +import aQute.bnd.service.RepositoryPlugin; +import aQute.lib.utf8properties.UTF8Properties; +import org.apache.maven.RepositoryUtils; +import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.execution.MavenSession; +import org.apache.maven.model.Dependency; +import org.apache.maven.plugin.MojoExecution; +import org.apache.maven.project.MavenProject; +import org.apache.maven.settings.Settings; +import org.eclipse.aether.RepositorySystem; +import org.eclipse.aether.RepositorySystemSession; +import org.eclipse.aether.artifact.Artifact; +import org.eclipse.aether.artifact.DefaultArtifact; +import org.eclipse.aether.repository.RemoteRepository; +import org.eclipse.aether.resolution.ArtifactRequest; +import org.eclipse.aether.resolution.ArtifactResult; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@ProviderType +public class BndContainer { + + private static final Logger logger = LoggerFactory + .getLogger(BndContainer.class); + + private final List bundles = new ArrayList<>(); + + private final MavenProject project; + + private final RepositorySystemSession repositorySession; + + private final MavenSession session; + + private final RepositorySystem system; + + private final PostProcessor postProcessor; + + private List dependencies; + + private Properties additionProperties; + + public static class Builder { + + private final MavenProject project; + private final MavenSession session; + private final RepositorySystemSession repositorySession; + private final RepositorySystem system; + private PostProcessor postProcessor = new LocalPostProcessor(); + private List dependencies = new ArrayList(); + private Properties additionaProperties = new Properties(); + + @SuppressWarnings("deprecation") + public Builder(MavenProject project, MavenSession session, RepositorySystemSession repositorySession, + RepositorySystem system) { + + this.project = Objects.requireNonNull(project); + this.session = Objects.requireNonNull(session); + this.repositorySession = Objects.requireNonNull(repositorySession); + this.system = Objects.requireNonNull(system); + } + + public Builder setPostProcessor(PostProcessor postProcessor) { + this.postProcessor = postProcessor; + return this; + } + + public Builder setDependencies(List dependencies) { + this.dependencies.addAll(dependencies); + return this; + } + + public Builder setAdditionalProperiets(Properties properties) { + this.additionaProperties.putAll(properties); + return this; + } + + public BndContainer build() { + return new BndContainer(project, session, repositorySession, system, + dependencies, postProcessor, additionaProperties); + } + + } + + public static int report(Processor project) { + int errors = 0; + for (String warning : project.getWarnings()) { + logger.warn("Warning : {}", warning); + } + for (String error : project.getErrors()) { + logger.error("Error : {}", error); + errors++; + } + return errors; + } + + @SuppressWarnings("deprecation") + BndContainer(MavenProject project, MavenSession session, RepositorySystemSession repositorySession, + RepositorySystem system, List dependencies, PostProcessor postProcessor, + Properties additionProperties) { + this.project = project; + this.session = session; + this.repositorySession = repositorySession; + this.system = system; + this.dependencies = dependencies; + this.postProcessor = postProcessor; + this.additionProperties = additionProperties; + } + + public int generate(String task, File workingDir, GenerateOperation operation, Settings settings, + MojoExecution mojoExecution) throws Exception { + Properties beanProperties = new BeanProperties(); + beanProperties.put("project", project); + beanProperties.put("settings", settings); + Properties mavenProperties = new Properties(beanProperties); + Properties projectProperties = project.getProperties(); + mavenProperties.putAll(projectProperties); + // try (Project bnd = init(task, workingDir, mavenProperties)) { + try (Project bnd = init(task, workingDir, session.getCurrentProject() + .getBasedir(), mavenProperties)) { + if (bnd == null) { + return 1; + } + + bnd.setTrace(logger.isDebugEnabled()); + + bnd.setBase(project.getBasedir()); + // load the bnd file or config element + File propertiesFile = new BndConfiguration(project, mojoExecution).loadProperties(bnd); + + // handle our addition properties and trigger the replacement of + // ${.} + UTF8Properties properties = new UTF8Properties(); + properties.putAll(additionProperties); + bnd.setProperties(properties.replaceHere(project.getBasedir())); + + bnd.setProperty("project.output", workingDir.getCanonicalPath()); + + if (logger.isDebugEnabled()) { + logger.debug("Generate Project Properties"); + bnd.getProperties() + .forEach((k, v) -> logger.debug(k + " - " + v)); + } + + int errors = report(bnd); + if (!bnd.isOk()) { + return errors; + } + injectImplicitRepository(bnd.getWorkspace()); + return operation.apply("generate", bnd); + } + } + + public Project init(String task, File wsDir, File workingDir, Properties mavenProperties) throws Exception { + File cnfDir = new File(wsDir, "tempGenerateWS/cnf"); + cnfDir.mkdirs(); + File buildBnd = new File(cnfDir, "build.bnd"); + buildBnd.createNewFile(); + mavenProperties.store(new FileOutputStream(buildBnd), task); + Workspace workspace = new Workspace(cnfDir.getParentFile()); + Project project = new Project(workspace, workingDir); + workspace.setOffline(session.getSettings() + .isOffline()); + project.forceRefresh(); // setBase must be called after forceRefresh + project.getInfo(workspace); + + return project; + } + + public boolean injectImplicitRepository(Workspace workspace) throws Exception { + if (workspace.getPlugin(ImplicitFileSetRepository.class) == null) { + workspace.addBasicPlugin(getFileSetRepository()); + for (RepositoryPlugin repo : workspace.getRepositories()) { + repo.list(null); + } + return true; + } + return false; + } + + + /** + * Creates a new repository in every invocation. + * + * @return a new {@link ImplicitFileSetRepository} + * @throws Exception + */ + public FileSetRepository getFileSetRepository() throws Exception { + return getFileSetRepository(project); + } + + private List getProjectRemoteRepositories() { + List remoteRepositories = new ArrayList<>(project.getRemoteProjectRepositories()); + ArtifactRepository deployRepo = project.getDistributionManagementArtifactRepository(); + if (deployRepo != null) { + remoteRepositories.add(RepositoryUtils.toRepo(deployRepo)); + } + return remoteRepositories; + } + + /** + * Creates a new repository in every invocation. + * + * @param project the Maven project + * @return a new {@link ImplicitFileSetRepository} + * @throws Exception + */ + public FileSetRepository getFileSetRepository(MavenProject project) throws Exception { + + List repositories = getProjectRemoteRepositories(); + + bundles.clear(); + + for (Dependency dep : dependencies) { + + ArtifactResult artifactResult = postProcessor.postProcessResult( + system.resolveArtifact(repositorySession, new ArtifactRequest(transform(dep), repositories, null))); + + bundles.add(artifactResult.getArtifact() + .getFile()); + + } + return new ImplicitFileSetRepository("Generator-Dependencies", bundles); + } + + private Artifact transform(Dependency dependency) { + Artifact artifact = new DefaultArtifact(dependency.getGroupId(), dependency.getArtifactId(), + dependency.getType(), dependency.getVersion()); + return artifact; + } +} diff --git a/maven/bnd-generate-maven-plugin/src/main/java/aQute/bnd/maven/generate/plugin/GenerateMojo.java b/maven/bnd-generate-maven-plugin/src/main/java/aQute/bnd/maven/generate/plugin/GenerateMojo.java new file mode 100644 index 0000000000..47632bd4e3 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/main/java/aQute/bnd/maven/generate/plugin/GenerateMojo.java @@ -0,0 +1,198 @@ +package aQute.bnd.maven.generate.plugin; + +import java.io.File; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Properties; +import java.util.Set; +import java.util.StringJoiner; + +import aQute.bnd.build.Project; +import aQute.bnd.result.Result; +import org.apache.maven.execution.MavenSession; +import org.apache.maven.model.Dependency; +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecution; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugin.MojoFailureException; +import org.apache.maven.plugins.annotations.Component; +import org.apache.maven.plugins.annotations.LifecyclePhase; +import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.plugins.annotations.ResolutionScope; +import org.apache.maven.project.MavenProject; +import org.apache.maven.settings.Settings; +import org.eclipse.aether.RepositorySystem; +import org.eclipse.aether.RepositorySystemSession; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@Mojo(name = "bnd-generate", defaultPhase = LifecyclePhase.GENERATE_SOURCES, requiresDependencyResolution = ResolutionScope.NONE, threadSafe = true) +public class GenerateMojo extends AbstractMojo { + + protected final Logger logger = LoggerFactory.getLogger(getClass()); + + @Parameter(defaultValue = "${project}", readonly = true, required = true) + private MavenProject project; + + @Parameter(defaultValue = "${settings}", readonly = true) + private Settings settings; + + @Parameter(defaultValue = "${mojoExecution}", readonly = true) + MojoExecution mojoExecution; + + @Parameter(defaultValue = "${repositorySystemSession}", readonly = true, required = true) + private RepositorySystemSession repositorySession; + + @Parameter(defaultValue = "${project.build.directory}", readonly = true) + private File targetDir; + + /** + * Skip this goal. + */ + @Parameter(property = "bnd.generate.skip", defaultValue = "false") + boolean skip; + + /** + * The Mojo by itself does nothing. Dependent on its configuration, it will + * try to find a suitable generator in one of the dependencies in this list. + */ + @Parameter(property = "externalPlugins", required = false) + List externalPlugins; + + /** + * Allows multiple steps + */ + @Parameter(property = "steps", required = false) + List steps; + + @Parameter(defaultValue = "${session}", readonly = true) + private MavenSession session; + + @Component + private RepositorySystem system; + + /** + * File path to a bnd file containing bnd instructions for this project. + * Defaults to {@code bnd.bnd}. The file path can be an absolute or relative + * to the project directory. + *

+ * The bnd instructions for this project are merged with the bnd + * instructions, if any, for the parent project. + */ + @Parameter(defaultValue = Project.BNDFILE) + // This is not used and is for doc only; see {@link + // BndConfiguration#loadProperties(Processor)} + @SuppressWarnings("unused") + String bndfile; + + /** + * Bnd instructions for this project specified directly in the pom file. + * This is generally be done using a {@code } section. If the + * projects has a {@link #bndfile bnd file}, then this configuration element + * is ignored. + *

+ * The bnd instructions for this project are merged with the bnd + * instructions, if any, for the parent project. + */ + @Parameter + // This is not used and is for doc only; See {@link + // BndConfiguration#loadProperties(Processor)} + @SuppressWarnings("unused") + String bnd; + + @Override + public void execute() throws MojoExecutionException, MojoFailureException { + + if (skip) { + return; + } + + int errors = 0; + + List normalizedDependencies = new ArrayList(); + if (externalPlugins != null) { + for (Dependency dependency : externalPlugins) { + normalizedDependencies.add(normalizeDependendency(dependency)); + } + } + Properties additionalProperties = new Properties(); + StringJoiner instruction = new StringJoiner(","); + steps.stream() + .map(this::mapStep) + .forEach(instruction::add); + if (instruction.length() > 0) { + logger.info("created instructions from steps: {}", instruction.toString()); + additionalProperties.put("-generate.maven", instruction.toString()); + } + try { + BndContainer container = new BndContainer.Builder(project, session, repositorySession, system) + .setDependencies(normalizedDependencies) + .setAdditionalProperiets(additionalProperties) + .build(); + + GenerateOperation operation = getOperation(); + + errors = container.generate("generating", targetDir, operation, settings, mojoExecution); + + } catch (Exception e) { + throw new MojoExecutionException(e.getMessage(), e); + } + + if (errors > 0) + throw new MojoFailureException(errors + " errors found"); + } + + private GenerateOperation getOperation() { + return (taskName, project) -> { + int errors = 0; + try { + Result> result = project.getGenerate() + .generate(false); + if (result.isErr()) { + result.error() + .ifPresent(error -> logger.error("Error : {}", error)); + errors++; + } + } finally { + errors += BndContainer.report(project); + } + return errors; + }; + } + + private String mapStep(Step step) { + StringJoiner joiner = new StringJoiner(";"); + joiner.add(step.getTrigger()); + joiner.add("output=" + step.getOutput()); + if (step.getGenerateCommand() != null) { + joiner.add("generate=\"" + step.getGenerateCommand() + "\""); + } + if (step.getSystemCommand() != null) { + joiner.add("system=\"" + step.getSystemCommand() + "\""); + } + step.getProperties() + .forEach((k, v) -> joiner.add(k + "=\"" + v + "\"")); + return joiner.toString(); + } + + private Dependency normalizeDependendency(Dependency dependency) throws MojoExecutionException { + if(dependency.getVersion() != null) { + return dependency; + } else { + List deps = project.getDependencyManagement() != null ? project.getDependencyManagement() + .getDependencies() : Collections.emptyList(); + return deps + .stream() + .filter(d -> d.getArtifactId() + .equals(dependency.getArtifactId()) + && d.getGroupId() + .equals(dependency.getGroupId())) + .findFirst() + .map(d -> d.clone()) + .orElseThrow(() -> new MojoExecutionException(dependency, "Version is missing", + "The Version of the " + dependency.toString() + " is missing")); + } + } +} diff --git a/maven/bnd-generate-maven-plugin/src/main/java/aQute/bnd/maven/generate/plugin/GenerateOperation.java b/maven/bnd-generate-maven-plugin/src/main/java/aQute/bnd/maven/generate/plugin/GenerateOperation.java new file mode 100644 index 0000000000..31152b74c4 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/main/java/aQute/bnd/maven/generate/plugin/GenerateOperation.java @@ -0,0 +1,16 @@ +package aQute.bnd.maven.generate.plugin; + +import aQute.bnd.build.Project; + +@FunctionalInterface +public interface GenerateOperation { + /** + * Performs this operation on the given arguments. + * + * @param taskname name of the task performing the operation + * @param project the project to run the generate task on + * @return the number of errors + * @throws Exception + */ + int apply(String taskname, Project project) throws Exception; +} diff --git a/maven/bnd-generate-maven-plugin/src/main/java/aQute/bnd/maven/generate/plugin/Step.java b/maven/bnd-generate-maven-plugin/src/main/java/aQute/bnd/maven/generate/plugin/Step.java new file mode 100644 index 0000000000..2711e43168 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/main/java/aQute/bnd/maven/generate/plugin/Step.java @@ -0,0 +1,74 @@ +package aQute.bnd.maven.generate.plugin; + +import java.util.Properties; + +import org.apache.maven.plugins.annotations.Parameter; + +/** + * A generate instruction will be created from this configuration as described + * in the bnd + * generate documentation + */ +public class Step { + + /** + * This is the clause in the resulting + * generate + * instruction. It is used to establish a fileset where wildcards are + * supported. If one of the files is newer then any of the files in the + * output, code will be regenerated. + */ + @Parameter + private String trigger; + + /** + * This is the output directory in the resulting + * generate + * instruction + */ + @Parameter + private String output; + + /** + * The generate option in the resulting + * generate + * instruction. It is used to find a external plugin which may hold a + * generator or a declared Main-Class + */ + @Parameter(required = false) + private String generateCommand = null; + + /** + * The system option in the resulting + * generate + * instruction. It will be executed as a system command. + */ + @Parameter(required = false) + private String systemCommand = null; + + /** + * Any additional properties that the specific generate plugin will support. + */ + @Parameter(property = "properties", required = false) + private Properties properties = new Properties(); + + public String getTrigger() { + return trigger; + } + + public String getOutput() { + return output; + } + + public String getGenerateCommand() { + return generateCommand; + } + + public String getSystemCommand() { + return systemCommand; + } + + public Properties getProperties() { + return properties; + } +} diff --git a/maven/bnd-generate-maven-plugin/src/main/resources/META-INF/m2e/lifecycle-mapping-metadata.xml b/maven/bnd-generate-maven-plugin/src/main/resources/META-INF/m2e/lifecycle-mapping-metadata.xml new file mode 100644 index 0000000000..00c1ac8df6 --- /dev/null +++ b/maven/bnd-generate-maven-plugin/src/main/resources/META-INF/m2e/lifecycle-mapping-metadata.xml @@ -0,0 +1,18 @@ + + + + + + + bnd-generate + + + + + true + true + + + + + diff --git a/maven/pom.xml b/maven/pom.xml index 785755f971..7a1560efeb 100644 --- a/maven/pom.xml +++ b/maven/pom.xml @@ -26,5 +26,6 @@ bnd-resolver-maven-plugin bnd-run-maven-plugin bnd-reporter-maven-plugin + bnd-generate-maven-plugin