Search in sources :

Example 6 with Filter

use of org.apache.maven.plugins.shade.filter.Filter in project maven-plugins by apache.

the class ShadeMojo method execute.

/**
 * @throws MojoExecutionException
 */
public void execute() throws MojoExecutionException {
    setupHintedShader();
    Set<File> artifacts = new LinkedHashSet<File>();
    Set<String> artifactIds = new LinkedHashSet<String>();
    Set<File> sourceArtifacts = new LinkedHashSet<File>();
    Set<File> testArtifacts = new LinkedHashSet<File>();
    ArtifactSelector artifactSelector = new ArtifactSelector(project.getArtifact(), artifactSet, shadedGroupFilter);
    if (artifactSelector.isSelected(project.getArtifact()) && !"pom".equals(project.getArtifact().getType())) {
        if (invalidMainArtifact()) {
            createErrorOutput();
            throw new MojoExecutionException("Failed to create shaded artifact, " + "project main artifact does not exist.");
        }
        artifacts.add(project.getArtifact().getFile());
        if (createSourcesJar) {
            File file = shadedSourcesArtifactFile();
            if (file.isFile()) {
                sourceArtifacts.add(file);
            }
        }
        if (shadeTestJar) {
            File file = shadedTestArtifactFile();
            if (file.isFile()) {
                testArtifacts.add(file);
            }
        }
    }
    processArtifactSelectors(artifacts, artifactIds, sourceArtifacts, artifactSelector);
    File outputJar = (outputFile != null) ? outputFile : shadedArtifactFileWithClassifier();
    File sourcesJar = shadedSourceArtifactFileWithClassifier();
    File testJar = shadedTestArtifactFileWithClassifier();
    // Now add our extra resources
    try {
        List<Filter> filters = getFilters();
        List<Relocator> relocators = getRelocators();
        List<ResourceTransformer> resourceTransformers = getResourceTransformers();
        ShadeRequest shadeRequest = shadeRequest(artifacts, outputJar, filters, relocators, resourceTransformers);
        shader.shade(shadeRequest);
        if (createSourcesJar) {
            ShadeRequest shadeSourcesRequest = createShadeSourcesRequest(sourceArtifacts, sourcesJar, filters, relocators, resourceTransformers);
            shader.shade(shadeSourcesRequest);
        }
        if (shadeTestJar) {
            ShadeRequest shadeSourcesRequest = createShadeSourcesRequest(testArtifacts, testJar, filters, relocators, resourceTransformers);
            shader.shade(shadeSourcesRequest);
        }
        if (outputFile == null) {
            boolean renamed = false;
            // because this will be handled implicitly later
            if (// 
            finalName != null && finalName.length() > 0 && !finalName.equals(project.getBuild().getFinalName())) {
                String finalFileName = finalName + "." + project.getArtifact().getArtifactHandler().getExtension();
                File finalFile = new File(outputDirectory, finalFileName);
                replaceFile(finalFile, outputJar);
                outputJar = finalFile;
                // Also support the sources JAR
                if (createSourcesJar) {
                    finalFileName = finalName + "-sources.jar";
                    finalFile = new File(outputDirectory, finalFileName);
                    replaceFile(finalFile, sourcesJar);
                    sourcesJar = finalFile;
                }
                // Also support the test JAR
                if (shadeTestJar) {
                    finalFileName = finalName + "-tests.jar";
                    finalFile = new File(outputDirectory, finalFileName);
                    replaceFile(finalFile, testJar);
                    testJar = finalFile;
                }
                renamed = true;
            }
            if (shadedArtifactAttached) {
                getLog().info("Attaching shaded artifact.");
                projectHelper.attachArtifact(project, project.getArtifact().getType(), shadedClassifierName, outputJar);
                if (createSourcesJar) {
                    projectHelper.attachArtifact(project, "java-source", shadedClassifierName + "-sources", sourcesJar);
                }
            } else if (!renamed) {
                getLog().info("Replacing original artifact with shaded artifact.");
                File originalArtifact = project.getArtifact().getFile();
                if (originalArtifact != null) {
                    replaceFile(originalArtifact, outputJar);
                    if (createSourcesJar) {
                        getLog().info("Replacing original source artifact with shaded source artifact.");
                        File shadedSources = shadedSourcesArtifactFile();
                        replaceFile(shadedSources, sourcesJar);
                        projectHelper.attachArtifact(project, "java-source", "sources", shadedSources);
                    }
                    if (shadeTestJar) {
                        getLog().info("Replacing original test artifact with shaded test artifact.");
                        File shadedTests = shadedTestArtifactFile();
                        replaceFile(shadedTests, testJar);
                        projectHelper.attachArtifact(project, "jar", "tests", shadedTests);
                    }
                    if (createDependencyReducedPom) {
                        createDependencyReducedPom(artifactIds);
                    }
                }
            }
        }
    } catch (Exception e) {
        throw new MojoExecutionException("Error creating shaded jar: " + e.getMessage(), e);
    }
}
Also used : LinkedHashSet(java.util.LinkedHashSet) MojoExecutionException(org.apache.maven.plugin.MojoExecutionException) ShadeRequest(org.apache.maven.plugins.shade.ShadeRequest) SimpleRelocator(org.apache.maven.plugins.shade.relocation.SimpleRelocator) Relocator(org.apache.maven.plugins.shade.relocation.Relocator) ProjectBuildingException(org.apache.maven.project.ProjectBuildingException) DependencyGraphBuilderException(org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException) ArtifactResolverException(org.apache.maven.shared.artifact.resolve.ArtifactResolverException) ComponentLookupException(org.codehaus.plexus.component.repository.exception.ComponentLookupException) ContextException(org.codehaus.plexus.context.ContextException) IOException(java.io.IOException) MojoExecutionException(org.apache.maven.plugin.MojoExecutionException) SimpleFilter(org.apache.maven.plugins.shade.filter.SimpleFilter) Filter(org.apache.maven.plugins.shade.filter.Filter) MinijarFilter(org.apache.maven.plugins.shade.filter.MinijarFilter) ResourceTransformer(org.apache.maven.plugins.shade.resource.ResourceTransformer) File(java.io.File)

Example 7 with Filter

use of org.apache.maven.plugins.shade.filter.Filter in project maven-plugins by apache.

the class ShadeMojo method getFilters.

private List<Filter> getFilters() throws MojoExecutionException {
    List<Filter> filters = new ArrayList<Filter>();
    List<SimpleFilter> simpleFilters = new ArrayList<SimpleFilter>();
    if (this.filters != null && this.filters.length > 0) {
        Map<Artifact, ArtifactId> artifacts = new HashMap<Artifact, ArtifactId>();
        artifacts.put(project.getArtifact(), new ArtifactId(project.getArtifact()));
        for (Artifact artifact : project.getArtifacts()) {
            artifacts.put(artifact, new ArtifactId(artifact));
        }
        for (ArchiveFilter filter : this.filters) {
            ArtifactId pattern = new ArtifactId(filter.getArtifact());
            Set<File> jars = new HashSet<File>();
            for (Map.Entry<Artifact, ArtifactId> entry : artifacts.entrySet()) {
                if (entry.getValue().matches(pattern)) {
                    Artifact artifact = entry.getKey();
                    jars.add(artifact.getFile());
                    if (createSourcesJar) {
                        File file = resolveArtifactSources(artifact);
                        if (file != null) {
                            jars.add(file);
                        }
                    }
                }
            }
            if (jars.isEmpty()) {
                getLog().info("No artifact matching filter " + filter.getArtifact());
                continue;
            }
            simpleFilters.add(new SimpleFilter(jars, filter.getIncludes(), filter.getExcludes()));
        }
    }
    filters.addAll(simpleFilters);
    if (minimizeJar) {
        getLog().info("Minimizing jar " + project.getArtifact());
        try {
            filters.add(new MinijarFilter(project, getLog(), simpleFilters));
        } catch (IOException e) {
            throw new MojoExecutionException("Failed to analyze class dependencies", e);
        }
    }
    return filters;
}
Also used : MojoExecutionException(org.apache.maven.plugin.MojoExecutionException) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) IOException(java.io.IOException) Artifact(org.apache.maven.artifact.Artifact) SimpleFilter(org.apache.maven.plugins.shade.filter.SimpleFilter) Filter(org.apache.maven.plugins.shade.filter.Filter) MinijarFilter(org.apache.maven.plugins.shade.filter.MinijarFilter) SimpleFilter(org.apache.maven.plugins.shade.filter.SimpleFilter) MinijarFilter(org.apache.maven.plugins.shade.filter.MinijarFilter) File(java.io.File) Map(java.util.Map) HashMap(java.util.HashMap) HashSet(java.util.HashSet) LinkedHashSet(java.util.LinkedHashSet)

Example 8 with Filter

use of org.apache.maven.plugins.shade.filter.Filter 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));
}
Also used : LinkedHashSet(java.util.LinkedHashSet) ArrayList(java.util.ArrayList) Relocator(org.apache.maven.plugins.shade.relocation.Relocator) SimpleRelocator(org.apache.maven.plugins.shade.relocation.SimpleRelocator) SimpleRelocator(org.apache.maven.plugins.shade.relocation.SimpleRelocator) Filter(org.apache.maven.plugins.shade.filter.Filter) URLClassLoader(java.net.URLClassLoader) ResourceTransformer(org.apache.maven.plugins.shade.resource.ResourceTransformer) ComponentsXmlResourceTransformer(org.apache.maven.plugins.shade.resource.ComponentsXmlResourceTransformer) File(java.io.File)

Example 9 with Filter

use of org.apache.maven.plugins.shade.filter.Filter in project maven-plugins by apache.

the class DefaultShaderTest method shaderWithPattern.

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);
}
Also used : LinkedHashSet(java.util.LinkedHashSet) ArrayList(java.util.ArrayList) Relocator(org.apache.maven.plugins.shade.relocation.Relocator) SimpleRelocator(org.apache.maven.plugins.shade.relocation.SimpleRelocator) SimpleRelocator(org.apache.maven.plugins.shade.relocation.SimpleRelocator) Filter(org.apache.maven.plugins.shade.filter.Filter) ComponentsXmlResourceTransformer(org.apache.maven.plugins.shade.resource.ComponentsXmlResourceTransformer) ResourceTransformer(org.apache.maven.plugins.shade.resource.ResourceTransformer) ComponentsXmlResourceTransformer(org.apache.maven.plugins.shade.resource.ComponentsXmlResourceTransformer) File(java.io.File)

Example 10 with Filter

use of org.apache.maven.plugins.shade.filter.Filter in project maven-plugins by apache.

the class ShadeMojoTest method testShaderWithExclusions.

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]));
}
Also used : LinkedHashSet(java.util.LinkedHashSet) ArrayList(java.util.ArrayList) Method(java.lang.reflect.Method) Shader(org.apache.maven.plugins.shade.Shader) ShadeRequest(org.apache.maven.plugins.shade.ShadeRequest) SimpleRelocator(org.apache.maven.plugins.shade.relocation.SimpleRelocator) Relocator(org.apache.maven.plugins.shade.relocation.Relocator) SimpleRelocator(org.apache.maven.plugins.shade.relocation.SimpleRelocator) Field(java.lang.reflect.Field) Filter(org.apache.maven.plugins.shade.filter.Filter) URLClassLoader(java.net.URLClassLoader) URLClassLoader(java.net.URLClassLoader) ResourceTransformer(org.apache.maven.plugins.shade.resource.ResourceTransformer) ComponentsXmlResourceTransformer(org.apache.maven.plugins.shade.resource.ComponentsXmlResourceTransformer) File(java.io.File)

Aggregations

File (java.io.File)10 Filter (org.apache.maven.plugins.shade.filter.Filter)10 ArrayList (java.util.ArrayList)8 LinkedHashSet (java.util.LinkedHashSet)7 ResourceTransformer (org.apache.maven.plugins.shade.resource.ResourceTransformer)7 Relocator (org.apache.maven.plugins.shade.relocation.Relocator)6 SimpleRelocator (org.apache.maven.plugins.shade.relocation.SimpleRelocator)6 ComponentsXmlResourceTransformer (org.apache.maven.plugins.shade.resource.ComponentsXmlResourceTransformer)5 URLClassLoader (java.net.URLClassLoader)3 ShadeRequest (org.apache.maven.plugins.shade.ShadeRequest)3 IOException (java.io.IOException)2 Field (java.lang.reflect.Field)2 Method (java.lang.reflect.Method)2 HashSet (java.util.HashSet)2 JarFile (java.util.jar.JarFile)2 Artifact (org.apache.maven.artifact.Artifact)2 MojoExecutionException (org.apache.maven.plugin.MojoExecutionException)2 Shader (org.apache.maven.plugins.shade.Shader)2 MinijarFilter (org.apache.maven.plugins.shade.filter.MinijarFilter)2 SimpleFilter (org.apache.maven.plugins.shade.filter.SimpleFilter)2