Я в процессе переноса WAR из сборки Ant в сборку Maven. В сборке Ant наш код был упакован в JAR, который был помещен в WEB-INF/lib
. С Maven мы идем со стандартным поведением компиляции файлов классов в WEB-INF/classes
.
У нас есть класс, который пытается определить, происходит ли класс (с отражательной ссылкой) из нашей WAR. Это можно сделать, посмотрев на классы 'ProtectionDomain
' * CodeSource
:
aClass.getProtectionDomain().getCodeSource().getLocation().getPath()
Когда классы были в файле JAR, это вернуло бы местоположение содержащего JAR-файла. На моей машине для разработки Windows (с использованием Oracle JDK 8), когда классы находятся в WEB-INF/classes
, это возвращает путь к каталогу WEB-INF/classes
в разобранной структуре WAR.
Однако на наших производственных серверах (RHEL 7 / CentOS 7, Tomcat 7.0.76, Open JDK 8), в последнем случае он возвращает полный путь к самому файлу .class
. Т.е. кажется, что для каждого файла класса загружается отдельный ProtectionDomain
.
Я пытаюсь понять, что в данном случае приводит к созданию различных ProtectionDomain
s. Я не смог определить, что отличается между моей средой разработки Windows и производственной средой RHEL. У кого-нибудь есть понимание?