[ https://issues.apache.org/jira/browse/HADOOP-9424?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13609152#comment-13609152 ]
Colin Patrick McCabe commented on HADOOP-9424: ---------------------------------------------- This looks reasonable. I can't think of any reason we wouldn't want to put the passed jar on the classpath before invoking RunJar. > The "hadoop jar" invocation should include the passed jar on the classpath as > a whole > ------------------------------------------------------------------------------------- > > Key: HADOOP-9424 > URL: https://issues.apache.org/jira/browse/HADOOP-9424 > Project: Hadoop Common > Issue Type: Bug > Components: util > Affects Versions: 2.0.3-alpha > Reporter: Harsh J > Assignee: Harsh J > Priority: Minor > Attachments: HADOOP-9424.patch > > > When you have a case such as this: > {{X.jar -> Classes = Main, Foo}} > {{Y.jar -> Classes = Bar}} > With implementation details such as: > * Main references Bar and invokes a public, static method on it. > * Bar does a class lookup to find Foo (Class.forName("Foo")). > Then when you do a {{HADOOP_CLASSPATH=Y.jar hadoop jar X.jar Main}}, the > Bar's method fails with a ClassNotFound exception cause of the way RunJar > runs. > RunJar extracts the passed jar and includes its contents on the ClassLoader > of its current thread but the {{Class.forName(…)}} call from another class > does not check that class loader and hence cannot find the class as its not > on any classpath it is aware of. > The script of "hadoop jar" should ideally include the passed jar argument to > the CLASSPATH before RunJar is invoked, for this above case to pass. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira