Переходные зависимости проекта в Eclipse WTP


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

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

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

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

Запись classpath /б не будет экспортировать и публиковать. Во время выполнения ClassNotFoundExceptions может привести.

Предупреждение верно. Я получаю ClassNotFoundExceptions во время выполнения. Конечно, Eclipse предоставляет быстрое исправление для предупреждения ,которое "помечает связанную запись raw classpath как зависимость публикации / экспорта". Однако это не решает мою проблему. B все еще не развертывается с W.

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

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

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

1 4

1 ответ:

Чтобы заставить Eclipse "Export / Web / WAR File" работать, вы должны сделать так, чтобы ваш проект "b" появился в контейнере "Web App Libraries".

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

узел развертывания

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

<?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>

Как только это будет сделано, вы увидите проект "b" в "веб-приложении Библиотеки " контейнер classpath и экспорт в файл WAR также добавят b.jar в WEB-INF / lib.