2012-05-08 48 views
4

當使用Class.getResource()並提供相當常見的資源名稱(如"license.html")時,Java可能會從CLASSPATH中早先列出的另一個JAR文件加載"license.html"資源,但可能與我的應用程序完全無關。有沒有辦法強制類加載器第一次嘗試從我的類所在的同一JAR文件加載資源,並且只有在找不到時才查看CLASSPATH上的其他JAR文件?從班級自己的JAR文件加載資源

+6

*'common resource name,like'「license.html」''*給它一個不尋常的路徑的好理由,比如''com/our/app/license.html 「'。 –

+0

您的資源應該以明確的方式命名 - 這意味着如果在另一個「ClassLoader」中存在匹配,應該考慮它。然後你會'getResources()'列出所有這些匹配。 – Romain

+1

+1給Andrew;想想它和軟件包命名一樣。 –

回答

4

另外,您可以使用JarURLConnection如果你知道在你的文件所在的確切罐子:

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

我想我應該能夠找出什麼時候有類文件? – mstrap

+0

@mstrap如果您知道license.html文件所在的確切jar文件,那麼應該可以工作,否則回到原來的位置。 –

+2

'URL urlToClass = obj.getClass()。getProtectionDomain()。getCodeSource()。getLocation();'注意:需要信任/沒有安全管理器,並且對於applet和JWS,即使緩存也會指向服務器。 –

3

..common資源的名稱,如 「的license.html」」

一個很好的理由給它一個不尋常的路徑,例如根據package的名字。
E.G. "/com/our/app/license.html"不太可能與其他任何相沖突license.html