2012-05-08 6 views
4

При использовании Class.getResource() и подачи, а общее название ресурса, как "license.html", Java может загрузить "license.html" ресурс из другого JAR-файла, которая указана ранее в CLASSPATH, но может быть совершенно не связаны с моим приложением , Есть ли способ заставить ClassLoader сначала попытаться загрузить ресурс из того же файла JAR, в котором находится мой класс, и только если он не найден, посмотрите в других JAR на CLASSPATH?нагрузка ресурс из собственного файла JAR класса

+6

* 'общее имя ресурса, например '' license.html "' * * Хорошая причина, чтобы дать ему необычный путь, например '' com/our/app/license.html «'. –

+0

Ваши ресурсы должны быть названы таким образом, чтобы сделать их однозначными - это означает, что если есть совпадение в другом «ClassLoader», его следует учитывать. Затем вы получите 'getResources()', чтобы перечислить все такие совпадения. – Romain

+1

+1 к Эндрю; думайте об этом так же, как именование пакетов. –

ответ

4

В качестве альтернативы можно использовать JarURLConnection, если вы знаете точный банку, в котором ваш файл находится:

jar:<url>!/{entry} 
+0

Я предполагаю, что должен иметь возможность узнать, когда есть файл класса? – mstrap

+0

@mstrap Если вы знаете точный файл jar, в котором находится ваш файл license.html, это должно работать, в противном случае - обратно к квадрату. –

+2

'URL urlToClass = obj.getClass(). GetProtectionDomain(). GetCodeSource(). GetLocation();' Примечание. Требуется доверительный/нет диспетчер безопасности, а для апплетов и JWS - на сервер, даже если кэшируется. –

3

..common имя ресурса, как "license.html"»

Хорошая причина дать ему необычный путь, например, в соответствии с именем package.
E.G. "/com/our/app/license.html" вряд ли столкнется с любым другим license.html

Смежные вопросы