diff options
author | Igor Fedorenko | 2011-08-05 10:20:11 +0000 |
---|---|---|
committer | Igor Fedorenko | 2011-08-05 10:20:11 +0000 |
commit | 59c6ce0dc0bacc7d26f3200ea4657a4ec039184f (patch) | |
tree | 3cc0eabbbe4c9c6895a1d138bdce99b15e7beb5b | |
parent | 497c8e48f288887e834c8c7c8c2c0313df703993 (diff) | |
download | m2e-core-59c6ce0dc0bacc7d26f3200ea4657a4ec039184f.tar.gz m2e-core-59c6ce0dc0bacc7d26f3200ea4657a4ec039184f.tar.xz m2e-core-59c6ce0dc0bacc7d26f3200ea4657a4ec039184f.zip |
Support equinox dev mode in embedded maven runtime
Signed-off-by: Igor Fedorenko <igor@ifedorenko.com>
-rw-r--r-- | org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenEmbeddedRuntime.java | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenEmbeddedRuntime.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenEmbeddedRuntime.java index 0aeec012..4dd2f4a6 100644 --- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenEmbeddedRuntime.java +++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenEmbeddedRuntime.java @@ -11,6 +11,7 @@ package org.eclipse.m2e.core.internal.embedder; +import java.io.File; import java.io.IOException; import java.net.URL; import java.util.ArrayList; @@ -34,6 +35,7 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.Platform; +import org.eclipse.osgi.internal.baseadaptor.DevClassPathHelper; import org.eclipse.osgi.service.resolver.BaseDescription; import org.eclipse.osgi.service.resolver.BundleDescription; import org.eclipse.osgi.service.resolver.ExportPackageDescription; @@ -178,12 +180,19 @@ public class MavenEmbeddedRuntime implements MavenRuntime { private void addBundleClasspathEntries(Set<String> entries, Bundle bundle) { log.debug("addBundleClasspathEntries(Bundle={})", bundle.toString()); - for(String cp : parseBundleClasspath(bundle)) { + + String[] cp; + if(DevClassPathHelper.inDevelopmentMode()) { + cp = DevClassPathHelper.getDevClassPath(bundle.getSymbolicName()); + } else { + cp = parseBundleClasspath(bundle); + } + for(String cpe : cp) { String entry; - if(".".equals(cp)) { + if(".".equals(cpe)) { entry = getNestedJarOrDir(bundle, "/"); } else { - entry = getNestedJarOrDir(bundle, cp); + entry = getNestedJarOrDir(bundle, cpe); } if(entry != null) { @@ -212,16 +221,25 @@ public class MavenEmbeddedRuntime implements MavenRuntime { } private String getNestedJarOrDir(Bundle bundle, String cp) { + // try embeded entries first URL url = bundle.getEntry(cp); - if(url == null) { - log.debug("Bundle {} does not have entry {}", bundle.toString(), cp); - return null; + if(url != null) { + try { + return FileLocator.toFileURL(url).getFile(); + } catch(IOException ex) { + log.warn("Could not get entry {} for bundle {}", new Object[] {cp, bundle.toString(), ex}); + } } - try { - return FileLocator.toFileURL(url).getFile(); - } catch(IOException ex) { - log.warn("Could not get entry {} for bundle {}", new Object[] {cp, bundle.toString(), ex}); + + // in development mode entries can be absolute paths outside of bundle basedir + if(DevClassPathHelper.inDevelopmentMode()) { + File file = new File(cp); + if(file.exists() && file.isAbsolute()) { + return file.getAbsolutePath(); + } } + + log.debug("Bundle {} does not have entry {}", bundle.toString(), cp); return null; } |