commit 4fa3516f4a32e206b74a5fa6357f58472b9517c5 Author: MSVSphere Packaging Team Date: Fri Oct 25 13:57:04 2024 +0300 import aqute-bnd-6.3.1-10.el10 diff --git a/.aqute-bnd.metadata b/.aqute-bnd.metadata new file mode 100644 index 0000000..e1d8c14 --- /dev/null +++ b/.aqute-bnd.metadata @@ -0,0 +1 @@ +125bf44cfd6b0c351cd761aa4958dca172bb5524 SOURCES/aqute-bnd-6.3.1.tar.gz diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..59af145 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/aqute-bnd-6.3.1.tar.gz diff --git a/SOURCES/0001-Disable-removed-commands.patch b/SOURCES/0001-Disable-removed-commands.patch new file mode 100644 index 0000000..984745b --- /dev/null +++ b/SOURCES/0001-Disable-removed-commands.patch @@ -0,0 +1,108 @@ +diff --git a/biz.aQute.bnd/src/aQute/bnd/main/bnd.java b/biz.aQute.bnd/src/aQute/bnd/main/bnd.java +index a787c32..fc241a2 100644 +--- a/biz.aQute.bnd/src/aQute/bnd/main/bnd.java ++++ b/biz.aQute.bnd/src/aQute/bnd/main/bnd.java +@@ -110,7 +110,6 @@ import aQute.bnd.osgi.Resource; + import aQute.bnd.osgi.Verifier; + import aQute.bnd.osgi.eclipse.EclipseClasspath; + import aQute.bnd.print.JarPrinter; +-import aQute.bnd.repository.maven.provider.NexusCommand; + import aQute.bnd.result.Result; + import aQute.bnd.service.Actionable; + import aQute.bnd.service.RepositoryPlugin; +@@ -3921,54 +3920,6 @@ public class bnd extends Processor { + getInfo(profiles); + } + +- /** +- * Resolve command +- * +- * @throws Exception +- */ +- +- public void _resolve(ResolveCommand.ResolveOptions options) throws Exception { +- ResolveCommand rc = new ResolveCommand(this); +- String help = options._command() +- .subCmd(options, rc); +- if (help != null) +- out.println(help); +- getInfo(rc); +- rc.close(); +- } +- +- /** +- * Remote command +- * +- * @throws Exception +- */ +- +- public void _remote(RemoteCommand.RemoteOptions options) throws Exception { +- RemoteCommand rc = new RemoteCommand(this, options); +- String help = options._command() +- .subCmd(options, rc); +- if (help != null) +- out.println(help); +- getInfo(rc); +- rc.close(); +- } +- +- /** +- * Nexus commands +- * +- * @throws Exception +- */ +- +- public void _nexus(NexusCommand.NexusOptions options) throws Exception { +- NexusCommand rc = new NexusCommand(this, options); +- String help = options._command() +- .subCmd(options, rc); +- if (help != null) +- out.println(help); +- getInfo(rc); +- rc.close(); +- } +- + /** + * Export a bndrun file + */ +@@ -4424,15 +4375,6 @@ public class bnd extends Processor { + } + } + +- @Description("Start an interactive shell") +- public void _shell(Shell.ShellOptions options) throws Exception { +- try (Shell shell = new Shell(this, options)) { +- shell.loop(); +- } finally { +- out.println("done"); +- } +- } +- + public Workspace getWorkspace() { + return workspace; + } +@@ -4479,24 +4421,6 @@ public class bnd extends Processor { + + } + +- @Description("Generate and export reports of a workspace, a project or of a jar.") +- public void _exportreport(ExportReportCommand.ReporterOptions options) throws Exception { +- ExportReportCommand mc = new ExportReportCommand(this); +- mc.run(options); +- getInfo(mc); +- } +- +- @Description("Maintain Maven Bnd Repository GAV files") +- public void _mbr(MbrCommand.MrOptions options) throws Exception { +- MbrCommand c = new MbrCommand(this, options); +- CommandLine cl = new CommandLine(this); +- String s = cl.subCmd(options, c); +- if (s != null) { +- out.println(s); +- } +- getInfo(c); +- } +- + @Description("Shows the differences between two XML resource repositories") + public void _xmlrepodiff(XmlRepoDiffOptions options) throws Exception { + try (XmlRepoDiffCommand cmd = new XmlRepoDiffCommand(this)) { diff --git a/SOURCES/0002-Port-to-OSGI-7.0.0.patch b/SOURCES/0002-Port-to-OSGI-7.0.0.patch new file mode 100644 index 0000000..c807cd1 --- /dev/null +++ b/SOURCES/0002-Port-to-OSGI-7.0.0.patch @@ -0,0 +1,102 @@ +From 64a36cbc8d7c8234dfa2af8670c2e1ea4a5c3909 Mon Sep 17 00:00:00 2001 +From: Marian Koncek +Date: Thu, 11 Jul 2019 14:29:26 +0200 +Subject: [PATCH] Port to OSGI 7.0.0 + +--- + .../src/aQute/bnd/junit/ConsoleLogger.java | 62 +++++++++++++++++++ + 1 file changed, 62 insertions(+) + +diff --git a/biz.aQute.bndlib/src/aQute/bnd/junit/ConsoleLogger.java b/biz.aQute.bndlib/src/aQute/bnd/junit/ConsoleLogger.java +index 9c2591f..569b20e 100644 +--- a/biz.aQute.bndlib/src/aQute/bnd/junit/ConsoleLogger.java ++++ b/biz.aQute.bndlib/src/aQute/bnd/junit/ConsoleLogger.java +@@ -15,9 +15,11 @@ import org.osgi.framework.ServiceFactory; + import org.osgi.framework.ServiceReference; + import org.osgi.framework.ServiceRegistration; + import org.osgi.service.log.LogEntry; ++import org.osgi.service.log.LogLevel; + import org.osgi.service.log.LogListener; + import org.osgi.service.log.LogReaderService; + import org.osgi.service.log.LogService; ++import org.osgi.service.log.Logger; + + @Deprecated // see biz.aQute.bnd.remote.junit + public class ConsoleLogger implements LogReaderService { +@@ -76,6 +78,36 @@ public class ConsoleLogger implements LogReaderService { + return time; + } + ++ @Override ++ public LogLevel getLogLevel() { ++ // TODO Auto-generated method stub ++ return null; ++ } ++ ++ @Override ++ public String getLoggerName() { ++ // TODO Auto-generated method stub ++ return null; ++ } ++ ++ @Override ++ public long getSequence() { ++ // TODO Auto-generated method stub ++ return 0; ++ } ++ ++ @Override ++ public String getThreadInfo() { ++ // TODO Auto-generated method stub ++ return null; ++ } ++ ++ @Override ++ public StackTraceElement getLocation() { ++ // TODO Auto-generated method stub ++ return null; ++ } ++ + } + + public class Facade implements LogService { +@@ -112,6 +144,36 @@ public class ConsoleLogger implements LogReaderService { + + } + ++ @Override ++ public Logger getLogger(String name) { ++ // TODO Auto-generated method stub ++ return null; ++ } ++ ++ @Override ++ public Logger getLogger(Class clazz) { ++ // TODO Auto-generated method stub ++ return null; ++ } ++ ++ @Override ++ public L getLogger(String name, Class loggerType) { ++ // TODO Auto-generated method stub ++ return null; ++ } ++ ++ @Override ++ public L getLogger(Class clazz, Class loggerType) { ++ // TODO Auto-generated method stub ++ return null; ++ } ++ ++ @Override ++ public L getLogger(Bundle bundle, String name, Class loggerType) { ++ // TODO Auto-generated method stub ++ return null; ++ } ++ + } + + public ConsoleLogger(BundleContext context) { +-- +2.20.1 + diff --git a/SOURCES/0003-Remove-unmet-dependencies.patch b/SOURCES/0003-Remove-unmet-dependencies.patch new file mode 100644 index 0000000..2c51dcf --- /dev/null +++ b/SOURCES/0003-Remove-unmet-dependencies.patch @@ -0,0 +1,1403 @@ +From d1702cae9e19a8b9dc2ad538777e51a0680cc605 Mon Sep 17 00:00:00 2001 +From: Marian Koncek +Date: Fri, 24 Jun 2022 14:55:51 +0200 +Subject: [PATCH] Remove unmet dependencies + +--- + .../src/aQute/lib/bundles/BundleIdentity.java | 65 -- + .../startlevel/StartLevelRuntimeHandler.java | 305 --------- + aQute.libg/src/aQute/libg/dtos/DTOMap.java | 143 ---- + aQute.libg/src/aQute/libg/dtos/DTOs.java | 211 ------ + aQute.libg/src/aQute/libg/dtos/DTOsImpl.java | 615 ------------------ + .../src/aQute/bnd/build/ProjectLauncher.java | 1 - + 6 files changed, 1340 deletions(-) + delete mode 100644 aQute.libg/src/aQute/lib/bundles/BundleIdentity.java + delete mode 100644 aQute.libg/src/aQute/lib/startlevel/StartLevelRuntimeHandler.java + delete mode 100644 aQute.libg/src/aQute/libg/dtos/DTOMap.java + delete mode 100644 aQute.libg/src/aQute/libg/dtos/DTOs.java + delete mode 100644 aQute.libg/src/aQute/libg/dtos/DTOsImpl.java + +diff --git a/aQute.libg/src/aQute/lib/bundles/BundleIdentity.java b/aQute.libg/src/aQute/lib/bundles/BundleIdentity.java +deleted file mode 100644 +index dfd4b6a..0000000 +--- a/aQute.libg/src/aQute/lib/bundles/BundleIdentity.java ++++ /dev/null +@@ -1,65 +0,0 @@ +-package aQute.lib.bundles; +- +-import java.util.Map; +-import java.util.Objects; +- +-import org.osgi.framework.Bundle; +-import org.osgi.framework.Version; +-import org.osgi.framework.dto.BundleDTO; +- +-public class BundleIdentity { +- final String bsn; +- final Version version; +- +- public BundleIdentity(String bsn, Version version) { +- Objects.requireNonNull(bsn, "bsn must be specified"); +- this.bsn = bsn; +- this.version = version == null ? Version.emptyVersion : version; +- } +- +- public BundleIdentity(Bundle bundle) { +- this(bundle.getSymbolicName(), bundle.getVersion()); +- } +- +- public BundleIdentity(BundleDTO bundle) { +- this(bundle.symbolicName, bundle.version); +- } +- +- public BundleIdentity(String bsn, String version) { +- this(bsn, version == null ? null : Version.parseVersion(version)); +- } +- +- public BundleIdentity(Map.Entry entry) { +- this(entry.getKey(), entry.getValue()); +- } +- +- public String getBundleSymbolicName() { +- return bsn; +- } +- +- public Version getVersion() { +- return version; +- } +- +- @Override +- public int hashCode() { +- return Objects.hash(bsn, version); +- } +- +- @Override +- public boolean equals(Object obj) { +- if (this == obj) +- return true; +- if (obj == null) +- return false; +- if (getClass() != obj.getClass()) +- return false; +- BundleIdentity other = (BundleIdentity) obj; +- return Objects.equals(bsn, other.bsn) && Objects.equals(version, other.version); +- } +- +- @Override +- public String toString() { +- return bsn + "-" + version; +- } +-} +diff --git a/aQute.libg/src/aQute/lib/startlevel/StartLevelRuntimeHandler.java b/aQute.libg/src/aQute/lib/startlevel/StartLevelRuntimeHandler.java +deleted file mode 100644 +index e32c255..0000000 +--- a/aQute.libg/src/aQute/lib/startlevel/StartLevelRuntimeHandler.java ++++ /dev/null +@@ -1,305 +0,0 @@ +-package aQute.lib.startlevel; +- +-import java.io.Closeable; +-import java.util.HashMap; +-import java.util.Map; +-import java.util.Properties; +-import java.util.concurrent.CountDownLatch; +- +-import org.osgi.framework.Bundle; +-import org.osgi.framework.BundleEvent; +-import org.osgi.framework.Constants; +-import org.osgi.framework.FrameworkListener; +-import org.osgi.framework.SynchronousBundleListener; +-import org.osgi.framework.launch.Framework; +-import org.osgi.framework.startlevel.BundleStartLevel; +-import org.osgi.framework.startlevel.FrameworkStartLevel; +- +-import aQute.lib.bundles.BundleIdentity; +-import aQute.libg.parameters.ParameterMap; +- +-/** +- * Support to handle start levels in a launcher. This code is related to code in +- * the Project Launcher. It is in aQute.lib so it can be included easily in the +- * Launcher, the Remote launcher, and Launchpad. +- *

+- * This class is not threadsafe! +- */ +-public class StartLevelRuntimeHandler implements Closeable { +- +- /** +- * If this property is set we take on start levels, if this property is not +- * set we ignore the startlevels completely. This is defined in +- * aQute.bnd.osgi.Constants +- */ +- public static String LAUNCH_STARTLEVEL_DEFAULT = "launch.startlevel.default"; +- public static String LAUNCH_RUNBUNDLES_ATTRS = "launch.runbundles.attrs"; +- +- /** +- * Indicate if this class supports start levels or not. +- * +- * @return true if this class supports startlevels +- */ +- public boolean hasStartLevels() { +- return false; +- } +- +- /** +- * Set the start level of a bundle +- * +- * @param b the bundle +- */ +- public void setStartLevel(Bundle b) {} +- +- /** +- * Answer the current framework start level +- * +- * @param framework the framework +- * @return the current start level of the framework +- */ +- public int getFrameworkStartLevel(Framework framework) { +- return framework.adapt(FrameworkStartLevel.class) +- .getStartLevel(); +- } +- +- /** +- * Set the default start level of newly installed bundles +- * +- * @param framework the framework +- * @param level the default start level +- */ +- public void setDefaultStartlevel(Framework framework, int level) { +- framework.adapt(FrameworkStartLevel.class) +- .setInitialBundleStartLevel(level); +- } +- +- /** +- * Set the framework start level and return previous +- * +- * @param framework the framework +- * @param startlevel the start level to set +- * @param ls listeners +- * @return the previous start level of the framework +- */ +- public int setFrameworkStartLevel(Framework framework, int startlevel, FrameworkListener... ls) { +- int previous = getFrameworkStartLevel(framework); +- framework.adapt(FrameworkStartLevel.class) +- .setStartLevel(startlevel, ls); +- return previous; +- } +- +- /** +- * Get a bundle's start level +- * +- * @param bundle the bundle to query +- * @return the start level > 0 +- */ +- public int getBundleStartLevel(Bundle bundle) { +- return bundle.adapt(BundleStartLevel.class) +- .getStartLevel(); +- } +- +- /** +- * Set a bundle's start level +- * +- * @param bundle the bundle to query +- * @param startlevel start level to set, > 0 +- */ +- public void setBundleStartLevel(Bundle bundle, int startlevel) { +- bundle.adapt(BundleStartLevel.class) +- .setStartLevel(startlevel); +- } +- +- /** +- * Must be called before the framework is started. +- *

+- * ensure systemBundle.getState() == INIT and startlevel systemBundle == 0 +- * +- * @param systemBundle the framework +- */ +- public void beforeStart(Framework systemBundle) {} +- +- /** +- * When the configuration properties have been updated +- * +- * @param configuration the configuration properties +- */ +- public void updateConfiguration(Map configuration) {} +- +- /** +- * Called after the framework is started and the launcher is ready +- */ +- public void afterStart() {} +- +- /** +- * Wait for the framework to reach its start level. Must be called after the +- * {@link #afterStart()} method. Will return when the framework has +- * traversed all start levels. +- */ +- public void sync() {} +- +- /** +- * Close this object +- */ +- +- @Override +- public void close() {} +- +- /** +- * Create a start level handler. If the {@link #LAUNCH_STARTLEVEL_DEFAULT} +- * property is set we create an active handler that will direct the +- * framework properly according to the settings in Project Launcher. If not +- * set, a dummy is returned that does not do anything +- * +- * @param outerConfiguration the properties as set by the Project Launcher +- * @return an active or dummy {@link StartLevelRuntimeHandler} +- */ +- static public StartLevelRuntimeHandler create(Trace logger, Map outerConfiguration) { +- +- String defaultStartlevelString = outerConfiguration.get(LAUNCH_STARTLEVEL_DEFAULT); +- if (defaultStartlevelString == null) { +- logger.trace("startlevel: not handled"); +- return absent(); +- } +- +- int defaultStartlevel = toInt(defaultStartlevelString, 1); +- int beginningStartlevel = toInt(outerConfiguration.get(Constants.FRAMEWORK_BEGINNING_STARTLEVEL), 1); +- outerConfiguration.put(Constants.FRAMEWORK_BEGINNING_STARTLEVEL, "1"); +- +- logger.trace("startlevel: handled begin=%s default=%s", beginningStartlevel, defaultStartlevel); +- +- // +- // We need to remove it otherwise the framework reacts to it +- // +- +- return new StartLevelRuntimeHandler() { +- CountDownLatch latch = new CountDownLatch(1); +- private Framework systemBundle; +- private Map startlevels = new HashMap<>(); +- private Map installed = new HashMap<>(); +- +- @Override +- public void beforeStart(Framework systemBundle) { +- assert getFrameworkStartLevel( +- systemBundle) == 0 : "Expects the framework to be in init mode, not yet started"; +- +- this.systemBundle = systemBundle; +- +- for (Bundle bundle : systemBundle.getBundleContext() +- .getBundles()) { +- if (bundle.getBundleId() == 0) { +- continue; +- } +- if (bundle.getSymbolicName() == null) { +- continue; +- } +- installed.put(bundle, new BundleIdentity(bundle)); +- } +- +- updateConfiguration(outerConfiguration); +- +- setDefaultStartlevel(this.systemBundle, defaultStartlevel); +- +- systemBundle.getBundleContext() +- .addBundleListener((SynchronousBundleListener) event -> { +- Bundle bundle = event.getBundle(); +- if (bundle.getBundleId() == 0) +- return; +- +- if (bundle.getSymbolicName() == null) { +- logger.trace("Found bundle without a bsn %s, ignoring", bundle); +- return; +- } +- +- BundleIdentity id = installed.computeIfAbsent(bundle, BundleIdentity::new); +- if (event.getType() == BundleEvent.INSTALLED || event.getType() == BundleEvent.UPDATED) { +- setStartlevel(bundle, id); +- } else if (event.getType() == BundleEvent.UNINSTALLED) { +- installed.remove(bundle); +- } +- }); +- logger.trace("startlevel: default=%s, beginning=%s", defaultStartlevel, beginningStartlevel); +- +- } +- +- @Override +- public void afterStart() { +- setFrameworkStartLevel(systemBundle, beginningStartlevel, event -> { +- logger.trace("startlevel: notified reached final level %s : %s", beginningStartlevel, event); +- latch.countDown(); +- }); +- logger.trace("startlevel change begin: beginning level %s", beginningStartlevel); +- } +- +- @Override +- public void sync() { +- try { +- latch.await(); +- } catch (InterruptedException ie) { +- Thread.interrupted(); +- throw new RuntimeException(ie); +- } +- } +- +- @Override +- public boolean hasStartLevels() { +- return true; +- } +- +- @Override +- public void updateConfiguration(Map configuration) { +- new ParameterMap((String) configuration.get(LAUNCH_RUNBUNDLES_ATTRS)).entrySet() +- .forEach(entry -> { +- String bsn = ParameterMap.removeDuplicateMarker(entry.getKey()); +- String version = entry.getValue() +- .getVersion(); +- BundleIdentity id = new BundleIdentity(bsn, version); +- +- int startlevel = toInt(entry.getValue() +- .get("startlevel"), -1); +- if (startlevel > 0) { +- startlevels.put(id, startlevel); +- } +- }); +- +- installed.forEach(this::setStartlevel); +- } +- +- private void setStartlevel(Bundle bundle, BundleIdentity id) { +- if (bundle.getState() != Bundle.UNINSTALLED) { +- int level = startlevels.getOrDefault(id, -1); +- if (level == -1) +- level = defaultStartlevel; +- +- setBundleStartLevel(bundle, level); +- logger.trace("startlevel: %s <- %s", bundle, level); +- } +- } +- +- }; +- } +- +- static int toInt(Object object, int defltValue) { +- if (object == null) +- return defltValue; +- +- String s = object.toString() +- .trim(); +- try { +- return Integer.parseInt(s); +- } catch (NumberFormatException nfe) { +- return defltValue; +- } +- } +- +- public static StartLevelRuntimeHandler absent() { +- return new StartLevelRuntimeHandler() {}; +- } +- +- @SuppressWarnings({ +- "rawtypes", "unchecked" +- }) +- public static StartLevelRuntimeHandler create(Trace reporter, Properties properties) { +- return create(reporter, (Map) properties); +- } +-} +diff --git a/aQute.libg/src/aQute/libg/dtos/DTOMap.java b/aQute.libg/src/aQute/libg/dtos/DTOMap.java +deleted file mode 100644 +index f927de5..0000000 +--- a/aQute.libg/src/aQute/libg/dtos/DTOMap.java ++++ /dev/null +@@ -1,143 +0,0 @@ +-package aQute.libg.dtos; +- +-import java.lang.reflect.Field; +-import java.util.AbstractMap; +-import java.util.AbstractSet; +-import java.util.Iterator; +-import java.util.Map; +-import java.util.Set; +- +-import org.osgi.dto.DTO; +- +-public class DTOMap extends AbstractMap { +- +- private final DTOsImpl dtos; +- private final Object dto; +- private final Field[] fields; +- +- public DTOMap(DTOsImpl dtos, Object dto) { +- this.dtos = dtos; +- this.dto = dto; +- this.fields = dtos.getFields(dto); +- } +- +- @Override +- public int size() { +- return fields.length; +- } +- +- @Override +- public boolean isEmpty() { +- return fields.length == 0; +- } +- +- @Override +- public boolean containsKey(Object key) { +- if (!(key instanceof String)) +- return false; +- +- return dtos.bsearch(fields, 0, fields.length, (String) key) >= 0; +- } +- +- @Override +- public boolean containsValue(Object value) { +- for (Field f : fields) { +- Object o; +- try { +- o = f.get(dto); +- +- if (o == value) +- return true; +- if (o == null) +- return false; +- +- return o.equals(value); +- } catch (IllegalArgumentException | IllegalAccessException e) { +- // Ignore since we only have public fields +- } +- } +- return false; +- } +- +- @Override +- public Object get(Object key) { +- try { +- if (!(key instanceof String)) +- return null; +- +- Field field = dtos.getField(fields, (String) key); +- if (field == null) +- return null; +- +- Object o = field.get(dto); +- if (o instanceof DTO) { +- return new DTOMap(dtos, o); +- } else +- return o; +- } catch (IllegalArgumentException | IllegalAccessException e) { +- // cannot happen +- return null; +- } +- } +- +- @Override +- public Set> entrySet() { +- return new AbstractSet>() { +- +- @Override +- public Iterator> iterator() { +- return new Iterator>() { +- int n = 0; +- +- @Override +- public boolean hasNext() { +- return n < fields.length; +- } +- +- @Override +- public java.util.Map.Entry next() { +- final Field field = fields[n]; +- n++; +- return new Map.Entry() { +- +- @Override +- public String getKey() { +- return field.getName(); +- } +- +- @Override +- public Object getValue() { +- try { +- return field.get(dto); +- } catch (IllegalArgumentException | IllegalAccessException e) { +- throw new RuntimeException(e); +- } +- } +- +- @Override +- public Object setValue(Object value) { +- try { +- Object old = field.get(dto); +- field.set(dto, value); +- return old; +- } catch (IllegalArgumentException | IllegalAccessException e) { +- throw new RuntimeException(e); +- } +- } +- }; +- } +- +- @Override +- public void remove() { +- throw new UnsupportedOperationException("A DTO map cannot remove entries"); +- } +- }; +- } +- +- @Override +- public int size() { +- return DTOMap.this.size(); +- } +- }; +- } +-} +diff --git a/aQute.libg/src/aQute/libg/dtos/DTOs.java b/aQute.libg/src/aQute/libg/dtos/DTOs.java +deleted file mode 100644 +index a8abdb1..0000000 +--- a/aQute.libg/src/aQute/libg/dtos/DTOs.java ++++ /dev/null +@@ -1,211 +0,0 @@ +-package aQute.libg.dtos; +- +-import java.util.List; +-import java.util.Map; +-import java.util.Optional; +- +-import org.osgi.annotation.versioning.ProviderType; +-import org.osgi.dto.DTO; +- +-/** +- * This interface provides a number of utilities to make it easy to work with +- * DTOs. It contains a number of utility functions. +- */ +-@ProviderType +-public interface DTOs { +- +- DTOs INSTANCE = new DTOsImpl(); +- +- /** +- * Return a partially read only Map object that maps directly to a DTO. I.e. +- * changes are reflected in the DTO. If a field is a DTO, then this field +- * will also become a Map. +- * +- * @param dto the DTO +- * @return a Map where the keys map to the field names and the values to the +- * field values. This map is not modifiable. +- */ +- Map asMap(Object dto); +- +- /** +- * Convert a DTO to a human readable string presentation. This is primarily +- * for debugging since the toString can truncate fields. This method must +- * print all public fields, also non primary. Output formats can vary (e.g. +- * YAML like) so the actual output should NOT be treated as standard. +- * +- * @param dto the dto to turn into a string +- * @return a human readable string (not json!) +- */ +- String toString(Object dto); +- +- /** +- * Check if two dtos fields are equal. This is shallow equal, that is the +- * fields of this DTO are using the equals() instance method. +- * +- * @param a the first object +- * @param b the second object +- * @return true if both are null or the DTO's primary fields are equal +- */ +- boolean equals(Object a, Object b); +- +- /** +- * Check if two DTOs fields are equal. This is deep equal, that is the +- * fields of this DTO are using this method is the object at a field is a +- * DTO, recursively. +- * +- * @param a the first object +- * @param b the second object +- * @return true if both are null or the DTO's primary fields are equal +- */ +- boolean deepEquals(Object a, Object b); +- +- /** +- * Calculate a hash Code for the fields in this DTO. The dto must have at +- * least one public field. +- * +- * @param dto the object to calculate the hashcode for, must not be null . +- * @return a hashcode +- */ +- int hashCode(Object dto); +- +- /** +- * Access a DTO with a path. A path is a '.' separated string. Each part in +- * the path is either a field name, key in a map, or an index in a list. If +- * the path segments contain dots or backslashes, then these must be escaped +- * +- * @param dto the root +- * @param path the path, should only contain dots as separators +- * @return the value of the object or empty if not found. +- */ +- +- Optional get(Object dto, String path); +- +- /** +- * Access a DTO with a path that consists of an array with segments. Each +- * segment in the path is either a field name, key in a map, or an index in +- * a list. +- * +- * @param dto the root +- * @param path the path +- * @return the value of the object or empty if not found. +- */ +- Optional get(Object dto, String... path); +- +- /** +- * Return a list of paths where the two objects differ. The objects must be +- * of the same class. +- * +- * @param older the older object +- * @param newer the newer object +- * @return A list of differences, if there is no difference, the list is +- * empty. +- */ +- List diff(Object older, Object newer); +- +- /** +- * The details of a difference +- */ +- class Difference extends DTO { +- /** +- * The path where there was a difference +- */ +- public String path[]; +- +- /** +- * The reason why there was a difference +- */ +- public Reason reason; +- } +- +- /** +- * The reason for a difference. +- */ +- enum Reason { +- UNEQUAL, +- REMOVED, +- ADDED, +- DIFFERENT_TYPES, +- SIZE, +- KEYS, +- NO_STRING_MAP, +- INVALID_KEY; +- } +- +- /** +- * Takes a path with escaped '.'and '\' and then turns it into an array of +- * unescaped keys +- * +- * @param path the path with escaped \ and . +- * @return a path array with unescaped segments +- */ +- String[] fromPathToSegments(String path); +- +- /** +- * Takes a path with unescaped keys and turns it into a string path where +- * the \ and . are escaped. +- * +- * @param segments The unescaped segments of the path +- * @return a string path where the . and \ are escaped. +- */ +- String fromSegmentsToPath(String[] segments); +- +- /** +- * Escape a string to be used in a path. This will put a backslash ('\') in +- * front of full stops ('.') and the backslash ('\'). +- * +- * @param unescaped the string to be escaped +- * @return a string where all '.' and '\' are escaped with a '\'. +- */ +- String escape(String unescaped); +- +- /** +- * Unescapes a string to be used in a path. This will remove a backslash +- * ('\') in front of full stops ('.') and the backslash ('\'). +- * +- * @param escaped the string to be unescaped +- * @return a string where all '\.' and '\\' have the preceding backslash +- * removed with a '\'. +- */ +- String unescape(String escaped); +- +- /** +- * Return true if the give dto is complex (either Map, Collection, Array, or +- * has public fields. +- * +- * @param object The DTO to check +- * @return true if this is a DTO with fields or length. +- */ +- +- boolean isComplex(Object object); +- +- /** +- * An object with public non-static non-synthetic fields. +- * +- * @param dto the object to check +- * @return true if this object has public fields or extends DTO +- */ +- boolean isDTO(Object dto); +- +- /** +- * Create a shallow copy of a DTO. This will create a new object of the same +- * type and copy the public fields of the source to the new copy. It will +- * not create a copy for these values. +- * +- * @param object the source object +- * @return a shallow copy of object +- */ +- +- T shallowCopy(T object); +- +- /** +- * Create a deep copy of a DTO. This will copy the fields of the DTO. Copied +- * values will also be created anew if they are complex (Map, Collection, +- * DTO, or Array). Other objects are assumed to be immutable unless they +- * implement Cloneable. +- * +- * @param object the object to deep copy +- * @return the deep copied object +- */ +- +- T deepCopy(T object); +-} +diff --git a/aQute.libg/src/aQute/libg/dtos/DTOsImpl.java b/aQute.libg/src/aQute/libg/dtos/DTOsImpl.java +deleted file mode 100644 +index 6de46b6..0000000 +--- a/aQute.libg/src/aQute/libg/dtos/DTOsImpl.java ++++ /dev/null +@@ -1,615 +0,0 @@ +-package aQute.libg.dtos; +- +-import java.lang.reflect.Array; +-import java.lang.reflect.Field; +-import java.lang.reflect.Modifier; +-import java.util.ArrayList; +-import java.util.Arrays; +-import java.util.Collection; +-import java.util.Collections; +-import java.util.Comparator; +-import java.util.Formatter; +-import java.util.List; +-import java.util.Map; +-import java.util.Map.Entry; +-import java.util.Optional; +-import java.util.WeakHashMap; +-import java.util.regex.Pattern; +- +-import org.osgi.dto.DTO; +-import org.slf4j.Logger; +-import org.slf4j.LoggerFactory; +- +-import aQute.bnd.exceptions.Exceptions; +- +-public class DTOsImpl implements DTOs { +- private final static Logger logger = LoggerFactory.getLogger(DTOsImpl.class); +- private final Field[] EMPTY_FIELDS = new Field[0]; +- private final Map, Field[]> cache = Collections +- .synchronizedMap(new WeakHashMap, Field[]>()); +- +- private final Link root = new Link(null, null, null); +- +- // +- // The link class is to keep track of cycles traversing and to +- // maintain the path at minimum cost. +- // +- +- static class Link { +- final Link prev; +- final Object object; +- final Object name; +- +- public Link(Link link, Object name, Object object) { +- this.prev = link; +- this.name = name; +- this.object = object; +- } +- +- boolean isCycle(Object t) { +- if (this.object == t) +- return true; +- else if (prev == null) +- return false; +- else +- return prev.isCycle(t); +- } +- +- String[] getPath(int n) { +- if (prev == null) { +- String[] path = new String[n]; +- return path; +- } +- String[] path = prev.getPath(n + 1); +- path[path.length - n - 1] = name.toString(); +- return path; +- } +- +- void verifyCycle(Object o) { +- if (isCycle(o)) { +- throw new IllegalArgumentException("Cycle in DTO " + Arrays.toString(getPath(0))); +- } +- } +- } +- +- static class Diff extends Difference { +- public Diff(Reason reason, Link link) { +- this.reason = reason; +- this.path = link.getPath(0); +- } +- } +- +- @Override +- public Map asMap(Object dto) { +- return new DTOMap(this, dto); +- } +- +- Field[] getFields(Object o) { +- if (o == null) +- return EMPTY_FIELDS; +- return getFields(o.getClass()); +- } +- +- Field[] getFields(Class c) { +- Field fields[] = cache.get(c); +- if (fields == null) { +- List publicFields = new ArrayList<>(); +- +- for (Field field : c.getFields()) { +- if (field.isEnumConstant() || field.isSynthetic() || Modifier.isStatic(field.getModifiers())) +- continue; +- publicFields.add(field); +- } +- Collections.sort(publicFields, new Comparator() { +- +- @Override +- public int compare(Field o1, Field o2) { +- return o1.getName() +- .compareTo(o2.getName()); +- } +- }); +- +- cache.put(c.getClass(), fields = publicFields.toArray(new Field[publicFields.size()])); +- } +- return fields; +- } +- +- int bsearch(Field[] a, int fromIndex, int toIndex, String key) { +- int low = fromIndex; +- int high = toIndex - 1; +- +- while (low <= high) { +- int mid = (low + high) >>> 1; +- Field midVal = a[mid]; +- int cmp = midVal.getName() +- .compareTo(key); +- if (cmp < 0) +- low = mid + 1; +- else if (cmp > 0) +- high = mid - 1; +- else +- return mid; // key found +- } +- return -(low + 1); // key not found. +- } +- +- Field getField(Field[] fields, String name) { +- int index = bsearch(fields, 0, fields.length, name); +- if (index < 0) +- return null; +- else +- return fields[index]; +- } +- +- /** +- * Shallow copy +- */ +- +- @SuppressWarnings({ +- "unchecked", "rawtypes" +- }) +- @Override +- public T shallowCopy(T source) { +- try { +- if (!isComplex(source)) +- return source; +- +- Class c = (Class) source.getClass(); +- +- if (c.isArray()) { +- int l = Array.getLength(source); +- T dest = (T) Array.newInstance(c.getComponentType(), l); +- System.arraycopy(source, 0, dest, 0, l); +- return dest; +- } +- +- T dest = c.newInstance(); +- +- if (source instanceof Map) { +- ((Map) dest).putAll((Map) source); +- return dest; +- } +- +- if (source instanceof Collection) { +- ((Collection) dest).addAll((Collection) source); +- return dest; +- } +- +- for (Field field : getFields(c)) { +- field.set(dest, field.get(source)); +- } +- return dest; +- } catch (Exception e) { +- throw Exceptions.duck(e); +- } +- } +- +- /** +- * Deep copy +- */ +- +- @Override +- public T deepCopy(T source) { +- return deepCopy(source, root); +- } +- +- @SuppressWarnings({ +- "unchecked", "rawtypes" +- }) +- T deepCopy(T source, Link link) { +- try { +- if (!isComplex(source)) +- return source; +- +- link.verifyCycle(source); +- +- Class c = (Class) source.getClass(); +- +- if (c.isArray()) { +- int l = Array.getLength(source); +- T dest = (T) Array.newInstance(c.getComponentType(), l); +- +- for (int i = 0; i < l; i++) { +- Object s = Array.get(source, i); +- Array.set(dest, i, deepCopy(s, new Link(link, i, source))); +- } +- return dest; +- } +- +- T dest = c.newInstance(); +- +- if (source instanceof Map) { +- Map d = (Map) dest; +- Map s = (Map) source; +- for (Entry entry : s.entrySet()) { +- Link next = new Link(link, entry.getKey(), source); +- d.put(deepCopy(entry.getKey(), next), deepCopy(entry.getValue(), next)); +- } +- return dest; +- } +- +- if (source instanceof Collection) { +- Collection s = (Collection) source; +- Collection d = (Collection) dest; +- int i = 0; +- for (Object o : s) { +- Link next = new Link(link, i++, source); +- d.add(deepCopy(o, next)); +- } +- return dest; +- } +- +- for (Field field : getFields(c)) { +- Link next = new Link(link, field.getName(), source); +- field.set(dest, deepCopy(field.get(source), next)); +- } +- return dest; +- } catch (Exception e) { +- throw Exceptions.duck(e); +- } +- +- } +- +- @Override +- public String[] fromPathToSegments(String path) { +- return fromPathToSegments(path, 0, 0); +- } +- +- String[] fromPathToSegments(String path, int start, int n) { +- if (start >= path.length()) { +- return new String[n]; +- } +- +- StringBuilder sb = new StringBuilder(); +- int i = start; +- outer: for (; i < path.length(); i++) { +- char c = path.charAt(i); +- switch (c) { +- +- case '.' : +- break outer; +- +- case '\\' : +- c = path.charAt(++i); +- assert c == '.' || c == '\\'; +- +- default : +- sb.append(c); +- break; +- } +- } +- String[] result = fromPathToSegments(path, i + 1, n + 1); +- result[n] = sb.toString(); +- return result; +- } +- +- @Override +- public String fromSegmentsToPath(String[] segments) { +- StringBuilder sb = new StringBuilder(); +- String del = ""; +- for (String segment : segments) { +- sb.append(del); +- for (int i = 0; i < segment.length(); i++) { +- char c = segment.charAt(i); +- switch (c) { +- case '\\' : +- case '.' : +- sb.append('\\'); +- +- // FALL THROUGH +- +- default : +- sb.append(c); +- break; +- } +- } +- del = "."; +- } +- return sb.toString(); +- } +- +- @Override +- public boolean deepEquals(Object a, Object b) { +- try { +- return diff(a, b).isEmpty(); +- } catch (Exception e) { +- throw Exceptions.duck(e); +- } +- } +- +- @Override +- public String toString(Object dto) { +- if (dto == null) +- return null + ""; +- +- Field[] fields = getFields(dto); +- if (fields.length == 0) +- return dto.toString(); +- +- try { +- try (Formatter format = new Formatter()) { +- for (Field f : fields) { +- format.format("%s: %s%n", f.getName(), f.get(dto)); +- } +- return format.toString(); +- } +- } catch (IllegalArgumentException | IllegalAccessException e) { +- throw new RuntimeException(e); +- } +- } +- +- @Override +- public boolean equals(Object a, Object b) { +- try { +- return diff(a, b).isEmpty(); +- } catch (Exception e) { +- return false; +- } +- } +- +- @Override +- public int hashCode(Object dto) { +- Field[] fields = getFields(dto); +- if (fields.length == 0) +- return dto.hashCode(); +- +- int prime = 31; +- int result = 1; +- try { +- +- for (Field f : fields) { +- Object a = f.get(this); +- result = prime * result + (a == null ? 0 : hashCode(dto)); +- } +- +- return result; +- } catch (Exception e) { +- return result; +- } +- } +- +- @Override +- public Optional get(Object dto, String path) { +- return get(dto, fromPathToSegments(path)); +- } +- +- @Override +- public Optional get(Object dto, String... path) { +- return get(dto, path, 0, path.length); +- } +- +- private Optional get(Object dto, String[] path, int i, int max) { +- try { +- if (i > path.length) +- throw new IllegalArgumentException("Incorrect index in path " + Arrays.toString(path) + "[" + i + "]"); +- +- if (i == path.length || i == max) +- return Optional.of(dto); +- +- if (dto == null) +- return Optional.empty(); +- +- String name = path[i]; +- +- if (dto.getClass() +- .isArray()) { +- int index = Integer.parseInt(name); +- if (index >= Array.getLength(dto)) +- throw new IllegalArgumentException( +- "path access contains an array but the corresponding index is not an integer: " +- + Arrays.toString(path) + "[" + i + "]"); +- +- return get(Array.get(dto, index), path, i + 1, max); +- } +- +- if (dto instanceof Collection) { +- Collection coll = (Collection) dto; +- int index = Integer.parseInt(name); +- if (index >= coll.size()) +- throw new IllegalArgumentException("path access contains a collection but the corresponding index is not an integer: " +- + Arrays.toString(path) + "[" + i + "]"); +- +- if (coll instanceof List) { +- return get(((List) coll).get(index), path, i + 1, max); +- } +- for (Object o : coll) { +- if (index-- == 0) +- return get(o, path, i + 1, max); +- } +- assert false; +- return null; // unreachable +- } +- +- if (dto instanceof Map) { +- Object value = ((Map) dto).get(name); +- return get(value, path, i + 1, max); +- } +- +- Field fields[] = getFields(dto); +- if (fields.length > 0) { +- for (Field field : fields) { +- if (field.getName() +- .equals(name)) { +- return get(field.get(dto), path, i + 1, max); +- } +- } +- } +- +- throw new IllegalArgumentException("Unknown type to traverse " + dto.getClass() + " for " + name); +- } catch (Exception e) { +- throw Exceptions.duck(e); +- } +- } +- +- @Override +- public List diff(Object older, final Object newer) { +- List diffs = new ArrayList<>(); +- diff(diffs, root, older, newer); +- return diffs; +- } +- +- private boolean diff(List diffs, Link link, Object older, Object newer) { +- try { +- if (older == newer) +- return false; +- +- if (older == null) { +- diffs.add(new Diff(Reason.ADDED, link)); +- return true; +- } +- +- if (newer == null) { +- diffs.add(new Diff(Reason.REMOVED, link)); +- return true; +- } +- +- Class oc = older.getClass(); +- Class nc = newer.getClass(); +- if (oc != nc) { +- diffs.add(new Diff(Reason.DIFFERENT_TYPES, link)); +- return true; +- } +- +- if (older.equals(newer)) +- return true; +- +- if (older instanceof Collection) { +- Collection co = (Collection) older; +- Collection cn = (Collection) newer; +- +- if (co.size() != cn.size()) { +- diffs.add(new Diff(Reason.SIZE, link)); +- return true; +- } +- +- if (co.equals(cn)) +- return false; +- +- // +- // They're different, if it is a list we can find out which +- // +- +- if (older instanceof List) { +- List clo = (List) older; +- List cln = (List) newer; +- +- for (int i = 0; i < co.size(); i++) { +- Object lo = clo.get(i); +- Object ln = cln.get(i); +- diff(diffs, new Link(link, i, older), lo, ln); +- } +- return true; +- } +- +- // +- // If not a list, we're lost ... +- // +- +- diffs.add(new Diff(Reason.UNEQUAL, link)); +- return true; +- } +- +- if (oc.isArray()) { +- Object[] ao = new Object[] { +- older +- }; +- Object[] an = new Object[] { +- newer +- }; +- if (Arrays.deepEquals(ao, an)) { +- return false; +- } +- +- int lo = Array.getLength(older); +- int ln = Array.getLength(newer); +- if (lo != ln) { +- diffs.add(new Diff(Reason.SIZE, link)); +- return true; +- } +- +- for (int i = 0; i < lo; i++) { +- diff(diffs, new Link(link, i, older), Array.get(older, i), Array.get(newer, i)); +- } +- return true; +- } +- +- if (older instanceof Map) { +- Map co = (Map) older; +- Map cn = (Map) newer; +- +- if (co.size() != cn.size()) { +- diffs.add(new Diff(Reason.SIZE, link)); +- return true; +- } +- +- if (co.equals(cn)) +- return false; +- +- if (!co.keySet() +- .equals(cn.keySet())) { +- diffs.add(new Diff(Reason.KEYS, link)); +- return true; +- } +- +- for (Map.Entry e : co.entrySet()) { +- Object key = e.getKey(); +- if (!(key instanceof String)) { +- diffs.add(new Diff(Reason.NO_STRING_MAP, link)); +- return true; +- } +- +- String k = escape((String) key); +- +- Object no = co.get(key); +- Object nn = cn.get(key); +- +- diff(diffs, new Link(link, k, older), no, nn); +- } +- return true; +- } +- +- Field[] fields = getFields(older); +- if (fields.length > 0) { +- for (Field field : fields) { +- Object o = field.get(older); +- Object n = field.get(newer); +- diff(diffs, new Link(link, field.getName(), older), o, n); +- } +- return true; +- } +- +- diffs.add(new Diff(Reason.UNEQUAL, link)); +- return true; +- } catch (Exception e) { +- logger.warn("failed to diff %s to %s : %s", older, newer, e.getMessage(), e); +- throw Exceptions.duck(e); +- } +- } +- +- static Pattern ESCAPE_P = Pattern.compile("(\\.|\\\\)"); +- static Pattern UNESCAPE_P = Pattern.compile("\\\\(\\.|\\\\)"); +- +- @Override +- public String escape(String unescaped) { +- return ESCAPE_P.matcher(unescaped) +- .replaceAll("\\\\$1"); +- } +- +- @Override +- public String unescape(String unescaped) { +- return UNESCAPE_P.matcher(unescaped) +- .replaceAll("$1"); +- } +- +- @Override +- public boolean isComplex(Object a) { +- return a != null && (a instanceof Map || a instanceof Collection || a instanceof DTO || a.getClass() +- .isArray() || getFields(a).length > 0); +- } +- +- @Override +- public boolean isDTO(Object o) { +- return getFields(o).length != 0; +- } +- +-} +diff --git a/biz.aQute.bndlib/src/aQute/bnd/build/ProjectLauncher.java b/biz.aQute.bndlib/src/aQute/bnd/build/ProjectLauncher.java +index e1ce42f..c1a3d87 100644 +--- a/biz.aQute.bndlib/src/aQute/bnd/build/ProjectLauncher.java ++++ b/biz.aQute.bndlib/src/aQute/bnd/build/ProjectLauncher.java +@@ -43,7 +43,6 @@ import aQute.bnd.osgi.Processor; + import aQute.bnd.osgi.Verifier; + import aQute.bnd.service.Strategy; + import aQute.lib.io.IO; +-import aQute.lib.startlevel.StartLevelRuntimeHandler; + import aQute.lib.strings.Strings; + import aQute.lib.watcher.FileWatcher; + import aQute.lib.watcher.FileWatcher.Builder; +-- +2.37.2 + diff --git a/SOURCES/0004-Port-to-OpenJDK-21.patch b/SOURCES/0004-Port-to-OpenJDK-21.patch new file mode 100644 index 0000000..ec61e2f --- /dev/null +++ b/SOURCES/0004-Port-to-OpenJDK-21.patch @@ -0,0 +1,64 @@ +From e5cf5ee78f8504ccdd5af0a05ef7739a99f31059 Mon Sep 17 00:00:00 2001 +From: Marian Koncek +Date: Tue, 20 Feb 2024 16:56:44 +0100 +Subject: [PATCH] Port to OpenJDK 21 + +--- + .../src/aQute/lib/collections/SortedList.java | 36 +++++++++++++++++++ + 1 file changed, 36 insertions(+) + +diff --git a/aQute.libg/src/aQute/lib/collections/SortedList.java b/aQute.libg/src/aQute/lib/collections/SortedList.java +index ed33e7f..f584e57 100644 +--- a/aQute.libg/src/aQute/lib/collections/SortedList.java ++++ b/aQute.libg/src/aQute/lib/collections/SortedList.java +@@ -3,6 +3,7 @@ package aQute.lib.collections; + import java.lang.reflect.Array; + import java.util.Arrays; + import java.util.Collection; ++import java.util.Collections; + import java.util.Comparator; + import java.util.Iterator; + import java.util.List; +@@ -510,4 +511,39 @@ public class SortedList implements SortedSet, List { + public Spliterator spliterator() { + return SortedSet.super.spliterator(); + } ++ ++ @Override ++ public SortedList reversed() { ++ return new SortedList(this.list, this.start, this.end, Collections.reverseOrder(this.comparator)); ++ } ++ ++ @Override ++ public T removeFirst() { ++ return List.super.removeFirst(); ++ } ++ ++ @Override ++ public T removeLast() { ++ return List.super.removeLast(); ++ } ++ ++ @Override ++ public T getFirst() { ++ return List.super.getFirst(); ++ } ++ ++ @Override ++ public T getLast() { ++ return List.super.getLast(); ++ } ++ ++ @Override ++ public void addFirst(T v) { ++ add(v); ++ } ++ ++ @Override ++ public void addLast(T v) { ++ add(v); ++ } + } +-- +2.43.0 + diff --git a/SOURCES/aQute.libg-6.3.1.pom b/SOURCES/aQute.libg-6.3.1.pom new file mode 100644 index 0000000..80f5ea9 --- /dev/null +++ b/SOURCES/aQute.libg-6.3.1.pom @@ -0,0 +1,110 @@ + + + 4.0.0 + biz.aQute.bnd + aQute.libg + 6.3.1 + A library to be statically linked. Contains many small utilities. This bundle should not be installed in a framework, it is compile only. + aQute.libg + https://bnd.bndtools.org/ + + Bndtools + https://bndtools.org/ + + + + (Apache-2.0 OR EPL-2.0) + https://opensource.org/licenses/Apache-2.0,https://opensource.org/licenses/EPL-2.0 + repo + This program and the accompanying materials are made available under the terms of the Apache License, Version 2.0, or the Eclipse Public License 2.0. + + + + https://github.com/bndtools/bnd + scm:git:https://github.com/bndtools/bnd.git + scm:git:git@github.com:bndtools/bnd.git + 6.3.1 + + + + pkriens + Peter.Kriens@aQute.biz + Peter Kriens + Bndtools + https://github.com/bndtools + + architect + developer + + 1 + + + bjhargrave + BJ Hargrave + bj@hargrave.dev + https://github.com/bjhargrave + IBM + https://developer.ibm.com + + developer + + America/New_York + + + rotty3000 + Ray Augé + raymond.auge@liferay.com + https://rotty3000.github.io + Liferay Inc. + https://www.liferay.com + + developer + + America/New_York + + + + + org.osgi + osgi.annotation + 8.1.0 + provided + + + org.slf4j + slf4j-api + 1.7.25 + compile + + + org.osgi + org.osgi.dto + 1.0.0 + compile + + + org.osgi + org.osgi.resource + 1.0.0 + compile + + + org.osgi + org.osgi.framework + 1.8.0 + compile + + + org.osgi + org.osgi.util.function + 1.2.0 + compile + + + org.osgi + org.osgi.util.promise + 1.2.0 + compile + + + diff --git a/SOURCES/aggregator.pom b/SOURCES/aggregator.pom new file mode 100644 index 0000000..a8c9044 --- /dev/null +++ b/SOURCES/aggregator.pom @@ -0,0 +1,44 @@ + + + 4.0.0 + org.fedoraproject.xmvn.aqute-bnd + aggregator + any + pom + + UTF-8 + + + aQute.libg + biz.aQute.bndlib + biz.aQute.bnd + biz.aQute.bnd.annotation + biz.aQute.bnd.ant + biz.aQute.bnd.util + maven + + + src + + + src/ + + **/*.java + **/packageinfo + + + + + + org.apache.maven.plugins + maven-compiler-plugin + any + + 1.8 + 1.8 + + + + + diff --git a/SOURCES/biz.aQute.bnd-6.3.1.pom b/SOURCES/biz.aQute.bnd-6.3.1.pom new file mode 100644 index 0000000..d292d5a --- /dev/null +++ b/SOURCES/biz.aQute.bnd-6.3.1.pom @@ -0,0 +1,200 @@ + + + 4.0.0 + biz.aQute.bnd + biz.aQute.bnd + 6.3.1 + This command line utility is the Swiss army knife of OSGi. It provides you with a breadth of tools to understand and manage OSGi based systems. This project basically uses bndlib. + biz.aQute.bnd + https://bnd.bndtools.org/ + + Bndtools + https://bndtools.org/ + + + + (Apache-2.0 OR EPL-2.0) + https://opensource.org/licenses/Apache-2.0,https://opensource.org/licenses/EPL-2.0 + repo + This program and the accompanying materials are made available under the terms of the Apache License, Version 2.0, or the Eclipse Public License 2.0. + + + + https://github.com/bndtools/bnd + scm:git:https://github.com/bndtools/bnd.git + scm:git:git@github.com:bndtools/bnd.git + 6.3.1 + + + + pkriens + Peter.Kriens@aQute.biz + Peter Kriens + Bndtools + https://github.com/bndtools + + architect + developer + + 1 + + + bjhargrave + BJ Hargrave + bj@hargrave.dev + https://github.com/bjhargrave + IBM + https://developer.ibm.com + + developer + + America/New_York + + + rotty3000 + Ray Augé + raymond.auge@liferay.com + https://rotty3000.github.io + Liferay Inc. + https://www.liferay.com + + developer + + America/New_York + + + + + org.osgi + org.osgi.dto + 1.0.0 + provided + + + org.osgi + org.osgi.resource + 1.0.0 + provided + + + org.osgi + org.osgi.framework + 1.8.0 + provided + + + org.osgi + org.osgi.util.tracker + 1.5.4 + provided + + + org.osgi + org.osgi.service.coordinator + 1.0.2 + provided + + + org.osgi + org.osgi.service.log + 1.3.0 + provided + + + org.osgi + org.osgi.service.repository + 1.1.0 + provided + + + org.osgi + org.osgi.service.resolver + 1.1.1 + provided + + + org.osgi + org.osgi.util.function + 1.2.0 + provided + + + org.osgi + org.osgi.util.promise + 1.2.0 + provided + + + biz.aQute.bnd + biz.aQute.bnd.util + 6.3.1 + provided + + + biz.aQute.bnd + biz.aQute.bndlib + 6.3.1 + provided + + + biz.aQute.bnd + biz.aQute.bnd.ant + 6.3.1 + provided + + + biz.aQute.bnd + biz.aQute.resolve + 6.3.1 + provided + + + biz.aQute.bnd + biz.aQute.repository + 6.3.1 + provided + + + biz.aQute.bnd + biz.aQute.bnd.exporters + 6.3.1 + provided + + + biz.aQute.bnd + biz.aQute.bnd.reporter + 6.3.1 + provided + + + biz.aQute.bnd + biz.aQute.remote.api + 6.3.1 + provided + + + org.yaml + snakeyaml + 1.15 + provided + + + org.slf4j + slf4j-api + 1.7.25 + provided + + + org.slf4j + slf4j-simple + 1.7.25 + provided + + + jline + jline + 2.14.6 + provided + + + diff --git a/SOURCES/biz.aQute.bnd.annotation-6.3.1.pom b/SOURCES/biz.aQute.bnd.annotation-6.3.1.pom new file mode 100644 index 0000000..a774785 --- /dev/null +++ b/SOURCES/biz.aQute.bnd.annotation-6.3.1.pom @@ -0,0 +1,98 @@ + + + 4.0.0 + biz.aQute.bnd + biz.aQute.bnd.annotation + 6.3.1 + bnd Annotations Library + biz.aQute.bnd.annotation + https://bnd.bndtools.org/ + + Bndtools + https://bndtools.org/ + + + + (Apache-2.0 OR EPL-2.0) + https://opensource.org/licenses/Apache-2.0,https://opensource.org/licenses/EPL-2.0 + repo + This program and the accompanying materials are made available under the terms of the Apache License, Version 2.0, or the Eclipse Public License 2.0. + + + + https://github.com/bndtools/bnd + scm:git:https://github.com/bndtools/bnd.git + scm:git:git@github.com:bndtools/bnd.git + 6.3.1 + + + + pkriens + Peter.Kriens@aQute.biz + Peter Kriens + Bndtools + https://github.com/bndtools + + architect + developer + + 1 + + + bjhargrave + BJ Hargrave + bj@hargrave.dev + https://github.com/bjhargrave + IBM + https://developer.ibm.com + + developer + + America/New_York + + + rotty3000 + Ray Augé + raymond.auge@liferay.com + https://rotty3000.github.io + Liferay Inc. + https://www.liferay.com + + developer + + America/New_York + + + + + org.osgi + osgi.annotation + 8.1.0 + provided + + + org.osgi + org.osgi.namespace.extender + 1.0.1 + provided + + + org.osgi + org.osgi.namespace.service + 1.0.0 + provided + + + org.osgi + org.osgi.resource + 1.0.0 + compile + + + org.osgi + org.osgi.service.serviceloader + 1.0.0 + compile + + + diff --git a/SOURCES/biz.aQute.bnd.ant-6.3.1.pom b/SOURCES/biz.aQute.bnd.ant-6.3.1.pom new file mode 100644 index 0000000..c351e10 --- /dev/null +++ b/SOURCES/biz.aQute.bnd.ant-6.3.1.pom @@ -0,0 +1,98 @@ + + + 4.0.0 + biz.aQute.bnd + biz.aQute.bnd.ant + 6.3.1 + Bnd Ant Tasks + biz.aQute.bnd.ant + https://bnd.bndtools.org/ + + Bndtools + https://bndtools.org/ + + + + (Apache-2.0 OR EPL-2.0) + https://opensource.org/licenses/Apache-2.0,https://opensource.org/licenses/EPL-2.0 + repo + This program and the accompanying materials are made available under the terms of the Apache License, Version 2.0, or the Eclipse Public License 2.0. + + + + https://github.com/bndtools/bnd + scm:git:https://github.com/bndtools/bnd.git + scm:git:git@github.com:bndtools/bnd.git + 6.3.1 + + + + pkriens + Peter.Kriens@aQute.biz + Peter Kriens + Bndtools + https://github.com/bndtools + + architect + developer + + 1 + + + bjhargrave + BJ Hargrave + bj@hargrave.dev + https://github.com/bjhargrave + IBM + https://developer.ibm.com + + developer + + America/New_York + + + rotty3000 + Ray Augé + raymond.auge@liferay.com + https://rotty3000.github.io + Liferay Inc. + https://www.liferay.com + + developer + + America/New_York + + + + + org.osgi + osgi.annotation + 8.1.0 + provided + + + biz.aQute.bnd + biz.aQute.bnd.util + 6.3.1 + compile + + + biz.aQute.bnd + biz.aQute.bndlib + 6.3.1 + compile + + + org.slf4j + slf4j-api + 1.7.25 + compile + + + org.apache.ant + ant + 1.10.12 + compile + + + diff --git a/SOURCES/biz.aQute.bnd.util-6.3.1.pom b/SOURCES/biz.aQute.bnd.util-6.3.1.pom new file mode 100644 index 0000000..4588bee --- /dev/null +++ b/SOURCES/biz.aQute.bnd.util-6.3.1.pom @@ -0,0 +1,74 @@ + + + 4.0.0 + biz.aQute.bnd + biz.aQute.bnd.util + 6.3.1 + Util classes + biz.aQute.bnd.util + https://bnd.bndtools.org/ + + Bndtools + https://bndtools.org/ + + + + (Apache-2.0 OR EPL-2.0) + https://opensource.org/licenses/Apache-2.0,https://opensource.org/licenses/EPL-2.0 + repo + This program and the accompanying materials are made available under the terms of the Apache License, Version 2.0, or the Eclipse Public License 2.0. + + + + https://github.com/bndtools/bnd + scm:git:https://github.com/bndtools/bnd.git + scm:git:git@github.com:bndtools/bnd.git + 6.3.1 + + + + pkriens + Peter.Kriens@aQute.biz + Peter Kriens + Bndtools + https://github.com/bndtools + + architect + developer + + 1 + + + bjhargrave + BJ Hargrave + bj@hargrave.dev + https://github.com/bjhargrave + IBM + https://developer.ibm.com + + developer + + America/New_York + + + rotty3000 + Ray Augé + raymond.auge@liferay.com + https://rotty3000.github.io + Liferay Inc. + https://www.liferay.com + + developer + + America/New_York + + + + + org.osgi + osgi.annotation + 8.1.0 + provided + + + diff --git a/SOURCES/biz.aQute.bndlib-6.3.1.pom b/SOURCES/biz.aQute.bndlib-6.3.1.pom new file mode 100644 index 0000000..63cb469 --- /dev/null +++ b/SOURCES/biz.aQute.bndlib-6.3.1.pom @@ -0,0 +1,158 @@ + + + 4.0.0 + biz.aQute.bnd + biz.aQute.bndlib + 6.3.1 + bndlib: A Swiss Army Knife for OSGi + biz.aQute.bndlib + https://bnd.bndtools.org/ + + Bndtools + https://bndtools.org/ + + + + (Apache-2.0 OR EPL-2.0) + https://opensource.org/licenses/Apache-2.0,https://opensource.org/licenses/EPL-2.0 + repo + This program and the accompanying materials are made available under the terms of the Apache License, Version 2.0, or the Eclipse Public License 2.0. + + + + https://github.com/bndtools/bnd + scm:git:https://github.com/bndtools/bnd.git + scm:git:git@github.com:bndtools/bnd.git + 6.3.1 + + + + pkriens + Peter.Kriens@aQute.biz + Peter Kriens + Bndtools + https://github.com/bndtools + + architect + developer + + 1 + + + bjhargrave + BJ Hargrave + bj@hargrave.dev + https://github.com/bjhargrave + IBM + https://developer.ibm.com + + developer + + America/New_York + + + rotty3000 + Ray Augé + raymond.auge@liferay.com + https://rotty3000.github.io + Liferay Inc. + https://www.liferay.com + + developer + + America/New_York + + + + + org.osgi + osgi.annotation + 8.1.0 + provided + + + org.osgi + org.osgi.dto + 1.0.0 + compile + + + org.osgi + org.osgi.resource + 1.0.0 + compile + + + org.osgi + org.osgi.framework + 1.8.0 + compile + + + org.osgi + org.osgi.util.tracker + 1.5.4 + compile + + + org.osgi + org.osgi.namespace.contract + 1.0.0 + provided + + + org.osgi + org.osgi.namespace.extender + 1.0.1 + provided + + + org.osgi + org.osgi.namespace.implementation + 1.0.0 + provided + + + org.osgi + org.osgi.namespace.service + 1.0.0 + provided + + + org.osgi + org.osgi.service.log + 1.3.0 + compile + + + org.osgi + org.osgi.service.repository + 1.1.0 + compile + + + org.osgi + org.osgi.util.function + 1.2.0 + compile + + + org.osgi + org.osgi.util.promise + 1.2.0 + compile + + + biz.aQute.bnd + biz.aQute.bnd.util + 6.3.1 + compile + + + org.slf4j + slf4j-api + 1.7.25 + compile + + + diff --git a/SOURCES/generate-tarball.sh b/SOURCES/generate-tarball.sh new file mode 100755 index 0000000..b1a244b --- /dev/null +++ b/SOURCES/generate-tarball.sh @@ -0,0 +1,31 @@ +#!/bin/bash +set -e + +name=aqute-bnd +version="$(sed -n 's/Version:\s*//p' *.spec)" + +# RETRIEVE +wget "https://github.com/bndtools/bnd/archive/${version}.tar.gz" -O "${name}-${version}.orig.tar.gz" + +rm -rf tarball-tmp +mkdir tarball-tmp +pushd tarball-tmp +tar -xf "../${name}-${version}.orig.tar.gz" +mv "bnd-${version}" "${name}-${version}" + +# CLEAN TARBALL +rm -rf "${name}-${version}/docs" +find -name '*.jar' -delete +find -name '*.class' -delete +find -name '*.ar' -delete +find -name '*.tar' -delete +find -name '*.gz' -delete +find -name '*.bz2' -delete +find -name '*.xz' -delete +find -name '*.zip' -delete +find -name '*.exe' -delete +find -name '*.dll' -delete + +tar -czf "../${name}-${version}.tar.gz" * +popd +rm -r tarball-tmp "${name}-${version}.orig.tar.gz" diff --git a/SPECS/aqute-bnd.spec b/SPECS/aqute-bnd.spec new file mode 100644 index 0000000..a65c0e4 --- /dev/null +++ b/SPECS/aqute-bnd.spec @@ -0,0 +1,505 @@ +%bcond_with bootstrap + +%if %{without bootstrap} && %{undefined rhel} +%bcond_without bnd_maven_plugin +%else +%bcond_with bnd_maven_plugin +%endif + +Name: aqute-bnd +Version: 6.3.1 +Release: 10%{?dist} +Summary: BND Tool +# Part of jpm is under BSD, but jpm is not included in binary RPM +License: Apache-2.0 OR EPL-2.0 +URL: https://bnd.bndtools.org/ +BuildArch: noarch +ExclusiveArch: %{java_arches} noarch + +Source0: %{name}-%{version}.tar.gz +# removes bundled jars from upstream tarball +# run as: +# ./generate-tarball.sh +Source1: generate-tarball.sh + +# Auxiliary parent pom, packager-written +Source2: aggregator.pom +Source3: https://repo1.maven.org/maven2/biz/aQute/bnd/aQute.libg/%{version}/aQute.libg-%{version}.pom +Source4: https://repo1.maven.org/maven2/biz/aQute/bnd/biz.aQute.bnd/%{version}/biz.aQute.bnd-%{version}.pom +Source5: https://repo1.maven.org/maven2/biz/aQute/bnd/biz.aQute.bndlib/%{version}/biz.aQute.bndlib-%{version}.pom +Source6: https://repo1.maven.org/maven2/biz/aQute/bnd/biz.aQute.bnd.annotation/%{version}/biz.aQute.bnd.annotation-%{version}.pom +Source7: https://repo1.maven.org/maven2/biz/aQute/bnd/biz.aQute.bnd.ant/%{version}/biz.aQute.bnd.ant-%{version}.pom +Source8: https://repo1.maven.org/maven2/biz/aQute/bnd/biz.aQute.bnd.util/%{version}/biz.aQute.bnd.util-%{version}.pom + +Patch1: 0001-Disable-removed-commands.patch +Patch2: 0002-Port-to-OSGI-7.0.0.patch +Patch3: 0003-Remove-unmet-dependencies.patch +Patch4: 0004-Port-to-OpenJDK-21.patch + +%if %{with bootstrap} +BuildRequires: javapackages-bootstrap +%else +BuildRequires: maven-local +BuildRequires: mvn(org.apache.ant:ant) +BuildRequires: mvn(org.codehaus.plexus:plexus-component-metadata) +BuildRequires: mvn(org.junit:junit-bom:pom:) +BuildRequires: mvn(org.osgi:osgi.annotation) +BuildRequires: mvn(org.osgi:osgi.cmpn) +BuildRequires: mvn(org.osgi:osgi.core) +BuildRequires: mvn(org.slf4j:slf4j-api) +BuildRequires: mvn(org.slf4j:slf4j-simple) +%endif +%if %{with bnd_maven_plugin} +BuildRequires: mvn(org.apache.maven.plugin-tools:maven-plugin-annotations) +BuildRequires: mvn(org.apache.maven.plugins:maven-plugin-plugin) +BuildRequires: mvn(org.apache.maven.plugins:maven-source-plugin) +BuildRequires: mvn(org.apache.maven.shared:maven-mapping) +BuildRequires: mvn(org.apache.maven:maven-artifact) +BuildRequires: mvn(org.apache.maven:maven-compat) +BuildRequires: mvn(org.apache.maven:maven-core) +BuildRequires: mvn(org.apache.maven:maven-plugin-api) +BuildRequires: mvn(org.eclipse.aether:aether-api) +BuildRequires: mvn(org.sonatype.plexus:plexus-build-api) +%endif + +# Explicit javapackages-tools requires since bnd script uses +# /usr/share/java-utils/java-functions +Requires: javapackages-tools + +%description +The bnd tool helps you create and diagnose OSGi bundles. +The key functions are: +- Show the manifest and JAR contents of a bundle +- Wrap a JAR so that it becomes a bundle +- Create a Bundle from a specification and a class path +- Verify the validity of the manifest entries +The tool is capable of acting as: +- Command line tool +- File format +- Directives +- Use of macros + +%package -n aqute-bndlib +Summary: BND library + +%description -n aqute-bndlib +%{summary}. + +%if %{with bnd_maven_plugin} +%package -n bnd-maven-plugin +Summary: BND Maven plugin + +%description -n bnd-maven-plugin +%{summary}. +%endif + +%package javadoc +Summary: Javadoc for %{name} + +%description javadoc +API documentation for %{name}. + +%prep +%setup -q + +%patch 1 -p1 +%patch 2 -p1 +%patch 3 -p1 +%patch 4 -p1 + +# the commands pull in more dependencies than we want (felix-resolver, jetty) +rm biz.aQute.bnd/src/aQute/bnd/main/{ExportReportCommand,MbrCommand,RemoteCommand,ReporterLogger,ResolveCommand,Shell}.java + +cp %SOURCE2 pom.xml +sed -i 's|${Bundle-Version}|%{version}|' biz.aQute.bndlib/src/aQute/bnd/osgi/bnd.info + +%if %{without bnd_maven_plugin} +%pom_disable_module maven +%endif + +# libg +pushd aQute.libg +cp -p %{SOURCE3} pom.xml +%pom_add_parent org.fedoraproject.xmvn.aqute-bnd:aggregator:any +%pom_add_dep org.osgi:osgi.cmpn +popd + +# bnd.annotation +pushd biz.aQute.bnd.annotation +cp -p %{SOURCE6} pom.xml +%pom_add_parent org.fedoraproject.xmvn.aqute-bnd:aggregator:any +%pom_add_dep org.osgi:osgi.core +%pom_add_dep org.osgi:osgi.cmpn +popd + +# bndlib +pushd biz.aQute.bndlib +cp -p %{SOURCE5} pom.xml +%pom_add_parent org.fedoraproject.xmvn.aqute-bnd:aggregator:any +%pom_add_dep org.osgi:osgi.cmpn +%pom_add_dep biz.aQute.bnd:aQute.libg:%{version} +%pom_add_dep biz.aQute.bnd:biz.aQute.bnd.annotation:%{version} +popd + +# bnd.ant +pushd biz.aQute.bnd.ant +cp -p %{SOURCE7} pom.xml +%pom_add_parent org.fedoraproject.xmvn.aqute-bnd:aggregator:any +popd + +# bnd +cp -r biz.aQute.bnd.exporters/src/aQute/bnd/exporter biz.aQute.bnd/src/aQute/bnd/ +pushd biz.aQute.bnd +cp -p %{SOURCE4} pom.xml +%pom_add_parent org.fedoraproject.xmvn.aqute-bnd:aggregator:any +%pom_remove_dep :biz.aQute.resolve +%pom_remove_dep :biz.aQute.repository +%pom_remove_dep :biz.aQute.bnd.exporters +%pom_remove_dep :biz.aQute.bnd.reporter +%pom_remove_dep :biz.aQute.remote.api +%pom_remove_dep :snakeyaml +%pom_remove_dep :jline +%pom_remove_dep org.osgi:org.osgi.service.coordinator +%pom_remove_dep org.osgi:org.osgi.service.resolver +popd + +# bnd.util +pushd biz.aQute.bnd.util +cp -p %{SOURCE8} pom.xml +%pom_add_parent org.fedoraproject.xmvn.aqute-bnd:aggregator:any +%pom_add_dep biz.aQute.bnd:aQute.libg:%{version} +popd + +%pom_remove_dep -r org.osgi:org.osgi.dto +%pom_remove_dep -r org.osgi:org.osgi.framework +%pom_remove_dep -r org.osgi:org.osgi.namespace.contract +%pom_remove_dep -r org.osgi:org.osgi.namespace.extender +%pom_remove_dep -r org.osgi:org.osgi.namespace.implementation +%pom_remove_dep -r org.osgi:org.osgi.namespace.service +%pom_remove_dep -r org.osgi:org.osgi.resource +%pom_remove_dep -r org.osgi:org.osgi.service.log +%pom_remove_dep -r org.osgi:org.osgi.service.repository +%pom_remove_dep -r org.osgi:org.osgi.service.serviceloader +%pom_remove_dep -r org.osgi:org.osgi.util.function +%pom_remove_dep -r org.osgi:org.osgi.util.promise +%pom_remove_dep -r org.osgi:org.osgi.util.tracker + +%pom_xpath_remove -r pom:project/pom:dependencies/pom:dependency/pom:scope + +# maven-plugins +cp -r biz.aQute.bnd.maven/src/aQute/bnd/maven/lib/configuration maven/bnd-maven-plugin/src/main/java/aQute/bnd/maven/lib +cp -r biz.aQute.bnd.maven/src/aQute/bnd/maven/lib/executions maven/bnd-maven-plugin/src/main/java/aQute/bnd/maven/lib +pushd maven +%pom_remove_dep -r :biz.aQute.bnd.maven +# Unavailable reactor dependency - org.osgi.impl.bundle.repoindex.cli +%pom_disable_module bnd-indexer-maven-plugin +# Requires unbuilt parts of bnd +%pom_disable_module bnd-export-maven-plugin +%pom_disable_module bnd-reporter-maven-plugin +%pom_disable_module bnd-resolver-maven-plugin +%pom_disable_module bnd-run-maven-plugin +%pom_disable_module bnd-testing-maven-plugin +# Integration tests require Internet access +%pom_remove_plugin -r :maven-invoker-plugin +%pom_remove_plugin -r :maven-javadoc-plugin + +%pom_remove_plugin -r :flatten-maven-plugin +popd + +%mvn_alias biz.aQute.bnd:biz.aQute.bnd :bnd biz.aQute:bnd +%mvn_alias biz.aQute.bnd:biz.aQute.bndlib :bndlib biz.aQute:bndlib + +%mvn_package biz.aQute.bnd:biz.aQute.bndlib bndlib +%mvn_package biz.aQute.bnd:biz.aQute.bnd.annotation bndlib +%mvn_package biz.aQute.bnd:aQute.libg bndlib +%mvn_package org.fedoraproject.xmvn.aqute-bnd:aggregator __noinstall +%mvn_package biz.aQute.bnd:bnd-plugin-parent __noinstall +%if %{with bnd_maven_plugin} +%mvn_package biz.aQute.bnd:bnd-maven-plugin maven +%mvn_package biz.aQute.bnd:bnd-baseline-maven-plugin maven +%endif + +%build +%mvn_build + +%install +%mvn_install + +install -d -m 755 %{buildroot}%{_sysconfdir}/ant.d +echo "aqute-bnd slf4j/api slf4j/simple osgi-annotation osgi-core osgi-compendium" >%{buildroot}%{_sysconfdir}/ant.d/%{name} + +%jpackage_script aQute.bnd.main.bnd "" "" aqute-bnd:slf4j/slf4j-api:slf4j/slf4j-simple:osgi-annotation:osgi-core:osgi-compendium bnd 1 + +%files -f .mfiles +%license LICENSE +%{_bindir}/bnd +%config(noreplace) %{_sysconfdir}/ant.d/* + +%files -n aqute-bndlib -f .mfiles-bndlib +%license LICENSE + +%if %{with bnd_maven_plugin} +%files -n bnd-maven-plugin -f .mfiles-maven +%endif + +%files javadoc -f .mfiles-javadoc +%license LICENSE + +%changelog +* Fri Oct 25 2024 MSVSphere Packaging Team - 6.3.1-10 +- Rebuilt for MSVSphere 10 + +* Mon Aug 05 2024 Mikolaj Izdebski - 6.3.1-10 +- Port to OpenJDK 21 +- Resolves: RHEL-52710 + +* Thu Aug 01 2024 Troy Dawson - 6.3.1-9 +- Bump release for Aug 2024 java mass rebuild + +* Mon Jun 24 2024 Troy Dawson - 6.3.1-8 +- Bump release for June 2024 mass rebuild + +* Fri Jan 19 2024 Fedora Release Engineering - 6.3.1-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Fri Sep 01 2023 Mikolaj Izdebski - 6.3.1-6 +- Convert License tag to SPDX format + +* Wed Jul 19 2023 Fedora Release Engineering - 6.3.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Wed Jun 07 2023 Mikolaj Izdebski - 6.3.1-4 +- Conditionally disable bnd-maven-plugin + +* Wed Jan 18 2023 Fedora Release Engineering - 6.3.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Tue Nov 08 2022 Stephen Gallagher - 6.3.1-2 +- Re-enable maven plugin for RHEL 10+ + +* Wed Sep 07 2022 Marian Koncek - 6.3.1-1 +- Update to upstream version 6.3.1 + +* Wed Jul 20 2022 Fedora Release Engineering - 6.2.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Tue May 03 2022 Marian Koncek - 6.2.0-1 +- Update to upstream version 6.2.0 + +* Sat Feb 05 2022 Jiri Vanek - 5.2.0-9 +- Rebuilt for java-17-openjdk as system jdk + +* Wed Jan 19 2022 Fedora Release Engineering - 5.2.0-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Mon Nov 22 2021 Didik Supriadi - 5.2.0-7 +- Enable biz.aQute.bnd.ant + +* Fri Sep 24 2021 Mikolaj Izdebski - 5.2.0-6 +- Rename maven_plugin build conditional to bnd_maven_plugin + +* Tue Aug 10 2021 Sérgio Basto - 5.2.0-5 +- reenable bnd-maven-plugin + +* Mon Aug 02 2021 Mattias Ellert - 5.2.0-4 +- Add parent to biz.aQute.bnd/pom.xml (fixes [WARNING] JAR will be + empty - no content was marked for inclusion!) +- Remove scope from dependencies in pom.xml files (fixes missing + dependencies, dependencies marked with scope provided are ignored by + the rpm dependency generator) +- Drop some more commands: shell, exportreport, mbr (uses parts that + are not packaged) +- Resolves: rhbz#1985566 + +* Wed Jul 21 2021 Fedora Release Engineering - 5.2.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Mon May 17 2021 Mikolaj Izdebski - 5.2.0-2 +- Bootstrap build +- Non-bootstrap build + +* Tue Jan 26 2021 Fedora Release Engineering - 4.3.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Wed Jan 20 2021 Marian Koncek - 5.2.0-1 +- Update to upstream version 5.2.0 + +* Mon Dec 14 2020 Jerry James - 4.3.1-3 +- Update jansi path for jansi 1.x and jline path for jline 2.x + +* Wed Nov 25 2020 Mat Booth - 4.3.1-2 +- Add OSGi metadata + +* Tue Sep 29 2020 Marian Koncek - 5.1.2-1 +- Update to upstream version 5.1.2 + +* Tue Jul 28 2020 Mat Booth - 4.3.1-1 +- Update to latest 4.x release + +* Mon Jul 27 2020 Mat Booth - 4.3.0-1 +- Update to upstream version 4.3.0 + +* Mon Jul 27 2020 Fedora Release Engineering - 3.5.0-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Tue Jul 21 2020 Mat Booth - 3.5.0-10 +- Fix NIO linkage error when running on Java 8 due to incorrect cross-compilation + +* Fri Jul 10 2020 Jiri Vanek - 3.5.0-9 +- Rebuilt for JDK-11, see https://fedoraproject.org/wiki/Changes/Java11 + +* Tue Jun 23 2020 Marian Koncek - 5.1.1-1 +- Update to upstream version 5.1.1 + +* Fri Apr 24 2020 Mikolaj Izdebski - 5.0.0-2 +- Disable bnd-maven-plugin + +* Wed Jan 29 2020 Marian Koncek - 5.0.0-1 +- Update to upstream version 5.0.0 + +* Tue Jan 28 2020 Fedora Release Engineering - 3.5.0-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Tue Nov 05 2019 Mikolaj Izdebski - 4.3.0-2 +- Mass rebuild for javapackages-tools 201902 + +* Wed Oct 09 2019 Marian Koncek - 4.3.0-1 +- Update to upstream version 4.3.0 + +* Wed Jul 24 2019 Fedora Release Engineering - 3.5.0-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Thu Jul 04 2019 Marian Koncek - 4.2.0-1 +- Update to upstream version 4.2.0 + +* Fri May 24 2019 Mikolaj Izdebski - 3.5.0-6 +- Mass rebuild for javapackages-tools 201901 + +* Fri Apr 12 2019 Marian Koncek - 3.5.0-6 +- Port to OSGI 7.0.0 + +* Fri Apr 12 2019 Marian Koncek - 3.5.0-5 +- Port to OSGI 7.0.0 + +* Thu Jan 31 2019 Fedora Release Engineering - 3.5.0-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Mon Jul 30 2018 Severin Gehwolf - 3.5.0-4 +- Add requirement on javapackages-tools for bnd script. + +* Thu Jul 12 2018 Fedora Release Engineering - 3.5.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Wed Feb 07 2018 Fedora Release Engineering - 3.5.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Fri Oct 13 2017 Michael Simacek - 3.5.0-1 +- Update to upstream version 3.5.0 + +* Mon Oct 02 2017 Troy Dawson - 3.4.0-3 +- Cleanup spec file conditionals + +* Sat Sep 23 2017 Mikolaj Izdebski - 3.4.0-2 +- Remove unneeded javadoc plugin + +* Tue Sep 12 2017 Michael Simacek - 3.4.0-1 +- Update to upstream version 3.4.0 + +* Wed Jul 26 2017 Fedora Release Engineering - 3.3.0-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Fri Feb 10 2017 Fedora Release Engineering - 3.3.0-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Mon Oct 10 2016 Mikolaj Izdebski - 3.3.0-5 +- Don't use legacy Ant artifact coordinates + +* Mon Oct 10 2016 Mikolaj Izdebski - 3.3.0-4 +- Allow conditional builds without Ant tasks + +* Mon Oct 10 2016 Mikolaj Izdebski - 3.3.0-3 +- Allow conditional builds without Maven plugin + +* Thu Oct 06 2016 Michael Simacek - 3.3.0-2 +- Fix ant.d classpath + +* Thu Sep 29 2016 Michael Simacek - 3.3.0-1 +- Update to upstream version 3.3.0 +- Build against osgi-{core,compendium} + +* Tue Sep 27 2016 Mikolaj Izdebski - 3.2.0-5 +- Add felix-scr-annotations to classpath + +* Mon Sep 26 2016 Michael Simacek - 3.2.0-4 +- Use felix-annotations + +* Wed Sep 14 2016 Mikolaj Izdebski - 3.2.0-3 +- Build and install Maven plugins +- Resolves: rhbz#1375904 + +* Wed Jun 1 2016 Mikolaj Izdebski - 3.2.0-2 +- Install ant.d config files + +* Tue May 24 2016 Michael Simacek - 3.2.0-1 +- Update to upstream version 3.2.0 + +* Wed Feb 03 2016 Fedora Release Engineering - 2.4.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Fri Jul 17 2015 Michael Simacek - 2.4.1-2 +- Fix Tool header generation + +* Wed Jul 08 2015 Michael Simacek - 2.4.1-1 +- Update to upstream version 2.4.1 + +* Wed Jun 17 2015 Fedora Release Engineering - 0.0.363-16 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Thu May 14 2015 Mikolaj Izdebski - 0.0.363-15 +- Disable javadoc doclint + +* Sat Jun 07 2014 Fedora Release Engineering - 0.0.363-14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Thu May 29 2014 Mikolaj Izdebski - 0.0.363-13 +- Use .mfiles generated during build + +* Fri May 09 2014 Jaromir Capik - 0.0.363-12 +- Fixing ambiguous base64 class + +* Fri May 09 2014 Gil Cattaneo 0.0.363-11 +- fix rhbz#991985 +- add source compatibility with ant 1.9 +- remove and rebuild from source aQute.runtime.jar +- update to current packaging guidelines + +* Tue Mar 04 2014 Stanislav Ochotnicky - 0.0.363-10 +- Use Requires: java-headless rebuild (#1067528) + +* Sat Aug 03 2013 Fedora Release Engineering - 0.0.363-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Wed Feb 13 2013 Fedora Release Engineering - 0.0.363-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Wed Jul 18 2012 Fedora Release Engineering - 0.0.363-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Wed Apr 25 2012 Stanislav Ochotnicky - 0.0.363-6 +- Get rid of unusable eclipse plugins to simplify dependencies + +* Fri Mar 02 2012 Jaromir Capik - 0.0.363-5 +- Fixing build failures on f16 and later + +* Thu Jan 12 2012 Fedora Release Engineering - 0.0.363-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Thu Sep 22 2011 Jaromir Capik - 0.0.363-3 +- Resurrection of bundled non-class files + +* Thu Sep 22 2011 Jaromir Capik - 0.0.363-2 +- Bundled classes removed +- jpackage-utils dependency added to the javadoc subpackage + +* Wed Sep 21 2011 Jaromir Capik - 0.0.363-1 +- Initial version (cloned from aqute-bndlib 0.0.363)