Где хранить зависимости в портлете Liferay
Это, вероятно, очень простой вопрос, но управление зависимостями в Ja va - это кошмар для меня. У меня есть Liferay portelt (Liferay 6.05 развернут на JBoss AS 6), и я пытаюсь использовать в нем батик. Когда я ссылаюсь на batik.jar (и, возможно, некоторые другие файлы jar из дистрибутива) в Eclipse (свойства -> путь сборки -> добавить внешние файлы jar), IDE говорит, что все в порядке и не выдает ошибок.
Однако, когда я развертываю свой портлет на сервере, я получаю ClassNotFoundException - портлет не находит jar-файлы, на которые я ссылался ранее. Я чувствую, что проблема в том, что я ссылаюсь только на эти jar-файлы на моей локальной машине, а они отсутствуют на сервере (они также не развертываются в каталоге WEB-INF/lib портлета).
Должен ли я скопировать эти банки в другое место? Perhpas где-нибудь в каталоге liferay? Или в каталог, куда распаковывается JBOSS AS?
Спасибо за любые советы. Я постараюсь прояснить ситуацию, если это звучит слишком запутанно...
1 ответ
Чтобы пользовательский портлет работал правильно, в WEB-INF/lib
портлета или в глобальном classpath сервера что-то вроде /liferay-portal-6.0/jboss/server/default/lib
или же .../lib/ext
,
Поэтому, если вы разрабатываете много портлетов с использованием одних и тех же файлов зависимостей, вы можете хранить их в глобальном пути к классу Сервера, для этого потребуется перезапустить сервер, если потребуется изменить любой из этих файлов. Таким образом, все портлеты и даже портлеты liferay (если вы думаете об использовании классов батика в хуке или чем-то еще) будут иметь доступ к банкам батика.
Или же, если вы используете инструмент сборки, такой как ANT или MAVEN, тогда у вас может быть скрипт, который будет выполняться при создании файла WAR и который автоматически скопирует необходимые jar-файлы в ваш портлет WEB-INF/lib
на войне.
Или вы можете скопировать их на свой WEB-INF/lib
каждого портлета, который вы разрабатываете вручную:-)