You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by dj...@apache.org on 2011/03/19 00:29:46 UTC
svn commit: r1083108 - in /karaf/trunk:
assemblies/features/framework/src/main/filtered-resources/resources/etc/
main/src/main/java/org/apache/karaf/main/
tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/
Author: djencks
Date: Fri Mar 18 23:29:46 2011
New Revision: 1083108
URL: http://svn.apache.org/viewvc?rev=1083108&view=rev
Log:
KARAF-523 use mvn: style maven ids by default and add comments into startup.properties
Modified:
karaf/trunk/assemblies/features/framework/src/main/filtered-resources/resources/etc/startup.properties
karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java
karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java
Modified: karaf/trunk/assemblies/features/framework/src/main/filtered-resources/resources/etc/startup.properties
URL: http://svn.apache.org/viewvc/karaf/trunk/assemblies/features/framework/src/main/filtered-resources/resources/etc/startup.properties?rev=1083108&r1=1083107&r2=1083108&view=diff
==============================================================================
--- karaf/trunk/assemblies/features/framework/src/main/filtered-resources/resources/etc/startup.properties (original)
+++ karaf/trunk/assemblies/features/framework/src/main/filtered-resources/resources/etc/startup.properties Fri Mar 18 23:29:46 2011
@@ -23,53 +23,53 @@
#
# Startup core services like logging
#
-org.ops4j.pax.url\:pax-url-mvn\:${pax.url.version}=5
-org.ops4j.pax.url\:pax-url-wrap\:${pax.url.version}=5
-org.ops4j.pax.logging\:pax-logging-api\:${pax.logging.version}=8
-org.ops4j.pax.logging\:pax-logging-service\:${pax.logging.version}=8
-org.apache.felix\:org.apache.felix.configadmin\:${felix.configadmin.version}=10
-org.apache.felix\:org.apache.felix.fileinstall\:${felix.fileinstall.version}=11
+mvn\:org.ops4j.pax.url/pax-url-mvn/${pax.url.version}=5
+mvn\:org.ops4j.pax.url/pax-url-wrap/${pax.url.version}=5
+mvn\:org.ops4j.pax.logging/pax-logging-api/${pax.logging.version}=8
+mvn\:org.ops4j.pax.logging/pax-logging-service/${pax.logging.version}=8
+mvn\:org.apache.felix/org.apache.felix.configadmin/${felix.configadmin.version}=10
+mvn\:org.apache.felix/org.apache.felix.fileinstall/${felix.fileinstall.version}=11
#
# The rest of the services..
#
-org.apache.servicemix.bundles\:org.apache.servicemix.bundles.asm\:${asm.bundle.version}=20
-org.apache.aries\:org.apache.aries.util\:${aries.util.version}=20
-org.apache.aries.proxy\:org.apache.aries.proxy\:${aries.proxy.version}=20
-org.apache.aries.blueprint\:org.apache.aries.blueprint\:${aries.blueprint.version}=20
-
-org.apache.karaf.shell\:org.apache.karaf.shell.console\:${project.version}=30
-org.apache.karaf.shell\:org.apache.karaf.shell.osgi\:${project.version}=30
-org.apache.karaf.shell\:org.apache.karaf.shell.log\:${project.version}=30
-org.apache.karaf.shell\:org.apache.karaf.shell.packages\:${project.version}=30
-org.apache.karaf.shell\:org.apache.karaf.shell.commands\:${project.version}=30
-org.apache.karaf.shell\:org.apache.karaf.shell.dev\:${project.version}=30
-org.apache.karaf.jaas\:org.apache.karaf.jaas.config\:${project.version}=30
-org.apache.karaf.jaas\:org.apache.karaf.jaas.modules\:${project.version}=30
-org.apache.karaf.jaas\:org.apache.karaf.jaas.command\:${project.version}=30
-org.apache.karaf.features\:org.apache.karaf.features.core\:${project.version}=30
-org.apache.karaf.features\:org.apache.karaf.features.command\:${project.version}=30
-org.apache.karaf.features\:org.apache.karaf.features.management\:${project.version}=30
-
-org.apache.karaf.diagnostic\:org.apache.karaf.diagnostic.core\:${project.version}=30
-org.apache.karaf.diagnostic\:org.apache.karaf.diagnostic.common\:${project.version}=30
-org.apache.karaf.diagnostic\:org.apache.karaf.diagnostic.command\:${project.version}=30
-org.apache.karaf.diagnostic\:org.apache.karaf.diagnostic.management\:${project.version}=30
-
-org.apache.karaf\:org.apache.karaf.management\:${project.version}=30
-org.apache.aries.jmx\:org.apache.aries.jmx\:${aries.jmx.version}=30
-org.apache.aries.jmx\:org.apache.aries.jmx.blueprint\:${aries.jmx.version}=30
-
-org.apache.karaf.admin\:org.apache.karaf.admin.core\:${project.version}=30
-org.apache.karaf.admin\:org.apache.karaf.admin.command\:${project.version}=30
-org.apache.karaf.admin\:org.apache.karaf.admin.management\:${project.version}=30
-
-org.apache.mina\:mina-core\:${mina.version}=30
-org.apache.sshd\:sshd-core\:${sshd.version}=30
-org.apache.karaf.shell\:org.apache.karaf.shell.ssh\:${project.version}=30
-
-org.apache.karaf.deployer\:org.apache.karaf.deployer.spring\:${project.version}=30
-org.apache.karaf.deployer\:org.apache.karaf.deployer.blueprint\:${project.version}=30
-org.apache.karaf.deployer\:org.apache.karaf.deployer.features\:${project.version}=30
-org.apache.karaf.deployer\:org.apache.karaf.deployer.kar\:${project.version}=30
-org.apache.karaf.deployer\:org.apache.karaf.deployer.wrap\:${project.version}=30
+mvn\:org.apache.servicemix.bundles/org.apache.servicemix.bundles.asm/${asm.bundle.version}=20
+mvn\:org.apache.aries/org.apache.aries.util/${aries.util.version}=20
+mvn\:org.apache.aries.proxy/org.apache.aries.proxy/${aries.proxy.version}=20
+mvn\:org.apache.aries.blueprint/org.apache.aries.blueprint/${aries.blueprint.version}=20
+
+mvn\:org.apache.karaf.shell/org.apache.karaf.shell.console/${project.version}=30
+mvn\:org.apache.karaf.shell/org.apache.karaf.shell.osgi/${project.version}=30
+mvn\:org.apache.karaf.shell/org.apache.karaf.shell.log/${project.version}=30
+mvn\:org.apache.karaf.shell/org.apache.karaf.shell.packages/${project.version}=30
+mvn\:org.apache.karaf.shell/org.apache.karaf.shell.commands/${project.version}=30
+mvn\:org.apache.karaf.shell/org.apache.karaf.shell.dev/${project.version}=30
+mvn\:org.apache.karaf.jaas/org.apache.karaf.jaas.config/${project.version}=30
+mvn\:org.apache.karaf.jaas/org.apache.karaf.jaas.modules/${project.version}=30
+mvn\:org.apache.karaf.jaas/org.apache.karaf.jaas.command/${project.version}=30
+mvn\:org.apache.karaf.features/org.apache.karaf.features.core/${project.version}=30
+mvn\:org.apache.karaf.features/org.apache.karaf.features.command/${project.version}=30
+mvn\:org.apache.karaf.features/org.apache.karaf.features.management/${project.version}=30
+
+mvn\:org.apache.karaf.diagnostic/org.apache.karaf.diagnostic.core/${project.version}=30
+mvn\:org.apache.karaf.diagnostic/org.apache.karaf.diagnostic.common/${project.version}=30
+mvn\:org.apache.karaf.diagnostic/org.apache.karaf.diagnostic.command/${project.version}=30
+mvn\:org.apache.karaf.diagnostic/org.apache.karaf.diagnostic.management/${project.version}=30
+
+mvn\:org.apache.karaf/org.apache.karaf.management/${project.version}=30
+mvn\:org.apache.aries.jmx/org.apache.aries.jmx/${aries.jmx.version}=30
+mvn\:org.apache.aries.jmx/org.apache.aries.jmx.blueprint/${aries.jmx.version}=30
+
+mvn\:org.apache.karaf.admin/org.apache.karaf.admin.core/${project.version}=30
+mvn\:org.apache.karaf.admin/org.apache.karaf.admin.command/${project.version}=30
+mvn\:org.apache.karaf.admin/org.apache.karaf.admin.management/${project.version}=30
+
+mvn\:org.apache.mina/mina-core/${mina.version}=30
+mvn\:org.apache.sshd/sshd-core/${sshd.version}=30
+mvn\:org.apache.karaf.shell/org.apache.karaf.shell.ssh/${project.version}=30
+
+mvn\:org.apache.karaf.deployer/org.apache.karaf.deployer.spring/${project.version}=30
+mvn\:org.apache.karaf.deployer/org.apache.karaf.deployer.blueprint/${project.version}=30
+mvn\:org.apache.karaf.deployer/org.apache.karaf.deployer.features/${project.version}=30
+mvn\:org.apache.karaf.deployer/org.apache.karaf.deployer.kar/${project.version}=30
+mvn\:org.apache.karaf.deployer/org.apache.karaf.deployer.wrap/${project.version}=30
Modified: karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java
URL: http://svn.apache.org/viewvc/karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java?rev=1083108&r1=1083107&r2=1083108&view=diff
==============================================================================
--- karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java (original)
+++ karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java Fri Mar 18 23:29:46 2011
@@ -1064,9 +1064,7 @@ public class Main {
}
private static File findFile(File dir, String name) {
- if (name.indexOf(':') > -1) {
- name = fromMaven(name);
- }
+ name = fromMaven(name);
File theFile = new File(dir, name);
if (theFile.exists() && !theFile.isDirectory()) {
@@ -1075,22 +1073,40 @@ public class Main {
return null;
}
+ /**
+ * Returns a path for an srtifact.
+ * Input: path (no ':') returns path
+ * Input: mvn:<groupId>/<artifactId>/<version>/<type>/<classifier> converts to default repo location path
+ * Input: <groupId>:<artifactId>:<version>:<type>:<classifier> converts to default repo location path
+ * type and classifier are optional.
+ *
+ *
+ * @param name input artifact info
+ * @return path as supplied or a default maven repo path
+ */
private static String fromMaven(String name) {
- String[] bits = name.split(":");
- StringBuilder b = new StringBuilder(bits[0]);
+ if (name.indexOf(':') == -1) {
+ return name;
+ }
+ int firstBit = 0;
+ if (name.startsWith("mvn:")) {
+ firstBit = 1;
+ }
+ String[] bits = name.split("[:/]");
+ StringBuilder b = new StringBuilder(bits[firstBit]);
for (int i = 0; i < b.length(); i++) {
if (b.charAt(i) == '.') {
b.setCharAt(i, '/');
}
}
- b.append('/').append(bits[1]); //artifactId
- b.append('/').append(bits[2]);//version
- b.append('/').append(bits[1]).append('-').append(bits[2]);
- if (bits.length == 5) {
- b.append('-').append(bits[4]); //classifier
+ b.append('/').append(bits[firstBit + 1]); //artifactId
+ b.append('/').append(bits[firstBit + 2]); //version
+ b.append('/').append(bits[firstBit + 1]).append('-').append(bits[firstBit + 2]);
+ if (bits.length == firstBit + 5 && !bits[firstBit + 4].isEmpty()) {
+ b.append('-').append(bits[firstBit + 4]); //classifier
}
- if (bits.length >=4) {
- b.append('.').append(bits[3]);
+ if (bits.length >= firstBit + 4 && !bits[firstBit + 3].isEmpty()) {
+ b.append('.').append(bits[firstBit + 3]);
} else {
b.append(".jar");
}
Modified: karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java
URL: http://svn.apache.org/viewvc/karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java?rev=1083108&r1=1083107&r2=1083108&view=diff
==============================================================================
--- karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java (original)
+++ karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java Fri Mar 18 23:29:46 2011
@@ -25,11 +25,14 @@ import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
+import java.lang.reflect.Field;
import java.net.URI;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.EnumSet;
-import java.util.LinkedHashMap;
+import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -42,9 +45,6 @@ import org.apache.karaf.features.interna
import org.apache.karaf.features.internal.model.Feature;
import org.apache.karaf.features.internal.model.JaxbUtil;
import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.DefaultArtifactRepository;
-import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
@@ -168,7 +168,7 @@ public class InstallKarsMojo extends Moj
}
} else {
getLog().info("Installing feature to system and startup.properties");
- Properties startupProperties = new Properties();
+ CommentProperties startupProperties = new CommentProperties();
if (startupPropertiesFile.exists()) {
InputStream in = new FileInputStream(startupPropertiesFile);
try {
@@ -195,6 +195,7 @@ public class InstallKarsMojo extends Moj
in.close();
}
for (Feature feature: features.getFeature()) {
+ List<String> comment = Arrays.asList(new String[] {"", "# feature: " + feature.getName() + " version: " + feature.getVersion()});
for (Bundle bundle: feature.getBundle()) {
String location = bundle.getLocation();
String startLevel = Integer.toString(bundle.getStartLevel());
@@ -203,9 +204,21 @@ public class InstallKarsMojo extends Moj
// getLog().warn("bad bundle: " + location);
// } else {
// Artifact bundleArtifact = factory.createArtifact(bits[1], bits[2], bits[3], null, bits.length == 4? "jar": bits[4]);
- String bundlePath = location.startsWith("mvn:")? location.substring("mvn:".length()).replaceAll("/", ":"): location;
+// String bundlePath = location.startsWith("mvn:")? location.substring("mvn:".length()).replaceAll("/", ":"): location;
//layout.pathOf(bundleArtifact);
- startupProperties.put(bundlePath, startLevel);
+ if (startupProperties.containsKey(location)) {
+ int oldStartLevel = Integer.decode(startupProperties.get(location));
+ if (oldStartLevel > bundle.getStartLevel()) {
+ startupProperties.put(location, startLevel);
+ }
+ } else {
+ if (comment == null) {
+ startupProperties.put(location, startLevel);
+ } else {
+ startupProperties.put(location, comment, startLevel);
+ comment = null;
+ }
+ }
}
}
@@ -271,4 +284,108 @@ public class InstallKarsMojo extends Moj
}
}
+ // when FELIX-2887 is ready we can use plain Properties again
+ private static class CommentProperties extends Properties {
+
+ private Map<String, Layout> layout;
+ private Map<String, String> storage;
+
+ public CommentProperties() {
+ this.layout = (Map<String, Layout>) getField("layout");
+ storage = (Map<String, String>) getField("storage");
+ }
+
+ private Object getField(String fieldName) {
+ try {
+ Field l = Properties.class.getDeclaredField(fieldName);
+ boolean old = l.isAccessible();
+ l.setAccessible(true);
+ Object layout = l.get(this);
+ l.setAccessible(old);
+ return layout;
+ } catch (Exception e) {
+ throw new RuntimeException("Could not access field " + fieldName, e);
+ }
+ }
+
+ public String put(String key, List<String> commentLines, List<String> valueLines) {
+ commentLines = new ArrayList<String>(commentLines);
+ valueLines = new ArrayList<String>(valueLines);
+ String escapedKey = escapeKey(key);
+ int lastLine = valueLines.size() - 1;
+ if (valueLines.isEmpty()) {
+ valueLines.add(escapedKey + "=");
+ } else if (!valueLines.get(0).trim().startsWith(escapedKey)) {
+ valueLines.set(0, escapedKey + " = " + escapeJava(valueLines.get(0)) + (0 < lastLine? "\\": ""));
+ }
+ for (int i = 1; i < valueLines.size(); i++) {
+ valueLines.set(i, escapeJava(valueLines.get(i)) + (i < lastLine? "\\": ""));
+ }
+ StringBuilder value = new StringBuilder();
+ for (String line: valueLines) {
+ value.append(line);
+ }
+ this.layout.put(key, new Layout(commentLines, valueLines));
+ return storage.put(key, unescapeJava(value.toString()));
+ }
+
+ public String put(String key, List<String> commentLines, String value) {
+ commentLines = new ArrayList<String>(commentLines);
+ this.layout.put(key, new Layout(commentLines, null));
+ return storage.put(key, value);
+ }
+
+ public String put(String key, String comment, String value) {
+ return put(key, Collections.singletonList(comment), value);
+ }
+
+ public List<String> getRaw(String key) {
+ if (layout.containsKey(key)) {
+ if (layout.get(key).getValueLines() != null) {
+ return new ArrayList<String>(layout.get(key).getValueLines());
+ }
+ }
+ List<String> result = new ArrayList<String>();
+ if (storage.containsKey(key)) {
+ result.add(storage.get(key));
+ }
+ return result;
+ }
+
+ /** The list of possible key/value separators */
+ private static final char[] SEPARATORS = new char[] {'=', ':'};
+
+ /** The white space characters used as key/value separators. */
+ private static final char[] WHITE_SPACE = new char[] {' ', '\t', '\f'};
+ /**
+ * Escape the separators in the key.
+ *
+ * @param key the key
+ * @return the escaped key
+ */
+ private static String escapeKey(String key)
+ {
+ StringBuffer newkey = new StringBuffer();
+
+ for (int i = 0; i < key.length(); i++)
+ {
+ char c = key.charAt(i);
+
+ if (contains(SEPARATORS, c) || contains(WHITE_SPACE, c))
+ {
+ // escape the separator
+ newkey.append('\\');
+ newkey.append(c);
+ }
+ else
+ {
+ newkey.append(c);
+ }
+ }
+
+ return newkey.toString();
+ }
+
+ }
+
}