1 package com.github.searls.jasmine.thirdpartylibs;
2
3 import org.apache.maven.artifact.Artifact;
4
5 import java.io.File;
6 import java.net.URL;
7 import java.net.URLClassLoader;
8 import java.util.ArrayList;
9 import java.util.HashSet;
10 import java.util.List;
11 import java.util.Set;
12
13 public class ProjectClassLoaderFactory {
14
15 private final Set<Artifact> artifacts;
16
17 public ProjectClassLoaderFactory() {
18 this(new HashSet<Artifact>());
19 }
20
21 public ProjectClassLoaderFactory(Set<Artifact> artifacts) {
22 this.artifacts = artifacts;
23 }
24
25 public ClassLoader create() {
26 final List<String> classpathElements = new ArrayList<String>();
27 for (Artifact artifact : artifacts) {
28 classpathElements.add(artifact.getFile().getAbsolutePath());
29 }
30 return createURLClassLoader(classpathElements);
31 }
32
33 private ClassLoader createURLClassLoader(final List<String> classpathElements) {
34 final List<URL> urls = new ArrayList<URL>();
35 try {
36 for (final String element : classpathElements) {
37 final File elementFile = new File(element);
38 urls.add(elementFile.toURI().toURL());
39 }
40 } catch (final Exception e) {
41 throw new RuntimeException(e);
42 }
43 return new URLClassLoader(urls.toArray(new URL[urls.size()]), Thread.currentThread().getContextClassLoader());
44 }
45 }