import static org.argeo.build.Repackage.ManifestHeader.ECLIPSE_SOURCE_BUNDLE;
import static org.argeo.build.Repackage.ManifestHeader.EXPORT_PACKAGE;
import static org.argeo.build.Repackage.ManifestHeader.IMPORT_PACKAGE;
+import static org.argeo.build.Repackage.ManifestHeader.REQUIRE_CAPABILITY;
//import static org.argeo.build.Repackage.ManifestHeader.REQUIRE_BUNDLE;
import static org.argeo.build.Repackage.ManifestHeader.SPDX_LICENSE_IDENTIFIER;
EXPORT_PACKAGE("Export-Package"), //
/** OSGi imported packages list. */
IMPORT_PACKAGE("Import-Package"), //
+ /** Require capability. */
+ REQUIRE_CAPABILITY("Require-Capability"), //
// /** OSGi required bundles. */
// REQUIRE_BUNDLE("Require-Bundle"), //
// /** OSGi path to embedded jar. */
void processCategory(Path categoryRelativePath) {
try {
Path targetCategoryBase = descriptorsBase.resolve(categoryRelativePath);
- DirectoryStream<Path> bnds = Files.newDirectoryStream(targetCategoryBase,
+ try (DirectoryStream<Path> bnds = Files.newDirectoryStream(targetCategoryBase,
(p) -> p.getFileName().toString().endsWith(".bnd") && !p.getFileName().toString().equals(COMMON_BND)
- && !p.getFileName().toString().equals(MERGE_BND));
- for (Path p : bnds) {
- processSingleM2ArtifactDistributionUnit(p);
+ && !p.getFileName().toString().equals(MERGE_BND))) {
+ for (Path p : bnds) {
+ processSingleM2ArtifactDistributionUnit(p);
+ }
}
- DirectoryStream<Path> dus = Files.newDirectoryStream(targetCategoryBase, (p) -> Files.isDirectory(p));
- for (Path duDir : dus) {
- if (duDir.getFileName().toString().startsWith("eclipse-")) {
- processEclipseArchive(duDir);
- } else {
- processM2BasedDistributionUnit(duDir);
+ try (DirectoryStream<Path> dus = Files.newDirectoryStream(targetCategoryBase,
+ (p) -> Files.isDirectory(p))) {
+ for (Path duDir : dus) {
+ if (duDir.getFileName().toString().startsWith("eclipse-")) {
+ processEclipseArchive(duDir);
+ } else {
+ processM2BasedDistributionUnit(duDir);
+ }
}
}
} catch (IOException e) {
}
m2Version = m2Version.substring(1);
- DirectoryStream<Path> ds = Files.newDirectoryStream(duDir,
+ try (DirectoryStream<Path> ds = Files.newDirectoryStream(duDir,
(p) -> p.getFileName().toString().endsWith(".bnd") && !p.getFileName().toString().equals(COMMON_BND)
- && !p.getFileName().toString().equals(MERGE_BND));
- for (Path p : ds) {
- Properties fileProps = new Properties();
- try (InputStream in = Files.newInputStream(p)) {
- fileProps.load(in);
- }
- String m2Coordinates = fileProps.getProperty(ARGEO_ORIGIN_M2.toString());
- M2Artifact artifact = new M2Artifact(m2Coordinates);
- if (artifact.getVersion() == null) {
- artifact.setVersion(m2Version);
- } else {
- logger.log(DEBUG, p.getFileName() + " : Using version " + artifact.getVersion()
- + " specified in descriptor rather than " + m2Version + " specified in " + COMMON_BND);
- }
-
- // prepare manifest entries
- Properties mergedProps = new Properties();
- mergedProps.putAll(commonProps);
+ && !p.getFileName().toString().equals(MERGE_BND))) {
+ for (Path p : ds) {
+ Properties fileProps = new Properties();
+ try (InputStream in = Files.newInputStream(p)) {
+ fileProps.load(in);
+ }
+ String m2Coordinates = fileProps.getProperty(ARGEO_ORIGIN_M2.toString());
+ M2Artifact artifact = new M2Artifact(m2Coordinates);
+ if (artifact.getVersion() == null) {
+ artifact.setVersion(m2Version);
+ } else {
+ logger.log(DEBUG, p.getFileName() + " : Using version " + artifact.getVersion()
+ + " specified in descriptor rather than " + m2Version + " specified in " + COMMON_BND);
+ }
- fileEntries: for (Object key : fileProps.keySet()) {
- if (ARGEO_ORIGIN_M2.toString().equals(key))
- continue fileEntries;
- String value = fileProps.getProperty(key.toString());
- Object previousValue = mergedProps.put(key.toString(), value);
- if (previousValue != null) {
- logger.log(WARNING,
- commonBnd + ": " + key + " was " + previousValue + ", overridden with " + value);
+ // prepare manifest entries
+ Properties mergedProps = new Properties();
+ mergedProps.putAll(commonProps);
+
+ fileEntries: for (Object key : fileProps.keySet()) {
+ if (ARGEO_ORIGIN_M2.toString().equals(key))
+ continue fileEntries;
+ String value = fileProps.getProperty(key.toString());
+ Object previousValue = mergedProps.put(key.toString(), value);
+ if (previousValue != null) {
+ logger.log(WARNING,
+ commonBnd + ": " + key + " was " + previousValue + ", overridden with " + value);
+ }
+ }
+ mergedProps.put(ARGEO_ORIGIN_M2.toString(), artifact.toM2Coordinates());
+ if (!mergedProps.containsKey(BUNDLE_SYMBOLICNAME.toString())) {
+ // use file name as symbolic name
+ String symbolicName = p.getFileName().toString();
+ symbolicName = symbolicName.substring(0, symbolicName.length() - ".bnd".length());
+ mergedProps.put(BUNDLE_SYMBOLICNAME.toString(), symbolicName);
}
- }
- mergedProps.put(ARGEO_ORIGIN_M2.toString(), artifact.toM2Coordinates());
- if (!mergedProps.containsKey(BUNDLE_SYMBOLICNAME.toString())) {
- // use file name as symbolic name
- String symbolicName = p.getFileName().toString();
- symbolicName = symbolicName.substring(0, symbolicName.length() - ".bnd".length());
- mergedProps.put(BUNDLE_SYMBOLICNAME.toString(), symbolicName);
- }
- // download
- Path downloaded = downloadMaven(mergedProps, artifact);
+ // download
+ Path downloaded = downloadMaven(mergedProps, artifact);
- boolean doNotModify = Boolean.parseBoolean(
- mergedProps.getOrDefault(ARGEO_ORIGIN_DO_NOT_MODIFY.toString(), "false").toString());
- if (doNotModify) {
- processNotModified(targetCategoryBase, downloaded, mergedProps, artifact);
- } else {
- A2Origin origin = new A2Origin();
- Path targetBundleDir = processBndJar(downloaded, targetCategoryBase, mergedProps, artifact, origin);
- downloadAndProcessM2Sources(mergedProps, artifact, targetBundleDir, false, false);
- createJar(targetBundleDir, origin);
+ boolean doNotModify = Boolean.parseBoolean(
+ mergedProps.getOrDefault(ARGEO_ORIGIN_DO_NOT_MODIFY.toString(), "false").toString());
+ if (doNotModify) {
+ processNotModified(targetCategoryBase, downloaded, mergedProps, artifact);
+ } else {
+ A2Origin origin = new A2Origin();
+ Path targetBundleDir = processBndJar(downloaded, targetCategoryBase, mergedProps, artifact,
+ origin);
+ downloadAndProcessM2Sources(mergedProps, artifact, targetBundleDir, false, false);
+ createJar(targetBundleDir, origin);
+ }
}
}
} catch (IOException e) {
case "Created-By":
continue keys;
}
- if ("Require-Capability".equals(key.toString())
+ if (REQUIRE_CAPABILITY.toString().equals(key.toString())
&& value.toString().equals("osgi.ee;filter:=\"(&(osgi.ee=JavaSE)(version=1.1))\"")) {
origin.deleted.add("MANIFEST header " + key);
continue keys;// hack for very old classes
case "Created-By":
continue keys;
}
- if ("Require-Capability".equals(key.toString())
+ if (REQUIRE_CAPABILITY.toString().equals(key.toString())
&& value.toString().equals("osgi.ee;filter:=\"(&(osgi.ee=JavaSE)(version=1.1))\"")) {
origin.deleted.add("MANIFEST header " + key);
continue keys;// !! hack for very old classes
}
});
- DirectoryStream<Path> dirs = Files.newDirectoryStream(targetCategoryBase, (p) -> Files.isDirectory(p)
- && p.getFileName().toString().indexOf('.') >= 0 && !p.getFileName().toString().endsWith(".src"));
- for (Path bundleDir : dirs) {
- A2Origin origin = origins.get(bundleDir);
- Objects.requireNonNull(origin, "No A2 origin found for " + bundleDir);
- createJar(bundleDir, origin);
+ try (DirectoryStream<Path> dirs = Files.newDirectoryStream(targetCategoryBase, (p) -> Files.isDirectory(p)
+ && p.getFileName().toString().indexOf('.') >= 0 && !p.getFileName().toString().endsWith(".src"))) {
+ for (Path bundleDir : dirs) {
+ A2Origin origin = origins.get(bundleDir);
+ Objects.requireNonNull(origin, "No A2 origin found for " + bundleDir);
+ createJar(bundleDir, origin);
+ }
}
} catch (IOException e) {
throw new RuntimeException("Cannot process " + duDir, e);
if (wasDifferent) {
if (SPDX_LICENSE_IDENTIFIER.toString().equals(key) && previousValue != null)
keepPrevious = true;
+ if (REQUIRE_CAPABILITY.toString().equals(key) && previousValue != null)
+ keepPrevious = true;
else if (BUNDLE_VERSION.toString().equals(key) && wasDifferent)
if (previousValue.equals(value + ".0")) // typically a Maven first release
keepPrevious = true;
}
// !! hack to remove unresolvable
- if (key.equals("Provide-Capability") || key.equals("Require-Capability"))
+ if (key.equals("Provide-Capability") || key.equals(REQUIRE_CAPABILITY.toString()))
if (nameVersion.getName().equals("osgi.core") || nameVersion.getName().equals("osgi.cmpn")) {
manifest.getMainAttributes().remove(key);
origin.deleted.add("MANIFEST header " + key);