Hi, Timothy,
Thanks for your reply. Seems jarjar is a solution for me. I have a basic
question to follow:

I don't quite understand what is tag <keep> for ?

My understand is
1.
use <include> to grab the maven dependencies I want to re-package,
2.
then use <pattern> and <result> in <rule> to define what class to
re-package and what's the new name for re-packaged binary.
3.
And use <keep> to indicate which class in the project will only use this
re-packaged dependencies, in my case, it is JDBC class. Am I right ?

below pom doesn't work for me, and JDBC class and other class still share
the same thrift 0.9. Thrift 0.7 is omitted.

Thanks a lot for help,
Johnny

<dependency>

<groupId>org.apache.thrift</groupId>

<artifactId>libthrift</artifactId>

<version>0.9.0</version>

</dependency>

......

......

<plugin>

<groupId>org.sonatype.plugins</groupId>

      <artifactId>jarjar-maven-plugin</artifactId>

      <executions>

           <execution>

             <phase>package</phase>

             <goals>

               <goal>jarjar</goal>

             </goals>

             <configuration>

               <includes>

                 <include>*org.apache.thrift:libthrift*</include>

               </includes>

               <rules>

                 <rule>

                   <pattern>org.apache.thrift.**</pattern>

                   <result>com.xxx.JDBC.class.pattern.internal.thrift.@1</
result>

                 </rule>

                 <keep>

                   <pattern>com.xxx.JDBC.class.pattern.**</pattern>

                  </keep>

               </rules>

             </configuration>

           </execution>

        </executions>

</plugin>


On Thu, Oct 10, 2013 at 12:28 PM, Timothy Potter <thelabd...@gmail.com>wrote:

> Hi Zhang,
>
> I have the same issue in that I use some Cassandra client API's that
> depend on Thrift 0.7 and HCatalog 0.11 that depends on Thrift 0.9. I opted
> for using the jarjar utility to "shade" the thrift 0.9 classes. Here's what
> I added to the build.xml file for the hcatalog-pig-adapter project:
>
> <target name="jarjar">
>     <echo message="basedir=${basedir}"/>
>     <copy file="${basedir}/../core/build/hcatalog-core-0.11.0.jar"
> todir="${basedir}/deps"/>
>     <copy file="${basedir}/build/hcatalog-pig-adapter-0.11.0.jar"
> todir="${basedir}/deps"/>
>     <copy todir="${basedir}/deps">
>       <fileset dir="${basedir}/../../build/dist/lib"
> includes="hive-*.jar"/>
>     </copy>
>     <taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask"
> classpath="lib/jarjar-1.4.jar"/>
>     <jarjar jarfile="hcat-pig-shaded.jar">
>         <zipgroupfileset dir="deps" includes="*.jar"/>
>         <rule pattern="org.apache.thrift.**" result="org.shaded.thrift.@1
> "/>
>     </jarjar>
> </target>
>
> I basically cooked up a deps directory that contains all the JARs that the
> hcatalog-pig-adapter depends on and then used jarjar to create a single jar
> with the thrift classes renamed at the bytecode level to org.shaded.thrift
>
> You can do something similar for the JDBC code.
>
> Cheers,
> Tim
>
>
>
> On Thu, Oct 10, 2013 at 1:19 PM, Edward Capriolo <edlinuxg...@gmail.com>wrote:
>
>> You are kinda screwed. Thrift is wire-compatible in many cases but not
>> API compatible. You can not have two applications build off two versions of
>> thrift in the same classpath without something like OSGI. To insulate the
>> class loaders from each other.
>>
>> Your best bet is upgrading "other component" to thrift 9
>>
>>
>> On Thu, Oct 10, 2013 at 3:09 PM, Zhang Xiaoyu 
>> <zhangxiaoyu...@gmail.com>wrote:
>>
>>> Hi, all,
>>> I am writing a piece of code talking to Hive 0.11 Hive Server 2. The
>>> JDBC code depends on libthrift 0.9. However one component which depends on
>>> libthrift 0.7 and not binary compatible with libthrift 0.9.
>>>
>>> When I downgrade to 0.7, I got below NoClassDefFoundError:
>>> org/apache/thrift/scheme/StandardScheme.
>>>
>>> Any idea how to make HS2 working with thrift 0.7? Thanks.
>>>
>>> Johnny
>>>
>>
>>
>

Reply via email to