Идея classpath состоит в том, чтобы скрыть, откуда приходят классы.У вас могут быть классы с одним и тем же именем, загруженные из разных загрузчиков классов, у вас может быть один и тот же класс в нескольких банках, и вы полагаетесь на порядок путей к классам, чтобы выбрать правильный.
Почему вы хотите знать?Если по какой-либо другой причине, кроме целей отладки / ведения журнала, вы находитесь на опасной почве и должны действовать осторожно.
На самом деле для классов совершенно разумно не иметь jar-файла.Это может происходить в java для любых классов, генерируемых во время выполнения (например, прокси).
В clojure простой пример будет таким, как показано в сеансе repl ниже ... Вы увидите, что предложение @ mikera отлично работает для clojure.lang.Atom
который является встроенным в класс.Но когда вы используете deftype
для создания собственного типа, clojure генерирует класс, и у него нет местоположения ...
user> (prn (-> clojure.lang.Atom
(.getProtectionDomain)
(.getCodeSource)
(.getLocation)))
#<URL file:/workspace/clj-scratch/lib/clojure-1.3.0.jar>
nil
user> (deftype Foo [])
user.Foo
user> (prn (-> (Foo.)
(.getClass)
(.getProtectionDomain)
(.getCodeSource)
(.getLocation)))
nil
nil
user>