2016-02-10 3 views
1

В нескольких блогах я читал, что не рекомендуется (или не возможно) упаковывать банки вне папки WEB-INF. Мне любопытно знать, почему это так ..Почему я не могу упаковать определенные JAR-файлы вне WEB-INF

Для instatnce,

mainStuff.war 
| 
|-->WEB-INF 
| | 
| |-->lib  (having many jars, used by the contents of specificStuff.jar 
| |-->classes 
| |-->web.xml 
| 
|-->META-INF  (having the .MF file and signed files .SF and .DSA) 
| 
| 
|-->index.jsp  (consists of a jnlp xml, referring to the jars in lib) 
| 
| 
|-->specificStuff.jar (this is a separate jar module, which is mentioned in the POM of the war) 

В конфигурации JNLP в index.jsp, я имею в виду банки в Lib как:

<resources>  
    <java version="1.6+"/> 
    <jar href="specificStuff.jar"/> 
    <jar href="lib/someJarthatIneed.jar"/> 
    </resources>  

Теперь, когда я запускаю свой JNLP, я получаю ошибку, которую someJarthatIneed не удалось загрузить. Однако, когда я вручную перемещал lib вне WEB-INF, эта ошибка не возникала.

Итак, что мне нужно знать, так это, есть ли способ упаковать папку lib и все банки вне WEB-INF? OR Почему мой jnlp (который находится вне WEB-INF) не может загрузить банку с WEB-INF/lib. (я попытался изменить путь кувшина, как

<jar href="WEB-INF/lib/someJarthatIneed.jar"/> 

но не получилось ..)

Любая помощь по этому вопросу будет apprciated. :)

+0

Модель развертывания не ясна. У вас есть файл WAR, который загружает загружаемый код через JNLP? Или сам файл WAR должен быть установлен через JNLP? – Thilo

+1

Зачем вам это нужно? Для этого нет никаких оснований. Вот почему вам будет трудно ... – Tunaki

+0

Собственно, specificStuff.jar - это реальное приложение, загруженное через jnlp. Все зависимости этой банки помещаются в папку lib. Кроме того, вся война сама упакована в EAR - (подумал, что эта информация не требуется в этом важном в вышеуказанном контексте) – SoorajSethumadhavan

ответ

1

Спасибо за все предложения ... Но я нашел способ сделать это ..

Я использовал Maven-зависимость-плагин (копия-зависимостей), чтобы скопировать все банки зависимостей в Lib папки в указанное место.

<plugin>  
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <version>2.10</version> 
    <executions> 
     <execution> 
      <id>copy-dependencies</id> 
      <phase>prepare-package</phase> 
      <goals> 
       <goal>copy-dependencies</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>${basedir}/src/main/webapp/lib</outputDirectory> 
       <includeScope>compile</includeScope> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Затем используйте

<packagingExcludes>WEB-INF/lib/</packagingExcludes> 

в ПОМ, где вы используете Maven-боевой плагин, чтобы сделать войну, чтобы удалить Lib папку WEB-INF ..

Так , теперь index.jsp может извлекать все банки из lib.

0

Что находится в WEB-INF, недоступно из http-запросов, а то, что не в WEB-INF, будет рассматриваться как ресурсы и, следовательно, не будет загружено контейнером.

Если ваши приложения, помещенные в WEB-INF/lib, не требуются вашим приложением, просто перемещает их за пределы папки WEB-INF, и они будут рассматриваться как ресурсы.

Вы также можете подумать о создании «uberjar» для вас JNLP jar, упаковывая все зависимости в одну банку.

+0

спасибо за ответ ... Я думал о строительстве UBERJAR .. но, будет Я могу подписать все банки в пределах uberjar, используя jarsigner? Кроме того, будут ли банки доступны из моего index.jsp, который имеет все jnlp-конфигурации ..? – SoorajSethumadhavan