private ShadeRequest createShadeSourcesRequest( Set<File> testArtifacts, File testJar, List<Filter> filters, List<Relocator> relocators, List<ResourceTransformer> resourceTransformers ) { ShadeRequest shadeSourcesRequest = shadeRequest( testArtifacts, testJar, filters, relocators, resourceTransformers, this.consistentDates, this.disableJarFileVerification ); shadeSourcesRequest.setShadeSourcesContent( shadeSourcesContent ); return shadeSourcesRequest; }
private List<Filter> getFilters( File jar, List<Filter> filters ) { List<Filter> list = new ArrayList<Filter>(); for ( Filter filter : filters ) { if ( filter.canFilter( jar ) ) { list.add( filter ); } } return list; }
private boolean isFiltered( List<Filter> filters, String name ) { for ( Filter filter : filters ) { if ( filter.isFiltered( name ) ) { return true; } } return false; }
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 ) ); }
public void testShaderWithExclusions() throws Exception { File jarFile = new File( getBasedir(), "target/unit/foo-bar.jar" ); Shader s = (Shader) lookup( Shader.ROLE, "default" ); Set<File> set = new LinkedHashSet<File>(); set.add( new File( getBasedir(), "src/test/jars/test-artifact-1.0-SNAPSHOT.jar" ) ); List<Relocator> relocators = new ArrayList<Relocator>(); relocators.add( new SimpleRelocator( "org.codehaus.plexus.util", "hidden", null, Arrays.asList( "org.codehaus.plexus.util.xml.Xpp3Dom", "org.codehaus.plexus.util.xml.pull.*") ) ); List<ResourceTransformer> resourceTransformers = new ArrayList<ResourceTransformer>(); List<Filter> filters = new ArrayList<Filter>(); ShadeRequest shadeRequest = new ShadeRequest(); shadeRequest.setJars( set ); shadeRequest.setUberJar( jarFile ); shadeRequest.setFilters( filters ); shadeRequest.setRelocators( relocators ); shadeRequest.setResourceTransformers( resourceTransformers ); s.shade( shadeRequest ); ClassLoader cl = new URLClassLoader( new URL[]{ jarFile.toURI().toURL() } ); Class<?> c = cl.loadClass( "org.apache.maven.plugins.shade.Lib" ); Field field = c.getDeclaredField( "CLASS_REALM_PACKAGE_IMPORT" ); assertEquals( "org.codehaus.plexus.util.xml.pull", field.get( null ) ); Method method = c.getDeclaredMethod( "getClassRealmPackageImport", new Class[0] ); assertEquals( "org.codehaus.plexus.util.xml.pull", method.invoke( null, new Object[0] ) ); }
private List<Filter> getFilters(File jar, List<Filter> filters) { List<Filter> list = new ArrayList<Filter>(); for (Filter filter : filters) { if (filter.canFilter(jar)) { list.add(filter); } } return list; }
private boolean isFiltered(List<Filter> filters, String name) { for (Filter filter : filters) { if (filter.isFiltered(name)) { return true; } } return false; }
public List<Filter> getFilters() { return filters; }
private void shadeJars( ShadeRequest shadeRequest, Set<String> resources, List<ResourceTransformer> transformers, RelocatorRemapper remapper, JarOutputStream jos, Multimap<String, File> duplicates ) throws IOException, MojoExecutionException { for ( File jar : shadeRequest.getJars() ) { getLogger().debug( "Processing JAR " + jar ); List<Filter> jarFilters = getFilters( jar, shadeRequest.getFilters() ); JarFile jarFile = newJarFile( jar, shadeRequest.isDisableJarFileVerification() ); try { for ( Enumeration<JarEntry> j = jarFile.entries(); j.hasMoreElements(); ) { JarEntry entry = j.nextElement(); String name = entry.getName(); if ( "META-INF/INDEX.LIST".equals( name ) ) { // we cannot allow the jar indexes to be copied over or the // jar is useless. Ideally, we could create a new one // later continue; } if ( !entry.isDirectory() && !isFiltered( jarFilters, name ) ) { shadeSingleJar( shadeRequest, resources, transformers, remapper, jos, duplicates, jar, jarFile, entry, name ); } } } finally { jarFile.close(); } } }
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] ); }
private void shaderWithPattern( String shadedPattern, File jar, String[] excludes ) 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", shadedPattern, null, Arrays.asList( excludes ) ) ); 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 ); }
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 ); }
/** * The filters. * * @param filters */ public void setFilters( List<Filter> filters ) { this.filters = filters; }