CodeInside / siu

Госуслуги.Open - Система исполнения государственных и муниципальных услуг
20 stars 9 forks source link

Osgi добавление зависимотей к модулю #18

Closed provorkova closed 9 years ago

provorkova commented 9 years ago

Добрый день. Подскажите пожалуйста, как следует добавлять новую зависимость в модуль web-client? Мне нужно добавить библиотеку jasperreports. В описание плагина maven-bundle-plugin в раздел Import-Package добавила строку net.sf.jasperreports.*, Но при старте glassfish выбрасывается исключение:

[#|2015-05-28T17:00:15.288+0400|INFO|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=16;_ThreadName=Thread-2;|Error while starting bundle: file:/home/siuadmin/glassfish3/glassfish/domains/domain1/autodeploy/bundles/web-client-1.1.3.jar: org.osgi.framework.BundleException: Unresolved constraint in bundle ru.codeinside.web-client [339]: Unable to resolve 339.21: missing requirement [339.21] osgi.wiring.package; (osgi.wiring.package=net.sf.jasperreports.engine)|#]

[#|2015-05-28T17:00:15.289+0400|INFO|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=16;_ThreadName=Thread-2;|org.osgi.framework.BundleException: Unresolved constraint in bundle ru.codeinside.web-client [339]: Unable to resolve 339.21: missing requirement [339.21] osgi.wiring.package; (osgi.wiring.package=net.sf.jasperreports.engine) at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3826) at org.apache.felix.framework.Felix.startBundle(Felix.java:1868) at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:944) at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:1175) at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:1153) at org.apache.felix.fileinstall.internal.DirectoryWatcher.processAllBundles(DirectoryWatcher.java:1146) at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:456) at org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:263) |#]

Вы можете мне помочь разобраться с подключением библиотеки?

provorkova commented 9 years ago

При сборке модуля возникает предупреждение: Did not find matching referal for net.sf.jasperreports.*.

dmitry-titov commented 9 years ago

Добрый день, jasperreports добавляли в зависимости web-client? < dependency > < groupId >net.sf.jasperreports</ groupId > < artifactId >jasperreports</ artifactId > < version >6.1.0</ version > </ dependency >

provorkova commented 9 years ago

Да, мавен-зависимости добавила. Еще в файле MANIFEST.MF в разделе Import-Package не появилась строка jasperreports

dmitry-titov commented 9 years ago

Попробуйте, еще добавить в < Embed-Dependency > artifactId=jasperreports;inline=false

provorkova commented 9 years ago

Тогда при сборке появляется ошибка http://pastebin.ru/kNLUy5oS

provorkova commented 9 years ago

Смогла добавить jasperreports в < Embed-Dependency >, но проблема Unresolved constraint in bundle не решилась

dmitry-titov commented 9 years ago

Та же самая ошибка?

"[#|2015-05-28T17:00:15.289+0400|INFO|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=16;_ThreadName=Thread-2;|org.osgi.framework.BundleException: Unresolved constraint in bundle ru.codeinside.web-client [339]: Unable to resolve 339.21: missing requirement [339.21] osgi.wiring.package; (osgi.wiring.package=net.sf.jasperreports.engine) at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3826) at org.apache.felix.framework.Felix.startBundle(Felix.java:1868) at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:944) at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:1175) at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:1153) at org.apache.felix.fileinstall.internal.DirectoryWatcher.processAllBundles(DirectoryWatcher.java:1146) at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:456) at org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:263) |#]"

provorkova commented 9 years ago

да

dmitry-titov commented 9 years ago

Помимо добавления jasperreports, необходимо добавить также все dependency из него, а также добавить их в < Embed-Dependency >. Нужно еще учесть, что некоторые пакеты необходимо будет добавить в список игнорируемых, список этих пакетов будет в логах при сборке модуля. Стоит также учесть, что не все библиотеки автоматически подгрузятся, поэтому их необходимо будет скачать и добавить вручную в локальный репозиторий maven. Скажите, в связи с чем связанно добавление библиотеки jasperreports, возможно есть более простой путь решения вашей задачи?

provorkova commented 9 years ago

Подскажите пожалуйста, можно ли добавить jasperreports.jar в Bundle-Classpath, как формируется содержимое WEB-INF/lib?

provorkova commented 9 years ago

Использование библиотеки jasperreports вызвано необходимостью добавлять шаблоны печатных форм для результатов запросов межведомственного взаимодействия

dmitry-titov commented 9 years ago

СИУ - это WAB (web application bundle) и он собирается с помощью bundle плагина. Модуль должен сначала быть правильным OSGi модулем, и только потом похож на WEB-приложение. Bundle плагин - подготавливает модуль. Зависимости, которые внедряются - помещаются внутрь jar, другие зависимости объявляются через секцию импорта, при этом они должны быть в контейнере, иначе модуль не запустится.

<_wab>${project.basedir}/src/main/webapp - включает режим WAB WEB-INF/lib - здесь указание на совместимость WEB < Embed-Dependency >.. - указываются инструкции, которые будут встраиваться. < Import-Package >.. - указываются инструкции, от которых зависит библиотека (лучше от API) Поэтому для jasperreports.jar нужно внедрить все его обязательные зависимости, необязательные объявить игнорируемыми или опциональными.
provorkova commented 9 years ago

разобралась, спасибо за помощь