MyClass.class.getResource ("MyClass.class"). GetPath () возвращает разные пути в JBoss 4.2.3 и JBoss 5.1.0 - PullRequest
0 голосов
/ 13 июня 2011

В одной из моих библиотек (скажем, abc.jar ) у меня есть класс MyClass.class.Поскольку мне нужно понять, во время выполнения, в каком каталоге находится файл abc.jar , была использована следующая логика.

String classPath = MyClass.class.getResource("MyClass.class").getPath();

В JBoss4.2.3, это приведет к тому, что classPath будет примерно таким:

file:/D:/app-servers/jboss-4.2.3.GA/server/uat012/deploy/MyApp.war/WEB-
INF/lib/abc.jar!/com/foo/bar/MyClass.class

, тогда как в JBoss 5.1.0 classPath возвращается как

/D:/app-servers/jboss-5.1.0.GA/server/uat012/deploy/MyApp.war/WEB-
INF/lib/abc.jar/com/foo/bar/MyClass.class

Разница в том, чтоне начинается с 'file' и '!'символ, который разделяет местоположение фляги и местоположение класса в фляге, также отсутствует.

Итак, из-за различий в загрузке классов в JBoss 5.1.0?

Каков наилучший способ определить местоположение банки из файла заданного класса, независимого от сервера веб / приложений и обычной JVM ?

1 Ответ

1 голос
/ 13 июня 2011

Краткий ответ: небезопасно делать то, что вы хотите, поскольку не гарантируется, что файл jar, который вы пытаетесь найти, даже существует.Что если банка была расширена?Что если сервер приложений использует другую форму хранения (например, в базе данных)?Расположение jar-файла - это деталь реализации, которая не должна быть важной для приложения.

Тем не менее, если вы ДОЛЖНЫ сделать это (указывает на плохой дизайн), вам придется попробовать его на каждой целевой платформеи напишите код для конкретной платформы, который вам придется пересматривать при каждом обновлении до последней версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...