Harsh J created HADOOP-9424:
-------------------------------

             Summary: 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


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

Reply via email to