use of org.apache.maven.plugins.shade.relocation.SimpleRelocator in project maven-plugins by apache.
the class DefaultShaderTest method testShaderWithRelocatedClassname.
public void testShaderWithRelocatedClassname() throws Exception {
DefaultShader s = newShader();
Set<File> set = new LinkedHashSet<File>();
set.add(new File("src/test/jars/test-project-1.0-SNAPSHOT.jar"));
set.add(new File("src/test/jars/plexus-utils-1.4.1.jar"));
List<Relocator> relocators = new ArrayList<Relocator>();
relocators.add(new SimpleRelocator("org/codehaus/plexus/util/", "_plexus/util/__", null, Arrays.<String>asList()));
List<ResourceTransformer> resourceTransformers = new ArrayList<ResourceTransformer>();
resourceTransformers.add(new ComponentsXmlResourceTransformer());
List<Filter> filters = new ArrayList<Filter>();
File file = new File("target/foo-relocate-class.jar");
ShadeRequest shadeRequest = new ShadeRequest();
shadeRequest.setJars(set);
shadeRequest.setUberJar(file);
shadeRequest.setFilters(filters);
shadeRequest.setRelocators(relocators);
shadeRequest.setResourceTransformers(resourceTransformers);
s.shade(shadeRequest);
URLClassLoader cl = new URLClassLoader(new URL[] { file.toURI().toURL() });
Class<?> c = cl.loadClass("_plexus.util.__StringUtils");
// first, ensure it works:
Object o = c.newInstance();
assertEquals("", c.getMethod("clean", String.class).invoke(o, (String) null));
// now, check that its source file was rewritten:
final String[] source = { null };
final ClassReader classReader = new ClassReader(cl.getResourceAsStream("_plexus/util/__StringUtils.class"));
classReader.accept(new ClassVisitor(Opcodes.ASM4) {
@Override
public void visitSource(String arg0, String arg1) {
super.visitSource(arg0, arg1);
source[0] = arg0;
}
}, ClassReader.SKIP_CODE);
assertEquals("__StringUtils.java", source[0]);
}
use of org.apache.maven.plugins.shade.relocation.SimpleRelocator in project maven-plugins by apache.
the class ShadeMojoTest method shaderWithPattern.
public void shaderWithPattern(String shadedPattern, File jar) throws Exception {
Shader s = (Shader) lookup(Shader.ROLE);
Set<File> set = new LinkedHashSet<File>();
set.add(new File(getBasedir(), "src/test/jars/test-project-1.0-SNAPSHOT.jar"));
set.add(new File(getBasedir(), "src/test/jars/plexus-utils-1.4.1.jar"));
List<Relocator> relocators = new ArrayList<Relocator>();
relocators.add(new SimpleRelocator("org/codehaus/plexus/util", shadedPattern, null, Arrays.asList("org/codehaus/plexus/util/xml/Xpp3Dom", "org/codehaus/plexus/util/xml/pull.*")));
List<ResourceTransformer> resourceTransformers = new ArrayList<ResourceTransformer>();
resourceTransformers.add(new ComponentsXmlResourceTransformer());
List<Filter> filters = new ArrayList<Filter>();
ShadeRequest shadeRequest = new ShadeRequest();
shadeRequest.setJars(set);
shadeRequest.setUberJar(jar);
shadeRequest.setFilters(filters);
shadeRequest.setRelocators(relocators);
shadeRequest.setResourceTransformers(resourceTransformers);
s.shade(shadeRequest);
}
use of org.apache.maven.plugins.shade.relocation.SimpleRelocator in project maven-plugins by apache.
the class ServiceResourceTransformerTest method relocatedClasses.
@Test
public void relocatedClasses() throws Exception {
SimpleRelocator relocator = new SimpleRelocator("org.foo", "borg.foo", null, Arrays.asList("org.foo.exclude.*"));
List<Relocator> relocators = Lists.<Relocator>newArrayList(relocator);
String content = "org.foo.Service\norg.foo.exclude.OtherService\n";
byte[] contentBytes = content.getBytes("UTF-8");
InputStream contentStream = new ByteArrayInputStream(contentBytes);
String contentResource = "META-INF/services/org.foo.something.another";
String contentResourceShaded = "META-INF/services/borg.foo.something.another";
ServicesResourceTransformer xformer = new ServicesResourceTransformer();
xformer.processResource(contentResource, contentStream, relocators);
contentStream.close();
File tempJar = File.createTempFile("shade.", ".jar");
tempJar.deleteOnExit();
FileOutputStream fos = new FileOutputStream(tempJar);
JarOutputStream jos = new JarOutputStream(fos);
try {
xformer.modifyOutputStream(jos);
jos.close();
jos = null;
JarFile jarFile = new JarFile(tempJar);
JarEntry jarEntry = jarFile.getJarEntry(contentResourceShaded);
assertNotNull(jarEntry);
InputStream entryStream = jarFile.getInputStream(jarEntry);
try {
String xformedContent = IOUtils.toString(entryStream, "utf-8");
assertEquals("borg.foo.Service" + System.getProperty("line.separator") + "org.foo.exclude.OtherService" + System.getProperty("line.separator"), xformedContent);
} finally {
IOUtils.closeQuietly(entryStream);
jarFile.close();
}
} finally {
if (jos != null) {
IOUtils.closeQuietly(jos);
}
tempJar.delete();
}
}
use of org.apache.maven.plugins.shade.relocation.SimpleRelocator in project maven-plugins by apache.
the class ServiceResourceTransformerTest method concatenation.
@Test
public void concatenation() throws Exception {
SimpleRelocator relocator = new SimpleRelocator("org.foo", "borg.foo", null, null);
List<Relocator> relocators = Lists.<Relocator>newArrayList(relocator);
String content = "org.foo.Service\n";
byte[] contentBytes = content.getBytes("UTF-8");
InputStream contentStream = new ByteArrayInputStream(contentBytes);
String contentResource = "META-INF/services/org.something.another";
ServicesResourceTransformer xformer = new ServicesResourceTransformer();
xformer.processResource(contentResource, contentStream, relocators);
contentStream.close();
content = "org.blah.Service\n";
contentBytes = content.getBytes("UTF-8");
contentStream = new ByteArrayInputStream(contentBytes);
contentResource = "META-INF/services/org.something.another";
xformer.processResource(contentResource, contentStream, relocators);
contentStream.close();
File tempJar = File.createTempFile("shade.", ".jar");
tempJar.deleteOnExit();
FileOutputStream fos = new FileOutputStream(tempJar);
JarOutputStream jos = new JarOutputStream(fos);
try {
xformer.modifyOutputStream(jos);
jos.close();
jos = null;
JarFile jarFile = new JarFile(tempJar);
JarEntry jarEntry = jarFile.getJarEntry(contentResource);
assertNotNull(jarEntry);
InputStream entryStream = jarFile.getInputStream(jarEntry);
try {
String xformedContent = IOUtils.toString(entryStream, "utf-8");
// must be two lines, with our two classes.
String[] classes = xformedContent.split("\r?\n");
boolean h1 = false;
boolean h2 = false;
for (String name : classes) {
if ("org.blah.Service".equals(name)) {
h1 = true;
} else if ("borg.foo.Service".equals(name)) {
h2 = true;
}
}
assertTrue(h1 && h2);
} finally {
IOUtils.closeQuietly(entryStream);
jarFile.close();
}
} finally {
if (jos != null) {
IOUtils.closeQuietly(jos);
}
tempJar.delete();
}
}
use of org.apache.maven.plugins.shade.relocation.SimpleRelocator in project maven-plugins by apache.
the class DefaultShaderTest method testShaderWithStaticInitializedClass.
public void testShaderWithStaticInitializedClass() throws Exception {
Shader s = newShader();
Set<File> set = new LinkedHashSet<File>();
set.add(new File("src/test/jars/test-artifact-1.0-SNAPSHOT.jar"));
List<Relocator> relocators = new ArrayList<Relocator>();
relocators.add(new SimpleRelocator("org.apache.maven.plugins.shade", null, null, null));
List<ResourceTransformer> resourceTransformers = new ArrayList<ResourceTransformer>();
List<Filter> filters = new ArrayList<Filter>();
File file = new File("target/testShaderWithStaticInitializedClass.jar");
ShadeRequest shadeRequest = new ShadeRequest();
shadeRequest.setJars(set);
shadeRequest.setUberJar(file);
shadeRequest.setFilters(filters);
shadeRequest.setRelocators(relocators);
shadeRequest.setResourceTransformers(resourceTransformers);
s.shade(shadeRequest);
URLClassLoader cl = new URLClassLoader(new URL[] { file.toURI().toURL() });
Class<?> c = cl.loadClass("hidden.org.apache.maven.plugins.shade.Lib");
Object o = c.newInstance();
assertEquals("foo.bar/baz", c.getDeclaredField("CONSTANT").get(o));
}
Aggregations