diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetDefinitionResolver.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetDefinitionResolver.java index 2d7d3b9..3084fff 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetDefinitionResolver.java +++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetDefinitionResolver.java @@ -24,6 +24,7 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.core.runtime.URIUtil; import org.eclipse.equinox.p2.core.IProvisioningAgent; import org.eclipse.equinox.p2.core.ProvisionException; import org.eclipse.equinox.p2.metadata.IInstallableUnit; @@ -100,8 +101,11 @@ public class TargetDefinitionResolver { List metadataRepositories = new ArrayList(); for (Repository repository : iuLocationDefinition.getRepositories()) { - artifactRepositories.add(repository.getLocation()); - metadataRepositories.add(loadRepository(repository)); + // We cannot resolve a non-file URI in local mode + if (System.getProperty("maven.local.mode") == null || URIUtil.isFileURI(repository.getLocation())) { + artifactRepositories.add(repository.getLocation()); + metadataRepositories.add(loadRepository(repository)); + } } IQueryable locationUnits = new CompoundQueryable( diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetPlatformBuilderImpl.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetPlatformBuilderImpl.java index 9da87bb..3d15c5e 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetPlatformBuilderImpl.java +++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetPlatformBuilderImpl.java @@ -255,6 +255,11 @@ public class TargetPlatformBuilderImpl implements TargetPlatformBuilder { return; } + // We cannot resolve a non-file URI in local mode + if (System.getProperty("maven.local.mode") != null && !URIUtil.isFileURI(location)) { + return; + } + try { metadataRepository = metadataRepositoryManager.loadRepository(location, monitor); metadataRepositories.add(metadataRepository); diff --git a/tycho-core/src/main/java/org/eclipse/tycho/osgi/runtime/TychoP2RuntimeLocator.java b/tycho-core/src/main/java/org/eclipse/tycho/osgi/runtime/TychoP2RuntimeLocator.java index 15b3fff..c8f14df 100644 --- a/tycho-core/src/main/java/org/eclipse/tycho/osgi/runtime/TychoP2RuntimeLocator.java +++ b/tycho-core/src/main/java/org/eclipse/tycho/osgi/runtime/TychoP2RuntimeLocator.java @@ -23,6 +23,7 @@ import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.resolver.ArtifactResolutionException; import org.apache.maven.artifact.resolver.ArtifactResolutionRequest; import org.apache.maven.artifact.resolver.ArtifactResolutionResult; +import org.apache.maven.artifact.resolver.JavadirWorkspaceReader; import org.apache.maven.artifact.resolver.ResolutionErrorHandler; import org.apache.maven.execution.MavenSession; import org.apache.maven.model.Dependency; @@ -38,6 +39,7 @@ import org.codehaus.plexus.util.FileUtils; import org.eclipse.sisu.equinox.embedder.EquinoxRuntimeLocator; import org.eclipse.tycho.locking.facade.FileLockService; import org.eclipse.tycho.locking.facade.FileLocker; +import org.sonatype.aether.util.artifact.DefaultArtifact; @Component(role = EquinoxRuntimeLocator.class) public class TychoP2RuntimeLocator implements EquinoxRuntimeLocator { @@ -158,6 +160,21 @@ public class TychoP2RuntimeLocator implements EquinoxRuntimeLocator { } private File resolveArtifact(MavenSession session, Artifact artifact) throws MavenExecutionException { + + // If we are in local mode, find the artifact on the system + if (System.getProperty("maven.local.mode") != null) { + JavadirWorkspaceReader wReader = new JavadirWorkspaceReader(); + DefaultArtifact newArtifact = new DefaultArtifact(artifact.getGroupId() + + ":" + artifact.getArtifactId() + + ":" + artifact.getType() + + ":" + artifact.getVersion()); + File file = wReader.findArtifact(newArtifact); + if (file != null) { + artifact.setFile(file); + return file; + } + } + List repositories = new ArrayList(); for (MavenProject project : session.getProjects()) { repositories.addAll(project.getPluginArtifactRepositories()); diff --git a/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/OsgiBundleProject.java b/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/OsgiBundleProject.java index 8d18453..051913e 100644 --- a/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/OsgiBundleProject.java +++ b/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/OsgiBundleProject.java @@ -505,6 +505,28 @@ public class OsgiBundleProject extends AbstractTychoProject implements BundlePro } ExecutionEnvironment manifestMinimalEE = Collections.min(envs); + ExecutionEnvironment tmp; + + if (System.getProperty("maven.local.mode") != null) { + try { + // EE must be at least JavaSE-1.6 + final ExecutionEnvironment javaSE16 = ExecutionEnvironmentUtils.getExecutionEnvironment("JavaSE-1.6"); + while (!envs.isEmpty()) { + tmp = Collections.min(envs); + if (tmp.compareTo(javaSE16) >= 0) { + manifestMinimalEE = tmp; + break; + } + envs.remove(tmp); + } + + if (envs.isEmpty()) { + return javaSE16; + } + } catch (UnknownEnvironmentException e) { + // Continue + } + } if (buildMinimalEE == null) { return manifestMinimalEE; @@ -515,7 +537,21 @@ public class OsgiBundleProject extends AbstractTychoProject implements BundlePro protected ExecutionEnvironment getExecutionEnvironment(MavenProject project, String profile) { try { - return ExecutionEnvironmentUtils.getExecutionEnvironment(profile); + ExecutionEnvironment ee = ExecutionEnvironmentUtils.getExecutionEnvironment(profile); + + if (System.getProperty("maven.local.mode") != null && ee != null) { + try { + // EE must be at least JavaSE-1.6 + final ExecutionEnvironment javaSE16 = ExecutionEnvironmentUtils.getExecutionEnvironment("JavaSE-1.6"); + if (ee.compareTo(javaSE16) < 0) { + ee = javaSE16; + } + } catch (UnknownEnvironmentException e) { + // Continue + } + } + + return ee; } catch (UnknownEnvironmentException e) { throw new RuntimeException("Unknown execution environment specified in build.properties of project " + project, e);