You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by kw...@apache.org on 2020/11/09 18:03:15 UTC
[sling-slingfeature-maven-plugin] 01/01: SLING-9883 Export merged
provided capabilities in 'Provide-Capability' header
This is an automated email from the ASF dual-hosted git repository.
kwin pushed a commit to branch feature/merge-capabilities
in repository https://gitbox.apache.org/repos/asf/sling-slingfeature-maven-plugin.git
commit 36d7b0031983a89270e8e45378d3d9e70d25df3d
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Mon Nov 9 19:01:20 2020 +0100
SLING-9883 Export merged provided capabilities in 'Provide-Capability'
header
---
.../sling/feature/maven/mojos/ApisJarMojo.java | 33 ++++++++++++++++++++--
.../feature/maven/mojos/apis/ApisJarContext.java | 12 ++++++++
2 files changed, 42 insertions(+), 3 deletions(-)
diff --git a/src/main/java/org/apache/sling/feature/maven/mojos/ApisJarMojo.java b/src/main/java/org/apache/sling/feature/maven/mojos/ApisJarMojo.java
index a72625f..d16a178 100644
--- a/src/main/java/org/apache/sling/feature/maven/mojos/ApisJarMojo.java
+++ b/src/main/java/org/apache/sling/feature/maven/mojos/ApisJarMojo.java
@@ -872,6 +872,8 @@ public class ApisJarMojo extends AbstractIncludingFeatureMojo {
ApisUtil.buildJavadocClasspath(getLog(), repositorySystem, mavenSession, artifact.getId())
.forEach(ctx::addJavadocClasspath);
}
+
+ info.setProvidedCapabilities(getProvidedCapability(manifest));
}
}
}
@@ -1432,6 +1434,13 @@ public class ApisJarMojo extends AbstractIncludingFeatureMojo {
return exportPackages;
}
+ private Clause[] getProvidedCapability(final Manifest manifest) {
+ final String providedCapabilitiesHeader = manifest.getMainAttributes().getValue(Constants.PROVIDE_CAPABILITY);
+ final Clause[] providedCapabilities = Parser.parseHeader(providedCapabilitiesHeader);
+
+ return providedCapabilities;
+ }
+
/**
* Compute exports based on a single region
*
@@ -1494,7 +1503,7 @@ public class ApisJarMojo extends AbstractIncludingFeatureMojo {
return result;
}
- private String getApiExportClause(final ApiRegion region, final Collection<ArtifactInfo> infos) {
+ private String getApiExportClauses(final ApiRegion region, final Collection<ArtifactInfo> infos) {
final StringBuilder sb = new StringBuilder();
boolean first = true;
for (final ArtifactInfo info : infos) {
@@ -1510,6 +1519,24 @@ public class ApisJarMojo extends AbstractIncludingFeatureMojo {
return sb.toString();
}
+ private String getApiProvideCapabilityClauses(final ApiRegion region, final Collection<ArtifactInfo> infos) {
+ final StringBuilder sb = new StringBuilder();
+ boolean first = true;
+ for (final ArtifactInfo info : infos) {
+ // TODO: support regions
+ // TODO: check fo conflicts
+ for (final Clause clause : info.getProvidedCapabilities()) {
+ if (first) {
+ first = false;
+ } else {
+ sb.append(',');
+ }
+ sb.append(clause.toString());
+ }
+ }
+ return sb.toString();
+ }
+
private void addFileSets(final ApiRegion apiRegion,
final ArtifactType archiveType,
final Collection<ArtifactInfo> infos,
@@ -1670,7 +1697,7 @@ public class ApisJarMojo extends AbstractIncludingFeatureMojo {
if (archiveType == ArtifactType.APIS) {
// APIs need OSGi Manifest entry
String symbolicName = artifactName.replace('-', '.');
- archiveConfiguration.addManifestEntry("Export-Package", getApiExportClause(apiRegion, infos));
+ archiveConfiguration.addManifestEntry("Export-Package", getApiExportClauses(apiRegion, infos));
archiveConfiguration.addManifestEntry("Bundle-Description", project.getDescription());
archiveConfiguration.addManifestEntry("Bundle-Version", targetId.getOSGiVersion().toString());
archiveConfiguration.addManifestEntry("Bundle-ManifestVersion", "2");
@@ -1689,7 +1716,7 @@ public class ApisJarMojo extends AbstractIncludingFeatureMojo {
}
// add provide / require capability to make the jar unresolvable
- archiveConfiguration.addManifestEntry("Provide-Capability", "osgi.unresolvable");
+ archiveConfiguration.addManifestEntry(Constants.PROVIDE_CAPABILITY, getApiProvideCapabilityClauses(apiRegion, infos));
archiveConfiguration.addManifestEntry("Require-Capability", "osgi.unresolvable;filter:=\"(&(must.not.resolve=*)(!(must.not.resolve=*)))\",osgi.ee;filter:=\"(&(osgi.ee=JavaSE/compact2)(version=1.8))\"");
}
archiveConfiguration.addManifestEntry("Implementation-Version", targetId.getVersion());
diff --git a/src/main/java/org/apache/sling/feature/maven/mojos/apis/ApisJarContext.java b/src/main/java/org/apache/sling/feature/maven/mojos/apis/ApisJarContext.java
index d468fad..09c3fdb 100644
--- a/src/main/java/org/apache/sling/feature/maven/mojos/apis/ApisJarContext.java
+++ b/src/main/java/org/apache/sling/feature/maven/mojos/apis/ApisJarContext.java
@@ -21,6 +21,7 @@ import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
@@ -73,6 +74,8 @@ public class ApisJarContext {
private final Set<String> sources = new HashSet<>();
+ private Set<Clause> providedCapabilities;
+
public ArtifactInfo(final Artifact artifact) {
this.artifact = artifact;
}
@@ -207,6 +210,15 @@ public class ApisJarContext {
public Set<String> getSources() {
return this.sources;
}
+
+ public Set<Clause> getProvidedCapabilities() {
+ return providedCapabilities;
+ }
+
+ public void setProvidedCapabilities(Clause... providedCapabilities) {
+ this.providedCapabilities = new HashSet<Clause>(Arrays.asList(providedCapabilities));
+ }
+
}
private final ApisConfiguration config;