You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2015/01/13 10:39:56 UTC
[5/5] karaf git commit: Support karaf 2.4 installations and
conditional in startup features
Support karaf 2.4 installations and conditional in startup features
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/abf3e829
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/abf3e829
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/abf3e829
Branch: refs/heads/master
Commit: abf3e829c1eeba6871446e58da2fc98856439ff2
Parents: 5ab1c91
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Mon Jan 12 18:14:45 2015 +0100
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Mon Jan 12 18:14:45 2015 +0100
----------------------------------------------------------------------
.../karaf/tooling/features/InstallKarsMojo.java | 54 ++++++++++++++++++--
1 file changed, 50 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/abf3e829/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java
----------------------------------------------------------------------
diff --git a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java
index 8dee460..9210773 100644
--- a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java
+++ b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java
@@ -18,6 +18,8 @@
*/
package org.apache.karaf.tooling.features;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
@@ -174,6 +176,9 @@ public class InstallKarsMojo extends MojoSupport {
@Parameter
protected boolean installAllFeaturesByDefault = true;
+ @Parameter
+ protected boolean use24SyntaxForStartup = false;
+
// an access layer for available Aether implementation
protected DependencyHelper dependencyHelper;
@@ -383,6 +388,23 @@ public class InstallKarsMojo extends MojoSupport {
installConfig(config);
}
for (Conditional cond : feature.getConditional()) {
+ boolean doInstall = true;
+ for (Dependency dep : cond.getFeature()) {
+ if (!startupFeatures.contains(dep.getName())) {
+ doInstall = false;
+ break;
+ }
+ }
+ if (doInstall) {
+ for (Bundle bundleInfo : cond.getBundle()) {
+ String bundleLocation = bundleInfo.getLocation();
+ int bundleStartLevel = bundleInfo.getStartLevel() == 0 ? defaultStartLevel : bundleInfo.getStartLevel();
+ if (allStartupBundles.containsKey(bundleLocation)) {
+ bundleStartLevel = Math.min(bundleStartLevel, allStartupBundles.get(bundleLocation));
+ }
+ allStartupBundles.put(bundleLocation, bundleStartLevel);
+ }
+ }
for (Config config : cond.getConfig()) {
installConfig(config);
}
@@ -425,10 +447,13 @@ public class InstallKarsMojo extends MojoSupport {
for (Map.Entry<Integer, Set<String>> entry : invertedStartupBundles.entrySet()) {
String startLevel = Integer.toString(entry.getKey());
for (String location : new TreeSet<>(entry.getValue())) {
- location = installStartupArtifact(location, useReferenceUrls);
+ location = installStartupArtifact(location, useReferenceUrls || use24SyntaxForStartup);
if (location.startsWith("file:") && useReferenceUrls) {
location = "reference:" + location;
}
+ if (location.startsWith("file:") && use24SyntaxForStartup) {
+ location = location.substring("file:".length());
+ }
startupProperties.put(location, startLevel);
}
}
@@ -549,11 +574,32 @@ public class InstallKarsMojo extends MojoSupport {
// so keep the generated feature
if (!generated.getBundle().isEmpty()) {
File output = new File(workDirectory, "etc/" + rep.getName() + ".xml");
- try (FileOutputStream os = new FileOutputStream(output)) {
- JaxbUtil.marshal(rep, os);
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ JaxbUtil.marshal(rep, baos);
+ ByteArrayInputStream bais;
+ String repoUrl;
+ if (use24SyntaxForStartup) {
+ String str = baos.toString();
+ str = str.replace("http://karaf.apache.org/xmlns/features/v1.3.0", "http://karaf.apache.org/xmlns/features/v1.2.0");
+ str = str.replaceAll(" dependency=\".*?\"", "");
+ str = str.replaceAll(" prerequisite=\".*?\"", "");
+ for (Feature f : rep.getFeature()) {
+ for (Dependency d : f.getFeature()) {
+ if (d.isPrerequisite()) {
+ if (!startupEffective.getFeatures().contains(d.getName())) {
+ getLog().warn("Feature " + d.getName() + " is a prerequisite and should be installed as a startup feature."); }
+ }
+ }
+ }
+ bais = new ByteArrayInputStream(str.getBytes());
+ repoUrl = "file:etc/" + output.getName();
+ } else {
+ bais = new ByteArrayInputStream(baos.toByteArray());
+ repoUrl = "file:${karaf.home}/etc/" + output.getName();
}
+ Files.copy(bais, output.toPath());
Properties featuresProperties = new Properties(featuresCfgFile);
- featuresProperties.put(FEATURES_REPOSITORIES, "file:${karaf.home}/etc/" + output.getName());
+ featuresProperties.put(FEATURES_REPOSITORIES, repoUrl);
featuresProperties.put(FEATURES_BOOT, generated.getName());
featuresProperties.save();
}