Repository: tomee Updated Branches: refs/heads/master b25b8bda8 -> c27dbf5d9
getting rid of aether dependencies in openejb-provisionning and using shrinkwrap is available - which relies on maven - or our default impl if not. Note: the registration of this enhanced mvn resolver is still manual Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/c27dbf5d Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/c27dbf5d Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/c27dbf5d Branch: refs/heads/master Commit: c27dbf5d9fb3f3c16fdad4e7eb8c8aa42afe1c11 Parents: b25b8bd Author: Romain Manni-Bucau <rmannibu...@gmail.com> Authored: Tue Dec 29 13:05:24 2015 +0100 Committer: Romain Manni-Bucau <rmannibu...@gmail.com> Committed: Tue Dec 29 13:05:24 2015 +0100 ---------------------------------------------------------------------- utils/openejb-provisionning/pom.xml | 139 +------- .../org/apache/openejb/resolver/Resolver.java | 54 ++- .../resolver/maven/AetherBasedResolver.java | 343 ------------------- .../openejb/resolver/maven/ConfigHelper.java | 35 -- .../openejb/resolver/maven/Connection.java | 47 --- .../apache/openejb/resolver/maven/Handler.java | 29 -- .../resolver/maven/ManualWagonProvider.java | 38 -- .../apache/openejb/resolver/maven/Parser.java | 229 ------------- .../resolver/maven/ShrinkwrapBridge.java | 63 ++++ .../openejb/resolver/maven/VersionResolver.java | 62 ---- .../openejb/resolver/maven/package-info.java | 19 - .../openejb/resolver/maven/ParserTest.java | 241 ------------- .../resolver/maven/SWMvnResolverTest.java | 37 ++ 13 files changed, 126 insertions(+), 1210 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/c27dbf5d/utils/openejb-provisionning/pom.xml ---------------------------------------------------------------------- diff --git a/utils/openejb-provisionning/pom.xml b/utils/openejb-provisionning/pom.xml index e059d51..80b26f7 100644 --- a/utils/openejb-provisionning/pom.xml +++ b/utils/openejb-provisionning/pom.xml @@ -30,141 +30,10 @@ <name>OpenEJB :: Utils :: Provisionning</name> <dependencies> - <!-- to handle mvn uris in DeployerEjb --> <dependency> - <groupId>org.ops4j.pax.url</groupId> - <artifactId>pax-url-maven-commons</artifactId> - <version>${pax-url.version}</version> - <exclusions> - <exclusion> - <groupId>org.ops4j.pax.swissbox</groupId> - <artifactId>pax-swissbox-optional-jcl</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>org.sonatype.aether</groupId> - <artifactId>aether-api</artifactId> - <version>${aether.version}</version> - </dependency> - <dependency> - <groupId>org.sonatype.aether</groupId> - <artifactId>aether-spi</artifactId> - <version>${aether.version}</version> - </dependency> - <dependency> - <groupId>org.sonatype.aether</groupId> - <artifactId>aether-util</artifactId> - <version>${aether.version}</version> - </dependency> - <dependency> - <groupId>org.sonatype.aether</groupId> - <artifactId>aether-impl</artifactId> - <version>${aether.version}</version> - </dependency> - <dependency> - <groupId>org.sonatype.aether</groupId> - <artifactId>aether-connector-wagon</artifactId> - <version>${aether.version}</version> - <exclusions> - <exclusion> - <artifactId>plexus-utils</artifactId> - <groupId>org.codehaus.plexus</groupId> - </exclusion> - <exclusion> - <artifactId>wagon-provider-api</artifactId> - <groupId>org.apache.maven.wagon</groupId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>org.apache.maven</groupId> - <artifactId>maven-aether-provider</artifactId> - <version>${maven.version}</version> - <exclusions> - <exclusion> - <artifactId>plexus-utils</artifactId> - <groupId>org.codehaus.plexus</groupId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>org.apache.maven.wagon</groupId> - <artifactId>wagon-provider-api</artifactId> - <version>${wagon.version}</version> - <exclusions> - <exclusion> - <artifactId>plexus-utils</artifactId> - <groupId>org.codehaus.plexus</groupId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>org.apache.maven.wagon</groupId> - <artifactId>wagon-file</artifactId> - <version>${wagon.version}</version> - </dependency> - <dependency> - <groupId>org.apache.maven.wagon</groupId> - <artifactId>wagon-http</artifactId> - <version>${wagon.version}</version> - <exclusions> - <exclusion> - <groupId>commons-logging</groupId> - <artifactId>commons-logging</artifactId> - </exclusion> - <exclusion> - <groupId>commons-io</groupId> - <artifactId>commons-io</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>commons-codec</groupId> - <artifactId>commons-codec</artifactId> - <version>${commons-codec.version}</version> - </dependency> - <dependency> - <groupId>org.codehaus.plexus</groupId> - <artifactId>plexus-container-default</artifactId> - <version>${plexus.version}</version> - <exclusions> - <exclusion> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - </exclusion> - <exclusion> - <groupId>log4j</groupId> - <artifactId>log4j</artifactId> - </exclusion> - <exclusion> - <groupId>commons-logging</groupId> - <artifactId>commons-logging-api</artifactId> - </exclusion> - <exclusion> - <groupId>org.apache.xbean</groupId> - <artifactId>xbean-reflect</artifactId> - </exclusion> - <exclusion> - <artifactId>plexus-utils</artifactId> - <groupId>org.codehaus.plexus</groupId> - </exclusion> - <exclusion> - <artifactId>plexus-classworlds</artifactId> - <groupId>org.codehaus.plexus</groupId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>org.codehaus.plexus</groupId> - <artifactId>plexus-utils</artifactId> - <version>${plexus-utils.version}</version> - </dependency> - - <dependency> - <groupId>commons-logging</groupId> - <artifactId>commons-logging</artifactId> - <version>1.1.1</version> + <groupId>org.jboss.shrinkwrap.resolver</groupId> + <artifactId>shrinkwrap-resolver-impl-maven</artifactId> + <version>${version.shrinkwrap.resolver.bom}</version> </dependency> <!-- for resolver --> @@ -180,8 +49,6 @@ <version>${project.version}</version> <scope>provided</scope> </dependency> - - </dependencies> <build> http://git-wip-us.apache.org/repos/asf/tomee/blob/c27dbf5d/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/Resolver.java ---------------------------------------------------------------------- diff --git a/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/Resolver.java b/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/Resolver.java index e21e952..9decef4 100644 --- a/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/Resolver.java +++ b/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/Resolver.java @@ -16,43 +16,35 @@ */ package org.apache.openejb.resolver; -import org.apache.openejb.loader.IO; -import org.apache.openejb.resolver.maven.Handler; -import org.apache.openejb.resolver.maven.Parser; +import org.apache.openejb.loader.SystemInstance; +import org.apache.openejb.loader.provisining.MavenResolver; +import org.apache.openejb.loader.provisining.ProvisioningResolver; +import org.apache.openejb.resolver.maven.ShrinkwrapBridge; -import java.io.File; -import java.net.URL; +import java.io.FileInputStream; +import java.io.InputStream; -import static org.apache.openejb.loader.provisining.ProvisioningResolver.cacheFile; - -public class Resolver { - public String resolve(final String rawLocation) throws Exception { - if (rawLocation.startsWith("mvn:") && rawLocation.length() > "mvn:".length()) { +public class Resolver extends MavenResolver { + public InputStream resolve(final String rawLocation) { + final boolean initialized = SystemInstance.isInitialized(); + if (!initialized) { + SystemInstance.get().setComponent(ProvisioningResolver.class, new ProvisioningResolver()); + } - final String info = rawLocation.substring("mvn".length()); - final Parser parser = new Parser(info); - final File file = cacheFile(parser.getArtifactPath()); - if (!file.exists() || !file.canRead()) { + try { + if (rawLocation.startsWith("mvn:") && rawLocation.length() > "mvn:".length()) { try { - final URL url = new URL(rawLocation.substring("mvn:".length()), "localhost", -1, info, new Handler()); - final File parentFile = file.getParentFile(); - if (!parentFile.exists()) { - if (!parentFile.mkdirs()) { - throw new Exception("Failed to create: " + parentFile); - } - } - IO.copy(IO.read(url), file); - } catch (Exception e) { - if (file.exists()) { - if (!file.delete()) { - file.deleteOnExit(); - } - } - throw e; + return new FileInputStream(new ShrinkwrapBridge().resolve(rawLocation)); + } catch (final Throwable th) { + // try aether if not in a mvn build + th.printStackTrace(); } } - return file.getPath(); + return super.resolve(rawLocation); + } finally { + if (!initialized) { + SystemInstance.reset(); + } } - return rawLocation; } } http://git-wip-us.apache.org/repos/asf/tomee/blob/c27dbf5d/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/AetherBasedResolver.java ---------------------------------------------------------------------- diff --git a/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/AetherBasedResolver.java b/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/AetherBasedResolver.java deleted file mode 100644 index 53b67e8..0000000 --- a/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/AetherBasedResolver.java +++ /dev/null @@ -1,343 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.openejb.resolver.maven; - -import org.apache.maven.repository.internal.DefaultArtifactDescriptorReader; -import org.apache.maven.repository.internal.DefaultVersionRangeResolver; -import org.apache.maven.repository.internal.DefaultVersionResolver; -import org.apache.maven.repository.internal.MavenRepositorySystemSession; -import org.apache.openejb.loader.IO; -import org.ops4j.pax.url.maven.commons.MavenConfigurationImpl; -import org.ops4j.pax.url.maven.commons.MavenRepositoryURL; -import org.sonatype.aether.RepositoryException; -import org.sonatype.aether.RepositorySystem; -import org.sonatype.aether.RepositorySystemSession; -import org.sonatype.aether.artifact.Artifact; -import org.sonatype.aether.connector.wagon.WagonProvider; -import org.sonatype.aether.connector.wagon.WagonRepositoryConnectorFactory; -import org.sonatype.aether.impl.ArtifactDescriptorReader; -import org.sonatype.aether.impl.DependencyCollector; -import org.sonatype.aether.impl.Deployer; -import org.sonatype.aether.impl.Installer; -import org.sonatype.aether.impl.MetadataResolver; -import org.sonatype.aether.impl.SyncContextFactory; -import org.sonatype.aether.impl.VersionRangeResolver; -import org.sonatype.aether.impl.VersionResolver; -import org.sonatype.aether.impl.internal.DefaultDependencyCollector; -import org.sonatype.aether.impl.internal.DefaultDeployer; -import org.sonatype.aether.impl.internal.DefaultInstaller; -import org.sonatype.aether.impl.internal.DefaultMetadataResolver; -import org.sonatype.aether.impl.internal.DefaultServiceLocator; -import org.sonatype.aether.impl.internal.DefaultSyncContextFactory; -import org.sonatype.aether.impl.internal.SimpleLocalRepositoryManagerFactory; -import org.sonatype.aether.installation.InstallRequest; -import org.sonatype.aether.repository.Authentication; -import org.sonatype.aether.repository.LocalRepository; -import org.sonatype.aether.repository.MirrorSelector; -import org.sonatype.aether.repository.Proxy; -import org.sonatype.aether.repository.ProxySelector; -import org.sonatype.aether.repository.RemoteRepository; -import org.sonatype.aether.resolution.ArtifactRequest; -import org.sonatype.aether.resolution.VersionRangeRequest; -import org.sonatype.aether.resolution.VersionRangeResolutionException; -import org.sonatype.aether.resolution.VersionRangeResult; -import org.sonatype.aether.spi.connector.RepositoryConnectorFactory; -import org.sonatype.aether.spi.localrepo.LocalRepositoryManagerFactory; -import org.sonatype.aether.spi.log.Logger; -import org.sonatype.aether.spi.log.NullLogger; -import org.sonatype.aether.util.artifact.DefaultArtifact; -import org.sonatype.aether.util.repository.DefaultMirrorSelector; -import org.sonatype.aether.util.repository.DefaultProxySelector; -import org.sonatype.aether.version.Version; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class AetherBasedResolver { - private static final String LATEST_VERSION_RANGE = "(0.0,]"; - private static final String REPO_TYPE = "default"; - - final private RepositorySystem m_repoSystem; - final private List<RemoteRepository> m_remoteRepos; - final private MavenConfigurationImpl m_config; - final private MirrorSelector m_mirrorSelector; - final private ProxySelector m_proxySelector; - final private MavenRepositoryURL m_repositoryUrl; - - /** - * Create a AetherBasedResolver - * - * - * @param configuration (must be not null) - * @param repositoryURL - * @throws java.net.MalformedURLException in case of url problems in configuration. - */ - public AetherBasedResolver(final MavenConfigurationImpl configuration, MavenRepositoryURL repositoryURL) throws MalformedURLException { - m_repoSystem = newRepositorySystem(); - m_config = configuration; - - m_remoteRepos = selectRepositories(getRemoteRepositories(configuration)); - m_mirrorSelector = selectMirrors(); - m_proxySelector = selectProxies(); - m_repositoryUrl = repositoryURL; - assignProxyAndMirrors(); - } - - private void assignProxyAndMirrors() { - Map<String, List<String>> map = new HashMap<String, List<String>>(); - Map<String, RemoteRepository> naming = new HashMap<String, RemoteRepository>(); - - for (RemoteRepository r : m_remoteRepos) { - naming.put(r.getId(), r); - - r.setProxy(m_proxySelector.getProxy(r)); - - RemoteRepository mirror = m_mirrorSelector.getMirror(r); - if (mirror != null) { - String key = mirror.getId(); - naming.put(key, mirror); - if (!map.containsKey(key)) { - map.put(key, new ArrayList<String>()); - } - List<String> mirrored = map.get(key); - mirrored.add(r.getId()); - } - } - - for (String mirrorId : map.keySet()) { - RemoteRepository mirror = naming.get(mirrorId); - List<RemoteRepository> mirroedRepos = new ArrayList<RemoteRepository>(); - - for (String rep : map.get(mirrorId)) { - mirroedRepos.add(naming.get(rep)); - } - mirror.setMirroredRepositories(mirroedRepos); - m_remoteRepos.removeAll(mirroedRepos); - m_remoteRepos.add(0, mirror); - } - - } - - private List<MavenRepositoryURL> getRemoteRepositories(MavenConfigurationImpl configuration) - throws MalformedURLException { - List<MavenRepositoryURL> r = new ArrayList<MavenRepositoryURL>(); - for (MavenRepositoryURL s : configuration.getRepositories()) { - r.add(s); - } - if (m_repositoryUrl != null) { - // 0 should be local so add it just after to downlad the dependency quicker - r.add(r.size() == 0 ? 0 : 1, m_repositoryUrl); - } - r.add(new MavenRepositoryURL("https://repository.apache.org/content/repositories/snapshots/@snapshots@id=apache-snapshot")); - r.add(new MavenRepositoryURL("https://repository.apache.org/content/repositories/releases/@id=apache-release")); - return r; - } - - private ProxySelector selectProxies() { - DefaultProxySelector proxySelector = new DefaultProxySelector(); - Map<String, Map<String, String>> proxies = m_config.getProxySettings(); - for (Map<String, String> proxy : proxies.values()) { - //The fields are user, pass, host, port, nonProxyHosts, protocol. - String nonProxyHosts = proxy.get("nonProxyHosts"); - Proxy proxyObj = new Proxy(proxy.get("protocol"), - proxy.get("host"), - toInt(proxy.get("port")), - getAuthentication(proxy) - ); - proxySelector.add(proxyObj, nonProxyHosts); - } - return proxySelector; - } - - private MirrorSelector selectMirrors() { - // configure mirror - DefaultMirrorSelector selector = new DefaultMirrorSelector(); - Map<String, Map<String, String>> mirrors = m_config.getMirrors(); - - for (String mirrorName : mirrors.keySet()) { - Map<String, String> mirror = mirrors.get(mirrorName); - //The fields are id, url, mirrorOf, layout, mirrorOfLayouts. - String mirrorOf = mirror.get("mirrorOf"); - String url = mirror.get("url"); - // type can be null in this implementation (1.11) - selector.add(mirrorName, url, null, false, mirrorOf, "*"); - } - return selector; - /** - Set<RemoteRepository> mirrorRepoList = new HashSet<RemoteRepository>(); - for (RemoteRepository r : m_remoteRepos) { - RemoteRepository mirrorRepo = mirrorSelector.getMirror(r); - if (mirrorRepo != null) - { - mirrorRepoList.add(mirrorRepo); - } - } - return mirrorRepoList; - **/ - } - - private List<RemoteRepository> selectRepositories(List<MavenRepositoryURL> repos) { - List<RemoteRepository> list = new ArrayList<RemoteRepository>(); - for (MavenRepositoryURL r : repos) { - list.add(new RemoteRepository(r.getId(), REPO_TYPE, r.getURL().toExternalForm())); - } - return list; - } - - public InputStream resolve(String groupId, String artifactId, String classifier, String extension, String version) throws IOException { - // version = mapLatestToRange( version ); - final RepositorySystemSession session = newSession(); - Artifact artifact = new DefaultArtifact(groupId, artifactId, classifier, extension, version); - File resolved = resolve(session, artifact); - return IO.read(resolved); - } - - public VersionRangeResult resolveVersions(String groupId, String artifactId, String classifier, String extension, String version) { - final RepositorySystemSession session = newSession(); - Artifact artifact = new DefaultArtifact(groupId, artifactId, classifier, extension, version); - if (artifact.getVersion().equals("LATEST")) { - artifact = artifact.setVersion(LATEST_VERSION_RANGE); - } - final VersionRangeRequest request = new VersionRangeRequest(artifact, m_remoteRepos, null); - try { - return m_repoSystem.resolveVersionRange(session, request); - } catch (VersionRangeResolutionException e) { - final VersionRangeResult result = new VersionRangeResult(request); - result.setVersions(Arrays.asList((Version) new VersionImpl(version))); - return result; - } - } - - private File resolve(RepositorySystemSession session, Artifact artifact) - throws IOException { - try { - artifact = resolveLatestVersionRange(session, artifact); - artifact = m_repoSystem.resolveArtifact(session, new ArtifactRequest(artifact, m_remoteRepos, null)).getArtifact(); - if (artifact != null) { - final InstallRequest request = new InstallRequest(); - request.addArtifact(artifact); - m_repoSystem.install(session, request); - } - return artifact.getFile(); - } catch (RepositoryException e) { - throw new IOException("Aether Error.", e); - } - } - - /** - * Tries to resolve versions = LATEST using an open range version query. - * If it succeeds, version of artifact is set to the highest available version. - * - * @param session to be used. - * @param artifact to be used - * @return an artifact with version set properly (highest if available) - * @throws org.sonatype.aether.resolution.VersionRangeResolutionException - * in case of resolver errors. - */ - private Artifact resolveLatestVersionRange(RepositorySystemSession session, Artifact artifact) - throws VersionRangeResolutionException { - if (artifact.getVersion().equals("LATEST")) { - artifact = artifact.setVersion(LATEST_VERSION_RANGE); - - VersionRangeResult versionResult = m_repoSystem.resolveVersionRange(session, new VersionRangeRequest(artifact, m_remoteRepos, null)); - if (versionResult != null) { - Version v = versionResult.getHighestVersion(); - if (v != null) { - - artifact = artifact.setVersion(v.toString()); - } else { - throw new VersionRangeResolutionException(versionResult, "Not highest version found for " + artifact); - } - } - } - return artifact; - } - - private RepositorySystemSession newSession() { - assert m_config != null : "local repository cannot be null"; - File local = m_config.getLocalRepository().getFile(); - - MavenRepositorySystemSession session = new MavenRepositorySystemSession(); - - LocalRepository localRepo = new LocalRepository(local); - - session.setLocalRepositoryManager(m_repoSystem.newLocalRepositoryManager(localRepo)); - session.setMirrorSelector(m_mirrorSelector); - session.setProxySelector(m_proxySelector); - return session; - } - - private Authentication getAuthentication(Map<String, String> proxy) { - // user, pass - if (proxy.containsKey("user")) { - return new Authentication(proxy.get("user"), proxy.get("pass")); - } - return null; - } - - private int toInt(String intStr) { - return Integer.parseInt(intStr); - } - - private RepositorySystem newRepositorySystem() { - DefaultServiceLocator locator = new DefaultServiceLocator(); - - locator.addService(VersionResolver.class, DefaultVersionResolver.class); - locator.addService(ArtifactDescriptorReader.class, DefaultArtifactDescriptorReader.class); - locator.addService(VersionRangeResolver.class, DefaultVersionRangeResolver.class); - locator.addService(MetadataResolver.class, DefaultMetadataResolver.class); - locator.addService(ArtifactDescriptorReader.class, DefaultArtifactDescriptorReader.class); - locator.addService(DependencyCollector.class, DefaultDependencyCollector.class); - locator.addService(Installer.class, DefaultInstaller.class); - locator.addService(Deployer.class, DefaultDeployer.class); - locator.addService(SyncContextFactory.class, DefaultSyncContextFactory.class); - - locator.setServices(WagonProvider.class, new ManualWagonProvider()); - locator.addService(RepositoryConnectorFactory.class, WagonRepositoryConnectorFactory.class); - - locator.setService(LocalRepositoryManagerFactory.class, SimpleLocalRepositoryManagerFactory.class); - locator.setService(Logger.class, NullLogger.class); - - return locator.getService(RepositorySystem.class); - } - - private static class VersionImpl implements Version { - private final String version; - - private VersionImpl(String version) { - this.version = version; - } - - @Override - public String toString() { - return version; - } - - @Override - public int compareTo(final Version v) { - return 0; - } - } - -} http://git-wip-us.apache.org/repos/asf/tomee/blob/c27dbf5d/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/ConfigHelper.java ---------------------------------------------------------------------- diff --git a/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/ConfigHelper.java b/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/ConfigHelper.java deleted file mode 100644 index c162754..0000000 --- a/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/ConfigHelper.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.openejb.resolver.maven; - -import org.ops4j.pax.url.maven.commons.MavenConfigurationImpl; -import org.ops4j.pax.url.maven.commons.MavenSettingsImpl; -import org.ops4j.util.property.PropertiesPropertyResolver; - -public final class ConfigHelper { - private ConfigHelper() { - // no-op - } - - public static MavenConfigurationImpl createConfig() { - final MavenConfigurationImpl config = new MavenConfigurationImpl( - new PropertiesPropertyResolver( System.getProperties() ), "org.ops4j.pax.url.mvn"); - - config.setSettings( new MavenSettingsImpl( config.getSettingsFileUrl(), config.useFallbackRepositories() ) ); - return config; - } -} http://git-wip-us.apache.org/repos/asf/tomee/blob/c27dbf5d/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/Connection.java ---------------------------------------------------------------------- diff --git a/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/Connection.java b/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/Connection.java deleted file mode 100644 index 157db81..0000000 --- a/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/Connection.java +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.openejb.resolver.maven; - -import org.ops4j.pax.url.maven.commons.MavenConfigurationImpl; - -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; - -public class Connection extends URLConnection { - private Parser m_parser; - private AetherBasedResolver m_aetherBasedResolver; - - public Connection( final URL url, final MavenConfigurationImpl configuration ) throws MalformedURLException { - super(url); - m_parser = new Parser( url.getPath() ); - m_aetherBasedResolver = new AetherBasedResolver( configuration, m_parser.getRepositoryURL() ); - } - - @Override - public void connect() { - // no-op - } - - @Override - public InputStream getInputStream() throws IOException { - connect(); - return m_aetherBasedResolver.resolve( m_parser.getGroup(), m_parser.getArtifact(), m_parser.getClassifier(), m_parser.getType(), m_parser.getVersion() ); - } -} http://git-wip-us.apache.org/repos/asf/tomee/blob/c27dbf5d/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/Handler.java ---------------------------------------------------------------------- diff --git a/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/Handler.java b/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/Handler.java deleted file mode 100644 index fdc6d99..0000000 --- a/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/Handler.java +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.openejb.resolver.maven; - -import java.io.IOException; -import java.net.URL; -import java.net.URLConnection; -import java.net.URLStreamHandler; - -public class Handler extends URLStreamHandler { - @Override - protected URLConnection openConnection( final URL url ) throws IOException { - return new Connection( url, ConfigHelper.createConfig() ); - } -} http://git-wip-us.apache.org/repos/asf/tomee/blob/c27dbf5d/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/ManualWagonProvider.java ---------------------------------------------------------------------- diff --git a/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/ManualWagonProvider.java b/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/ManualWagonProvider.java deleted file mode 100644 index 02cf9f8..0000000 --- a/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/ManualWagonProvider.java +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.openejb.resolver.maven; - -import org.apache.maven.wagon.Wagon; -import org.apache.maven.wagon.providers.file.FileWagon; -import org.apache.maven.wagon.providers.http.HttpWagon; -import org.sonatype.aether.connector.wagon.WagonProvider; - -public class ManualWagonProvider implements WagonProvider { - public Wagon lookup(String roleHint) - throws Exception { - if ("file".equals(roleHint)) { - return new FileWagon(); - } else if (roleHint != null && roleHint.startsWith("http")) { // http and https - return new HttpWagon(); - } - return null; - } - - public void release(Wagon wagon) { - // no-op - } -} http://git-wip-us.apache.org/repos/asf/tomee/blob/c27dbf5d/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/Parser.java ---------------------------------------------------------------------- diff --git a/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/Parser.java b/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/Parser.java deleted file mode 100644 index f1585bb..0000000 --- a/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/Parser.java +++ /dev/null @@ -1,229 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.openejb.resolver.maven; - -import org.ops4j.pax.url.maven.commons.MavenRepositoryURL; - -import java.net.MalformedURLException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -/** - * This class respects both Maven Coordinates - * - * - groupId:artifactId:packaging:classifier:version - * - http://maven.apache.org/pom.html#Maven_Coordinates - * - * And OPS4j coordinates - * - * - groupId/artifactId/version/packaging/classifier - * - https://ops4j1.jira.com/wiki/display/paxurl/Mvn+Protocol - * - */ -public class Parser { - private static final String SYNTAX = "mvn:[repository_url!]groupId/artifactId[/[version]/[type]]"; - private static final String REPOSITORY_SEPARATOR = "!"; - private static final String ARTIFACT_SEPARATOR = "/"; - private static final String VERSION_SNAPSHOT = "SNAPSHOT"; - private static final String FILE_SEPARATOR = "/"; - private static final String GROUP_SEPARATOR = "\\."; - private static final String VERSION_SEPARATOR = "-"; - private static final String TYPE_SEPARATOR = "."; - private static final String CLASSIFIER_SEPARATOR = "-"; - private static final String METADATA_FILE = "maven-metadata.xml"; - private static final String METADATA_FILE_LOCAL = "maven-metadata-local.xml"; - - private final String group; - private final String artifact; - private final String version; - private final String type; - private final String classifier; - private final String fullClassifier; - - private MavenRepositoryURL repositoryURL; - - public Parser(final String rawPath) throws MalformedURLException { - - if (rawPath == null) throw new MalformedURLException("Path cannot be null. Syntax " + SYNTAX); - - final boolean possibleMavenCoordinates = rawPath.contains(":"); - - final String path = rawPath.replace(":", "/"); // mvn:G:A:V = mvn:G/A/V - - if (path.startsWith(REPOSITORY_SEPARATOR) || path.endsWith(REPOSITORY_SEPARATOR)) { - throw new MalformedURLException("Path cannot start or end with " + REPOSITORY_SEPARATOR + ". Syntax " + SYNTAX); - } - - final String part; - - if (path.contains(REPOSITORY_SEPARATOR)) { - int pos = path.lastIndexOf(REPOSITORY_SEPARATOR); - part = path.substring(pos + 1); - repositoryURL = new MavenRepositoryURL(path.substring(0, pos) + "@snapshots"); - } else { - part = path; - } - - final List<String> segments = new ArrayList<String>(Arrays.asList(part.split(ARTIFACT_SEPARATOR))); - - if (segments.size() < 2 || segments.size() > 5) { - throw new MalformedURLException("Invalid path. Syntax " + SYNTAX); - } - - // If Maven Coordinates were used, rearrange the segments to the OPS4j format - if (possibleMavenCoordinates && segments.get(segments.size() - 1).matches("[0-9].*")) { - // position the version after the artifactId - final String version = segments.remove(segments.size() - 1); - segments.add(2, version); - } - - final String[] coordinates = {null, null, "LATEST", "jar", null}; - - for (int i = 0; i < segments.size(); i++) { - final String value = segments.get(i).trim(); - if (value.length() != 0) { - coordinates[i] = value; - } - } - - this.group = coordinates[0]; - this.artifact = coordinates[1]; - this.version = coordinates[2]; - this.type = coordinates[3]; - this.classifier = coordinates[4]; - this.fullClassifier = (this.classifier != null) ? CLASSIFIER_SEPARATOR + classifier : null; - - if (group == null) { - throw new MalformedURLException("Invalid groupId. Syntax " + SYNTAX); - } - - if (artifact == null) { - throw new MalformedURLException("Invalid artifactId. Syntax " + SYNTAX); - } - } - - public String getGroup() { - return group; - } - - public String getArtifact() { - return artifact; - } - - public String getVersion() { - return version; - } - - public String getType() { - return type; - } - - public String getClassifier() { - return classifier; - } - - public String getArtifactPath() { - return getArtifactPath(version); - } - - public String getArtifactPath(final String version) { - return new StringBuilder() - .append(group.replaceAll(GROUP_SEPARATOR, FILE_SEPARATOR)) - .append(FILE_SEPARATOR) - .append(artifact) - .append(FILE_SEPARATOR) - .append(version) - .append(FILE_SEPARATOR) - .append(artifact) - .append(VERSION_SEPARATOR) - .append(version) - .append(fullClassifier) - .append(TYPE_SEPARATOR) - .append(type) - .toString(); - } - - public String getSnapshotVersion(final String version, final String timestamp, final String buildnumber) { - return version.replace(VERSION_SNAPSHOT, timestamp) + VERSION_SEPARATOR + buildnumber; - } - - public String getSnapshotPath(final String version, final String timestamp, final String buildnumber) { - return new StringBuilder() - .append(group.replaceAll(GROUP_SEPARATOR, FILE_SEPARATOR)) - .append(FILE_SEPARATOR) - .append(artifact) - .append(FILE_SEPARATOR) - .append(version) - .append(FILE_SEPARATOR) - .append(artifact) - .append(VERSION_SEPARATOR) - .append(getSnapshotVersion(version, timestamp, buildnumber)) - .append(fullClassifier) - .append(TYPE_SEPARATOR) - .append(type) - .toString(); - } - - public String getVersionMetadataPath(final String version) { - return new StringBuilder() - .append(group.replaceAll(GROUP_SEPARATOR, FILE_SEPARATOR)) - .append(FILE_SEPARATOR) - .append(artifact) - .append(FILE_SEPARATOR) - .append(version) - .append(FILE_SEPARATOR) - .append(METADATA_FILE) - .toString(); - } - - public String getVersionLocalMetadataPath(final String version) { - return new StringBuilder() - .append(group.replaceAll(GROUP_SEPARATOR, FILE_SEPARATOR)) - .append(FILE_SEPARATOR) - .append(artifact) - .append(FILE_SEPARATOR) - .append(version) - .append(FILE_SEPARATOR) - .append(METADATA_FILE_LOCAL) - .toString(); - } - - public String getArtifactLocalMetdataPath() { - return new StringBuilder() - .append(group.replaceAll(GROUP_SEPARATOR, FILE_SEPARATOR)) - .append(FILE_SEPARATOR) - .append(artifact) - .append(FILE_SEPARATOR) - .append(METADATA_FILE_LOCAL) - .toString(); - } - - public String getArtifactMetdataPath() { - return new StringBuilder() - .append(group.replaceAll(GROUP_SEPARATOR, FILE_SEPARATOR)) - .append(FILE_SEPARATOR) - .append(artifact) - .append(FILE_SEPARATOR) - .append(METADATA_FILE) - .toString(); - } - - public MavenRepositoryURL getRepositoryURL() { - return repositoryURL; - } -} http://git-wip-us.apache.org/repos/asf/tomee/blob/c27dbf5d/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/ShrinkwrapBridge.java ---------------------------------------------------------------------- diff --git a/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/ShrinkwrapBridge.java b/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/ShrinkwrapBridge.java new file mode 100644 index 0000000..9e98f56 --- /dev/null +++ b/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/ShrinkwrapBridge.java @@ -0,0 +1,63 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.openejb.resolver.maven; + +import org.apache.openejb.util.reflection.Reflections; + +import java.io.File; + +public class ShrinkwrapBridge { + private static final Class<?>[] NO_PARAM = new Class[0]; + private static final Class<?>[] STRING_PARAM = new Class[]{String.class}; + private static final Object[] NO_ARG = new Object[0]; + + public File resolve(final String rawLocation) throws Exception { + final Class<?> mvn = Thread.currentThread().getContextClassLoader().loadClass("org.jboss.shrinkwrap.resolver.api.maven.Maven"); + /* + return Maven.configureResolver().workOffline() + .resolve(toSwFormat(rawLocation)) + .withoutTransitivity() + .asSingleFile() + .getAbsolutePath() + */ + return File.class.cast(Reflections.invokeByReflection( + Reflections.invokeByReflection( + Reflections.invokeByReflection( + Reflections.invokeByReflection( + mvn.getMethod("configureResolver").invoke(null), + "workOffline", NO_PARAM, NO_ARG), + "resolve", STRING_PARAM, new Object[]{toSwFormat(rawLocation)}), + "withoutTransitivity", NO_PARAM, NO_ARG), + "asSingleFile", NO_PARAM, NO_ARG)); + } + + private String toSwFormat(final String rawLocation) { + final String[] segments = rawLocation.split(":"); + if (!"mvn".equals(segments[0])) { + throw new IllegalArgumentException("Only mvn prefix is supported: " + rawLocation); + } + + if (segments.length == 5) { + return segments[1] + ':' + segments[2] + ':' + segments[4] + ':' + segments[3]; + } else if (segments.length == 4) { + return segments[1] + ':' + segments[2] + ':' + segments[3]; + } else if (segments.length == 3) { + return segments[1] + ':' + segments[2]; + } + throw new IllegalArgumentException("Unknown mvn format: " + rawLocation); + } +} http://git-wip-us.apache.org/repos/asf/tomee/blob/c27dbf5d/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/VersionResolver.java ---------------------------------------------------------------------- diff --git a/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/VersionResolver.java b/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/VersionResolver.java deleted file mode 100644 index 868eada..0000000 --- a/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/VersionResolver.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.openejb.resolver.maven; - -import org.ops4j.pax.url.maven.commons.MavenConfigurationImpl; -import org.sonatype.aether.resolution.VersionRangeResult; -import org.sonatype.aether.version.Version; - -import java.io.IOException; -import java.net.MalformedURLException; -import java.util.Collections; -import java.util.List; - -public final class VersionResolver { - private VersionResolver() { - // no-op - } - - public static VersionRangeResult versions(final String info, final String defaultVersion) { - final MavenConfigurationImpl config = ConfigHelper.createConfig(); - try { - final Parser parser = new Parser(info); - final AetherBasedResolver resolver = new AetherBasedResolver(config, parser.getRepositoryURL()); - return resolver.resolveVersions(parser.getGroup(), parser.getArtifact(), parser.getClassifier(), parser.getType(), parser.getVersion()); - } catch (MalformedURLException e) { - return null; - } - } - - public static String highestVersion(final String info, final String prefix, final String defaultVersion) { - final VersionRangeResult result = VersionResolver.versions(info, defaultVersion); - if (result == null) { - return defaultVersion; - } - final List<Version> versions = result.getVersions(); - Collections.sort(versions); // Version impl comparable so we just need to call it :) - Version usedVersion = null; - for (Version current : versions) { - if (current.toString().startsWith(prefix)) { - usedVersion = current; - } - } - if (usedVersion != null) { - return usedVersion.toString(); - } - return defaultVersion; - } -} http://git-wip-us.apache.org/repos/asf/tomee/blob/c27dbf5d/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/package-info.java ---------------------------------------------------------------------- diff --git a/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/package-info.java b/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/package-info.java deleted file mode 100644 index 4a7a6c1..0000000 --- a/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/package-info.java +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// mainly copied from pax-url-aether -package org.apache.openejb.resolver.maven; http://git-wip-us.apache.org/repos/asf/tomee/blob/c27dbf5d/utils/openejb-provisionning/src/test/java/org/apache/openejb/resolver/maven/ParserTest.java ---------------------------------------------------------------------- diff --git a/utils/openejb-provisionning/src/test/java/org/apache/openejb/resolver/maven/ParserTest.java b/utils/openejb-provisionning/src/test/java/org/apache/openejb/resolver/maven/ParserTest.java deleted file mode 100644 index bee7a8a..0000000 --- a/utils/openejb-provisionning/src/test/java/org/apache/openejb/resolver/maven/ParserTest.java +++ /dev/null @@ -1,241 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.openejb.resolver.maven; - -import org.junit.Assert; -import org.junit.Test; - -import java.net.MalformedURLException; - -import static org.junit.Assert.assertEquals; - -/** - * @version $Rev$ $Date$ - */ -public class ParserTest { - - - @Test - public void testPaxURLs() throws Exception { - - final String groupId = "orange"; - final String artifactId = "yellow"; - final String version = "1.0-SNAPSHOT"; - final String classifier = "square"; - final String type = "zip"; - - { - final Parser parser = new Parser(String.format("%s/%s", groupId, artifactId)); - - assertEquals(groupId, parser.getGroup()); - assertEquals(artifactId, parser.getArtifact()); - assertEquals("LATEST", parser.getVersion()); - assertEquals("jar", parser.getType()); - assertEquals(null, parser.getClassifier()); - } - - { - final Parser parser = new Parser(String.format("%s/%s/%s", groupId, artifactId, version)); - - assertEquals(groupId, parser.getGroup()); - assertEquals(artifactId, parser.getArtifact()); - assertEquals(version, parser.getVersion()); - assertEquals("jar", parser.getType()); - assertEquals(null, parser.getClassifier()); - } - - { - final Parser parser = new Parser(String.format("%s/%s/%s/%s", groupId, artifactId, version, type)); - - assertEquals(groupId, parser.getGroup()); - assertEquals(artifactId, parser.getArtifact()); - assertEquals(version, parser.getVersion()); - assertEquals(type, parser.getType()); - assertEquals(null, parser.getClassifier()); - } - - { - final Parser parser = new Parser(String.format("%s/%s/%s/%s/%s", groupId, artifactId, version, type, classifier)); - - assertEquals(groupId, parser.getGroup()); - assertEquals(artifactId, parser.getArtifact()); - assertEquals(version, parser.getVersion()); - assertEquals(type, parser.getType()); - assertEquals(classifier, parser.getClassifier()); - } - - { // no version - final Parser parser = new Parser(String.format("%s/%s//%s/%s", groupId, artifactId, type, classifier)); - - assertEquals(groupId, parser.getGroup()); - assertEquals(artifactId, parser.getArtifact()); - assertEquals("LATEST", parser.getVersion()); - assertEquals(type, parser.getType()); - assertEquals(classifier, parser.getClassifier()); - } - - { // no type - final Parser parser = new Parser(String.format("%s/%s/%s//%s", groupId, artifactId, version, classifier)); - - assertEquals(groupId, parser.getGroup()); - assertEquals(artifactId, parser.getArtifact()); - assertEquals(version, parser.getVersion()); - assertEquals("jar", parser.getType()); - assertEquals(classifier, parser.getClassifier()); - } - - { // no classifier - final Parser parser = new Parser(String.format("%s/%s/%s/%s/", groupId, artifactId, version, type)); - - assertEquals(groupId, parser.getGroup()); - assertEquals(artifactId, parser.getArtifact()); - assertEquals(version, parser.getVersion()); - assertEquals(type, parser.getType()); - assertEquals(null, parser.getClassifier()); - } - - { // no version or type - final Parser parser = new Parser(String.format("%s/%s///%s", groupId, artifactId, classifier)); - - assertEquals(groupId, parser.getGroup()); - assertEquals(artifactId, parser.getArtifact()); - assertEquals("LATEST", parser.getVersion()); - assertEquals("jar", parser.getType()); - assertEquals(classifier, parser.getClassifier()); - } - - { // no version or type or classifier - final Parser parser = new Parser(String.format("%s/%s///", groupId, artifactId)); - - assertEquals(groupId, parser.getGroup()); - assertEquals(artifactId, parser.getArtifact()); - assertEquals("LATEST", parser.getVersion()); - assertEquals("jar", parser.getType()); - assertEquals(null, parser.getClassifier()); - } - - - try { // no group - new Parser(String.format("/%s///", artifactId)); - - Assert.fail("Expected MalformedURLException"); - } catch (MalformedURLException pass) { - } - - try { // no artifact - new Parser(String.format("%s////", groupId)); - - Assert.fail("Expected MalformedURLException"); - } catch (MalformedURLException pass) { - } - - try { // no artifact - new Parser(String.format("%s//%s", groupId, version)); - - Assert.fail("Expected MalformedURLException"); - } catch (MalformedURLException pass) { - } - - try { // too long - final Parser parser = new Parser(String.format("%s/%s/%s/%s/%s/%s", groupId, artifactId, version, type, classifier, classifier)); - - Assert.fail("Expected MalformedURLException"); - } catch (MalformedURLException pass) { - } - } - - - - @Test - public void testMavenCoordinates() throws Exception { - - final String groupId = "orange"; - final String artifactId = "yellow"; - final String version = "1.0-SNAPSHOT"; - final String classifier = "square"; - final String type = "zip"; - - { - final Parser parser = new Parser(String.format("%s:%s", groupId, artifactId)); - - assertEquals(groupId, parser.getGroup()); - assertEquals(artifactId, parser.getArtifact()); - assertEquals("LATEST", parser.getVersion()); - assertEquals("jar", parser.getType()); - assertEquals(null, parser.getClassifier()); - } - - { - final Parser parser = new Parser(String.format("%s:%s:%s", groupId, artifactId, version)); - - assertEquals(groupId, parser.getGroup()); - assertEquals(artifactId, parser.getArtifact()); - assertEquals(version, parser.getVersion()); - assertEquals("jar", parser.getType()); - assertEquals(null, parser.getClassifier()); - } - - { - final Parser parser = new Parser(String.format("%s:%s:%s:%s", groupId, artifactId, type, version)); - - assertEquals(groupId, parser.getGroup()); - assertEquals(artifactId, parser.getArtifact()); - assertEquals(version, parser.getVersion()); - assertEquals(type, parser.getType()); - assertEquals(null, parser.getClassifier()); - } - - { - final Parser parser = new Parser(String.format("%s:%s:%s:%s:%s", groupId, artifactId, type, classifier, version)); - - assertEquals(groupId, parser.getGroup()); - assertEquals(artifactId, parser.getArtifact()); - assertEquals(version, parser.getVersion()); - assertEquals(type, parser.getType()); - assertEquals(classifier, parser.getClassifier()); - } - - try { // no group - new Parser(String.format(":%s:::", artifactId)); - - Assert.fail("Expected MalformedURLException"); - } catch (MalformedURLException pass) { - } - - try { // no artifact - new Parser(String.format("%s::::", groupId)); - - Assert.fail("Expected MalformedURLException"); - } catch (MalformedURLException pass) { - } - - try { // no artifact - new Parser(String.format("%s::%s", groupId, version)); - - Assert.fail("Expected MalformedURLException"); - } catch (MalformedURLException pass) { - } - - try { // too long - final Parser parser = new Parser(String.format("%s:%s:%s:%s:%s:%s", groupId, artifactId, version, type, classifier, classifier)); - - Assert.fail("Expected MalformedURLException"); - } catch (MalformedURLException pass) { - } - } - -} http://git-wip-us.apache.org/repos/asf/tomee/blob/c27dbf5d/utils/openejb-provisionning/src/test/java/org/apache/openejb/resolver/maven/SWMvnResolverTest.java ---------------------------------------------------------------------- diff --git a/utils/openejb-provisionning/src/test/java/org/apache/openejb/resolver/maven/SWMvnResolverTest.java b/utils/openejb-provisionning/src/test/java/org/apache/openejb/resolver/maven/SWMvnResolverTest.java new file mode 100644 index 0000000..66c0eaa --- /dev/null +++ b/utils/openejb-provisionning/src/test/java/org/apache/openejb/resolver/maven/SWMvnResolverTest.java @@ -0,0 +1,37 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.openejb.resolver.maven; + +import org.apache.openejb.resolver.Resolver; +import org.junit.Test; + +import java.io.IOException; +import java.io.InputStream; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +public class SWMvnResolverTest { + @Test + public void resolve() throws IOException { + // something we have in the build to not depend on the net connection + try (final InputStream resolve = new Resolver().resolve("mvn:junit:junit:4.12")) { + assertNotNull(resolve); + assertTrue(resolve.read() > -1); // something to read = a real file + } + } +}