-
Notifications
You must be signed in to change notification settings - Fork 97
[MSHADE-36] Use reduced dependencies #25
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
3d1dbbc
7644ae8
cdcd5af
134c523
5506508
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,18 @@ | ||
| # 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. | ||
|
|
||
| invoker.goals = clean package |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,95 @@ | ||
| <?xml version="1.0" encoding="UTF-8"?> | ||
|
|
||
| <!-- | ||
| 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. | ||
| --> | ||
|
|
||
| <project> | ||
| <modelVersion>4.0.0</modelVersion> | ||
|
|
||
| <parent> | ||
| <groupId>org.apache.maven.plugins.shade.its</groupId> | ||
| <artifactId>shade-parent</artifactId> | ||
| <version>1.0</version> | ||
| <relativePath>../setup-parent</relativePath> | ||
| </parent> | ||
|
|
||
| <groupId>org.apache.maven.its.shade.drp</groupId> | ||
| <artifactId>test</artifactId> | ||
| <version>1.0</version> | ||
| <packaging>jar</packaging> | ||
|
|
||
| <name>MSHADE-36</name> | ||
| <description> | ||
| Test to see that the dependency-reduced-pom.xml is injected into the final jar instead of the original pom.xml | ||
| </description> | ||
|
|
||
| <dependencies> | ||
| <dependency> | ||
| <groupId>junit</groupId> | ||
| <artifactId>junit</artifactId> | ||
| <version>3.8.2</version> | ||
| </dependency> | ||
| <dependency> | ||
| <groupId>org.codehaus.plexus</groupId> | ||
| <artifactId>plexus-utils</artifactId> | ||
| <version>1.4.1</version> | ||
| </dependency> | ||
| </dependencies> | ||
|
|
||
| <build> | ||
| <plugins> | ||
| <plugin> | ||
| <groupId>org.apache.maven.plugins</groupId> | ||
| <artifactId>maven-compiler-plugin</artifactId> | ||
| <version>2.0.2</version> | ||
| </plugin> | ||
| <plugin> | ||
| <groupId>org.apache.maven.plugins</groupId> | ||
| <artifactId>maven-shade-plugin</artifactId> | ||
| <version>@project.version@</version> | ||
| <executions> | ||
| <execution> | ||
| <id>attach-shade</id> | ||
| <phase>package</phase> | ||
| <goals> | ||
| <goal>shade</goal> | ||
| </goals> | ||
| <configuration> | ||
| <minimizeJar>true</minimizeJar> | ||
| <createDependencyReducedPom>true</createDependencyReducedPom> | ||
| <useDependencyReducedPomInJar>true</useDependencyReducedPomInJar> | ||
| <relocations> | ||
| <relocation> | ||
| <pattern>org.codehaus.plexus</pattern> | ||
| <shadedPattern>com.example.shaded.org.codehaus.plexus</shadedPattern> | ||
| </relocation> | ||
| </relocations> | ||
| <artifactSet> | ||
| <includes> | ||
| <include>junit:junit</include> | ||
| <include>org.codehaus.plexus:plexus-utils</include> | ||
| </includes> | ||
| </artifactSet> | ||
| </configuration> | ||
| </execution> | ||
| </executions> | ||
| </plugin> | ||
| </plugins> | ||
| </build> | ||
| </project> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,33 @@ | ||
| /* | ||
| * 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 com.example; | ||
|
|
||
| import org.codehaus.plexus.util.StringUtils; | ||
|
|
||
| public class Main | ||
| { | ||
| public static void main( String[] args ) { | ||
| System.out.println( "Hello World!" + ( isEmpty("foo") ? " is empty!" : " -- ") ); | ||
| } | ||
|
|
||
| public static boolean isEmpty( String input ) { | ||
| return StringUtils.isEmpty( input ); | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,73 @@ | ||
| /* | ||
| * 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. | ||
| */ | ||
|
|
||
| import java.io.*; | ||
| import java.util.jar.*; | ||
| import java.util.Arrays; | ||
| import org.codehaus.plexus.util.*; | ||
|
|
||
| String[] wanted = | ||
| { | ||
| "com/example/Main.class", | ||
| "junit/swingui/icons/error.gif", | ||
| "com/example/shaded/org/codehaus/plexus/util/StringUtils.class", | ||
| }; | ||
|
|
||
| String[] unwanted = | ||
| { | ||
| "junit/swingui/TestRunner.class", | ||
| "org/codehaus/plexus/util/StringUtils.class", | ||
| }; | ||
|
|
||
| JarFile jarFile = null; | ||
| try | ||
| { | ||
| jarFile = new JarFile ( new File( basedir, "target/test-1.0.jar" ) ); | ||
|
|
||
| for ( String path:wanted ) | ||
| { | ||
| if ( jarFile.getEntry( path ) == null ) | ||
| { | ||
| throw new IllegalStateException( "wanted path is missing: "+path ); | ||
| } | ||
| } | ||
|
|
||
| for ( String path:unwanted ) | ||
| { | ||
| if ( jarFile.getEntry( path ) != null ) | ||
| { | ||
| throw new IllegalStateException ( "unwanted path is present: "+path ); | ||
| } | ||
| } | ||
|
|
||
| JarEntry jarEntry = jarFile.getEntry( "META-INF/maven/org.apache.maven.its.shade.drp/test/pom.xml" ); | ||
| String pomFile = IOUtil.toString( jarFile.getInputStream( jarEntry ), "UTF-8" ); | ||
|
|
||
| if ( pomFile.contains( "<groupId>org.codehaus.plexus</groupId>" ) ) | ||
| { | ||
| throw new IllegalStateException( "The pom.xml still contains a reference to the org.codehaus.plexus dependency" ); | ||
| } | ||
|
|
||
| } | ||
| finally | ||
| { | ||
| if ( jarFile != null ) { | ||
| jarFile.close(); | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -76,6 +76,7 @@ | |
| import java.util.Set; | ||
|
|
||
| import javax.inject.Inject; | ||
| import static org.apache.maven.plugins.shade.resource.UseDependencyReducedPom.createPomReplaceTransformers; | ||
|
|
||
| /** | ||
| * Mojo that performs shading delegating to the Shader component. | ||
|
|
@@ -285,6 +286,15 @@ public class ShadeMojo | |
| @Parameter( defaultValue = "false" ) | ||
| private boolean generateUniqueDependencyReducedPom; | ||
|
|
||
| /** | ||
| * Add dependency reduced POM to the JAR instead of the original one provided by the project. | ||
michael-o marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| * If {@code createDependencyReducedPom} is {@code false} this parameter will be ignored. | ||
| * | ||
| * @since 3.3.0 | ||
| */ | ||
| @Parameter( defaultValue = "false" ) | ||
| private boolean useDependencyReducedPomInJar; | ||
|
|
||
| /** | ||
| * When true, dependencies are kept in the pom but with scope 'provided'; when false, the dependency is removed. | ||
| */ | ||
|
|
@@ -449,6 +459,19 @@ public void execute() | |
|
|
||
| List<ResourceTransformer> resourceTransformers = getResourceTransformers(); | ||
|
|
||
| if ( createDependencyReducedPom ) | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You have moved this before the Shader works. No changes in behavior?
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. With the tests present in the project today 2 fail with my changes in place.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Apparently the problem that failed the tests made two files. Still the question "No changes in behavior?" remains a valid one. For now: Let's assume there IS a change the current tests did not pick up.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. My verification steps:
@michael-o Is this sufficient verification?
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Will verify! |
||
| { | ||
| createDependencyReducedPom( artifactIds ); | ||
|
|
||
| if ( useDependencyReducedPomInJar ) | ||
| { | ||
| // In some cases the used implementation of the resourceTransformers is immutable. | ||
| resourceTransformers = new ArrayList<>( resourceTransformers ); | ||
| resourceTransformers.addAll( | ||
| createPomReplaceTransformers( project, dependencyReducedPomLocation ) ); | ||
| } | ||
| } | ||
|
|
||
| ShadeRequest shadeRequest = shadeRequest( "jar", artifacts, outputJar, filters, relocators, | ||
| resourceTransformers ); | ||
|
|
||
|
|
@@ -588,11 +611,6 @@ else if ( !renamed ) | |
| } | ||
| } | ||
| } | ||
|
|
||
| if ( createDependencyReducedPom ) | ||
| { | ||
| createDependencyReducedPom( artifactIds ); | ||
| } | ||
| } | ||
| } | ||
| catch ( Exception e ) | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,55 @@ | ||
| package org.apache.maven.plugins.shade.resource; | ||
|
|
||
| /* | ||
| * 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. | ||
| */ | ||
|
|
||
| import org.apache.maven.project.MavenProject; | ||
|
|
||
| import java.io.File; | ||
| import java.util.ArrayList; | ||
| import java.util.List; | ||
|
|
||
| /** | ||
| * Manually creates the resource processors needed to remove the original pom.xml and inject | ||
| * the dependency-reduced-pom.xml in its place in the shaded JAR. | ||
| */ | ||
| public class UseDependencyReducedPom | ||
| { | ||
| public static List<ResourceTransformer> createPomReplaceTransformers( | ||
| MavenProject project, | ||
| File dependencyReducedPomLocation | ||
| ) | ||
| { | ||
| String pomInFinalJarFilename = | ||
| "META-INF/maven/" + project.getGroupId() + "/" + project.getArtifactId() + "/pom.xml"; | ||
|
|
||
| List<ResourceTransformer> resourceTransformers = new ArrayList<>(); | ||
|
|
||
| DontIncludeResourceTransformer removePom = new DontIncludeResourceTransformer(); | ||
| removePom.resource = pomInFinalJarFilename; | ||
| resourceTransformers.add( removePom ); | ||
|
|
||
| IncludeResourceTransformer insertDependencyReducedPom = new IncludeResourceTransformer(); | ||
| insertDependencyReducedPom.file = dependencyReducedPomLocation; | ||
| insertDependencyReducedPom.resource = pomInFinalJarFilename; | ||
| resourceTransformers.add( insertDependencyReducedPom ); | ||
|
|
||
| return resourceTransformers; | ||
| } | ||
| } |
Uh oh!
There was an error while loading. Please reload this page.