Hi Michael,

Your error message refers to the maven-compiler-plugin. Are you sure the
shade plugin is the culprit? Normally shade is bound to a later phase. If
you need further detailed assistance, share your project (or an MCVE) with
us.

Regards,
Curtis
On Jun 25, 2015 5:16 PM, "[email protected]" <[email protected]>
wrote:

>  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]> 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]" <[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]
>> > For additional commands, e-mail: [email protected]
>> >
>> >
>>
>
>
>

Reply via email to