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]>
>
>