2012-05-22 3 views
4

Я создал множество проектов в Eclipse 3.7.2. Давайте приведем некоторые из них имя:Транзитивные зависимости проекта в Eclipse WTP

  • W (динамический веб-проект)
  • A (некоторые библиотеки)
  • B (библиотека с большим количеством общего материала, который используется в других проектах тоже)

Проект A зависит от проекта B, поэтому B находится в пути сборки A. Проект W зависит от проекта A, поэтому я добавил A как сборку развертывания в W.

Когда я экспортирую WAR из Eclipse, только JAR-файл для A добавляется в WEB-INF/lib. Eclipse показывает следующее предупреждение:

Элемент pathpath/B не будет экспортирован или опубликован. Runtime Это может привести к вызову ClassNotFoundException.

Предупреждение верно. Я получаю ClassNotFoundExceptions во время выполнения. Разумеется, Eclipse предоставляет быстрое исправление для предупреждения, которое является «Отметить связанную исходную запись класса пути как зависимость публикации/экспорта». Однако это не устраняет мою проблему. B до сих пор не разворачивается с W.

Я попытался вручную добавить B как сборку развертывания в A. Это включает в себя B.jar в A.jar, который не является тем, что я хочу, и я все еще получаю ClassNotFoundExceptions.

Единственное, что работает, - это вручную добавить B как сборку развертывания в W. Eclipse по-прежнему показывает предупреждение сверху, но исключения во время выполнения исчезли.

Я пропустил что-то или это действительно единственный способ заставить это работать?

+0

Вы используете плагин m2eclipse? Вы используете maven build для генерации войны? –

+0

В настоящее время я не использую Maven для создания войны. Это одна из вещей, которые я хотел бы сделать в будущем. До тех пор я строю войну с Eclipse и ее функцию экспорта. –

+0

В конфигурации пути сборки A попробуйте установить B как «экспортированный» – miniBill

ответ

4

Чтобы сделать работу «Экспорт/Веб/WAR-файл Eclipse», вы должны сделать свой проект «b» для отображения в контейнере «Библиотеки веб-приложений».

Вы можете редактировать конфигурацию развертывания с помощью страницы Assembly развертывания в свойствах проекта и добавить свой проект «б» там:

deployment assembly

В качестве альтернативы, вы можете открыть файл конфигурации в /w/.settings/org.eclipse.wst.common.component и добавить ссылку на проект «б» вручную:

<?xml version="1.0" encoding="UTF-8"?> 
<project-modules id="moduleCoreId" project-version="1.5.0"> 
    <wb-module deploy-name="w"> 
     <wb-resource deploy-path="/" source-path="/WebContent" tag="defaultRootSource"/> 
     <wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/> 
     <dependent-module archiveName="a.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/a/a"> 
      <dependency-type>uses</dependency-type> 
     </dependent-module> 
     <dependent-module archiveName="b.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/b/b"> 
      <dependency-type>uses</dependency-type> 
     </dependent-module> 
     <property name="context-root" value="w"/> 
     <property name="java-output-path" value="/w/build/classes"/> 
    </wb-module> 
</project-modules> 

как только это будет сделано, вы увидите проект «Ъ» в «Web App Libraries» Путь к классам контейнера и экспорта в WAR файл будет также добавить b.jar в WEB-IN F/Lib.

+0

Спасибо за ваш ответ, поэтому я уже знал это решение. Я надеялся, что есть лучший способ сделать это. В идеале Eclipse автоматически добавляет b.jar, поскольку он уже знает, что a зависит от b. Как-то похоже, что WTP не поддерживает подобные зависимости. –

+1

Как было предложено кем-то, при использовании Maven и m2eclipse с поддержкой WTP будет правильно генерировать конфигурацию проекта с переходными зависимостями. –

+0

Похоже, мне действительно нужно взглянуть на Мейвена в ближайшее время. –

Смежные вопросы