Зависимость войны ищет файл в classpath - PullRequest
1 голос
/ 28 марта 2012

Я использую разделяемую библиотеку как зависимость от моего проекта Java EE. Файл войны развертывается в Tomcat.

Общая библиотека опирается на файл, найденный в пути к классам. Есть ли способ гарантировать, что файл будет в пути к классам? Я не могу жестко указать путь к файлу в общей библиотеке. Также я не могу избежать использования классов, которые в этом нуждаются.

Ответы [ 3 ]

1 голос
/ 28 марта 2012

Упаковка вашей WAR

Самое простое решение - по возможности упаковывать все зависимые JAR-файлы и классы в развертываемый WAR-файл. Затем вы можете контролировать, как они загружаются из указанного вами пути к классам.

Как уже упоминалось в BGR, все ваши скомпилированные Java-ресурсы (файлы * .class) должны быть доступны в вашем WAR-файле в каталоге web-inf\classes

Любые поддерживающие JAR-файлы должны находиться в каталоге web-inf\lib внутри вашего WAR-файла.

Tomcat знает об этих структурах каталогов, так как это стандартный формат файлов WAR.

Конечно, вы можете отклониться от этой стандартной структуры и загружать JAR-файлы из других мест за пределами вашей WAR, но тогда вам нужно понять потенциальные проблемы с загрузкой классов. То, что я упомянул, - это самый простой путь вперед.

Существует ли файл в пути к классам?

В вашем приложении вы можете сделать что-то подобное, чтобы проверить, существует ли определенный путь к вашему classpath.

URL resource = this.getClass().getClassLoader().getResource(path);

Вот некоторые дополнительные сведения из Oracle о Независимый от местоположения доступ к ресурсам

1 голос
/ 28 марта 2012

Если разделяемая библиотека (например, lib1) - ваша, тогда вы можете упаковать необходимые файлы в ее флягу. Корневая папка фляги является корнем classpath.

Если lib1 сторонний, вы можете создать библиотеку lib1-res с этим файлом в jar. И всегда используйте эти библиотеки вместе (сделайте lib1-res зависимым от lib1 в случае использования maven).

0 голосов
/ 28 марта 2012

Все в WEB-INF / классах в вашей войне находится в «classpath» (при условии, что оно ищется классом, загруженным с использованием URLClassLoader вашего веб-приложения).

Можно ли скопировать туда файл во время упаковки?

...