Matt/Curtis,

I tried using both packages and a higher package with no luck, I get the same error message: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3:compile (default-compile) on project aws-java-sdk-s3: Compilation failure[ERROR] \dev\CSJ\aws\aws-sdk-java-1.10.1\aws-java-sdk-s3\src\main\java\com\amazonaws\services\s3\internal\S3ObjectResponseHandler.java:[54,26] error: no suitable constructor found for S3ObjectInputStream(InputStream,org.shaded.http.client.methods.HttpRequestBase)

I tried:
                    <relocations>
                        <relocation>
                            <pattern>org</pattern>
<shadedPattern>shaded</shadedPattern>
                        </relocation>
                    </relocations>
and:
                    <relocations>
                        <relocation>
<pattern>org.apache</pattern>
<shadedPattern>org.shaded</shadedPattern>
                        </relocation>
                        <relocation>
<pattern>org.apache.http</pattern>
<shadedPattern>org.shaded.http</shadedPattern>
                        </relocation>
                        <relocation>
<pattern>org.apache.http.methods</pattern>
<shadedPattern>org.shaded.http.methods</shadedPattern>
                        </relocation>
                    </relocations>

Has anyone else had luck with trying to shade the AWS Java SDK? Can anyone with more experience try and build the project given my configuration and tell me the results?

Thanks,
Michael
On 6/25/2015 10:27 AM, Curtis Rueden wrote:
Hi Matt and Michael,

Matt Benson wrote:
> In my experience you must relocate each individual package; simply
> relocating org.apache.http is not sufficient.

In my experience, the maven-shade-plugin will process subpackages which match the given patterns. Here is a working example that shades all of Jython's dependencies:

https://github.com/scijava/jython-shaded/blob/jython-shaded-2.5.3/deps/pom.xml#L56-L93

Regards,
Curtis

On Thu, Jun 25, 2015 at 7:25 AM, Matt Benson <[email protected] <mailto:[email protected]>> wrote:

    In my experience you must relocate each individual package; simply
    relocating org.apache.http is not sufficient.

    Matt
    On Jun 25, 2015 6:11 AM, "[email protected]
    <mailto:[email protected]>" <[email protected]
    <mailto:[email protected]>>
    wrote:

    > I have been attempting to "shade"[1] the AWS Java SDK[2] version
    1.10.1,
    > specifically the S3 SDK, to relocate the Apache HTTPCompontents[3]
    > libraries. I am attempting to do this in order to resolve a
    dependency
    > conflict with another more complicated project which is also
    dependent on
    > an older version of HTTPComponents. So far I have been
    unsuccessful and
    > can't determine if it is misconfiguration or an issue with the
    plugin. I
    > hope it is the former.
    >
    > First I added a Maven Shade configuration to the
    aws-java-sdk-core pom.xml:
    > <plugin>
    > <groupId>org.apache.maven.plugins</groupId>
    > <artifactId>maven-shade-plugin</artifactId>
    >    <version>2.4</version>
    >    <configuration>
    >       <artifactSet>
    >          <includes>
    >  <include>com.amazonaws:*</include>
    > <include>org.apache.httpcomponents:*</include>
    >          </includes>
    >       </artifactSet>
    >       <relocations>
    >          <relocation>
    >  <pattern>org.apache.http</pattern>
    > <shadedPattern>org.shaded.http</shadedPattern>
    >          </relocation>
    >       </relocations>
    >    </configuration>
    >    <executions>
    >       <execution>
    >          <phase>package</phase>
    >          <goals>
    >             <goal>shade</goal>
    >          </goals>
    >       </execution>
    >    </executions>
    > </plugin>
    >
    > This seems to work fine and produces a jar that seems to be as
    expected
    > when I build the project using "mvn clean install -Dgpg.skip=true
    > -DskipTests=true", although I haven't tested it. Second, I
    modify the
    > aws-java-sdk-s3 pom.xml as follows:
    > <plugin>
    > <groupId>org.apache.maven.plugins</groupId>
    > <artifactId>maven-shade-plugin</artifactId>
    >    <version>2.4</version>
    >    <configuration>
    >  <shadeSourcesContent>true</shadeSourcesContent>
    >  <createSourcesJar>true</createSourcesJar>
    >       <artifactSet>
    >          <includes>
    >  <include>com.amazonaws:*</include>
    > <include>org.apache.httpcomponents:*</include>
    >          </includes>
    >       </artifactSet>
    >       <relocations>
    >          <relocation>
    >  <pattern>org.apache.http</pattern>
    > <shadedPattern>org.shaded.http</shadedPattern>
    >          </relocation>
    >       </relocations>
    >    </configuration>
    >    <executions>
    >       <execution>
    >          <phase>package</phase>
    >          <goals>
    >             <goal>shade</goal>
    >          </goals>
    >       </execution>
    >    </executions>
    > </plugin>
    >
    > By itself this produces build errors like this:
    > [ERROR]
    >
    
\dev\CSJ\aws\aws-sdk-java-1.10.1\aws-java-sdk-s3\src\main\java\com\amazonaws\services\s3\model\S3ObjectInputStream.java:[20,29]
    > error: package org.apache.http.client does not exist
    >
    > So I added an explicit dependency on HTTPComponents to the S3
    pom.xml:
    > <dependency>
    > <groupId>org.apache.httpcomponents</groupId>
    >    <artifactId>httpclient</artifactId>
    >    <version>4.3.6</version>
    > </dependency>
    >
    > When I build I get only one error:
    > [ERROR]
    >
    
\dev\CSJ\aws\aws-sdk-java-1.10.1\aws-java-sdk-s3\src\main\java\com\amazonaws\services\s3\internal\S3ObjectResponseHandler.java:[54,26]
    > error: no suitable constructor found for
    >
    
S3ObjectInputStream(InputStream,org.shaded.http.client.methods.HttpRequestBase)
    >
    > It appears to me that the "shading" is not actually relocating the
    > http.client.methods.HttpRequestBase argument to the
    S3ObjectInputStream
    > class within the code. Running javap confirms this:
    > $ javap
    >
    target/classes/com/amazonaws/services/s3/model/S3ObjectInputStream.class
    > Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8
    > Compiled from "S3ObjectInputStream.java"
    > public class com.amazonaws.services.s3.model.S3ObjectInputStream
    extends
    > com.amazonaws.internal.SdkFilterInputStream {
    >   public
    >
    com.amazonaws.services.s3.model.S3ObjectInputStream(java.io.InputStream,
    > org.apache.http.client.methods.HttpRequestBase);
    >   public
    >
    com.amazonaws.services.s3.model.S3ObjectInputStream(java.io.InputStream,
    > org.apache.http.client.methods.HttpRequestBase, boolean);
    >   public void abort();
    >   public org.apache.http.client.methods.HttpRequestBase
    getHttpRequest();
    >   public int available() throws java.io.IOException;
    > }
    >
    > Can anyone point out if my configuration is wrong, my methodology is
    > wrong, or the Maven Shade plugin is actually not behaving as
    expected?
    >
    > [1] http://maven.apache.org/plugins/maven-shade-plugin/index.html
    > [2] https://github.com/aws/aws-sdk-java
    > [3] https://hc.apache.org/
    >
    > Thanks,
    > --
    > Michael
    >
    >
    ---------------------------------------------------------------------
    > To unsubscribe, e-mail: [email protected]
    <mailto:[email protected]>
    > For additional commands, e-mail: [email protected]
    <mailto:[email protected]>
    >
    >



Reply via email to