2009-09-11 3 views
0

JDeveloper 10.1.3.xбиблиотеки зависимостей проекта Jdev

Я недавно узнал, что библиотека, которая не экспортируется, не будут включены в пути к классам, когда развертывается на встроенном OC4J контейнера, поскольку он не будет иметь никакого элемента библиотеки в файле application-oc4j-app.xml.

Я также показал себя, что библиотеки, которые не экспортируются в проектах, что мой проект зависит от которые включены в приложение-OC4J-app.xml файл.

Некоммерческие библиотеки в моем проекте не включите. Неэкспортные библиотеки в моих зависимостях проекта do включите.

Является ли это ошибкой или функцией, и могу ли я изменить такое поведение, чтобы не экспортируемые библиотеки в зависимости от проекта также не включались?

Спасибо, Стива

ответ

0

неэкспортируемые библиотеки не должно получить включены в приложении -oc4j-app.xml файла. Похоже, в JDeveloper есть ошибка или какое-то необъяснимое поведение.

IMHO, учитывая выбор между Eclipse или <, вставьте здесь еще одну IDE > и JDeveloper, разумно выбрать Eclipse.

Один из необъяснимого поведения, которые я говорил ранее, был вопрос с JDeveloper компиляции всех проектов в каталоге приложения, даже если они не являются частью текущего файла рабочей области (JWS файла). Другими словами, JDeveloper рассмотрит JPR-файл для включения в рабочую область, даже если в файле JWS указано иное (т. Е. Не отображается визуально в рабочем пространстве JDeveloper).

+0

В случае, если я могу оказать помощь в отношении вашего необъяснимого поведения, я нашел причину чего-то подобного в случае, когда зависимость, установленная в другом проекте, сохраняется, даже если она удалена из рабочей области. Это может сбивать с толку, когда проекты, не находящиеся в рабочей области, создаются, когда вы их не ожидаете.Если вы добавите дочерний проект обратно в рабочую область, вы увидите, что флаг зависимостей снова появится в родительском проекте. Вероятно, вы также можете определить невидимую зависимость, отредактировав исходный файл проекта напрямую. – Steven

+0

Ах да, одна из тех вещей, которые вы найдете только путем проб и ошибок. По этой причине я избегаю JDev + встроенного OC4J. Более эффективно использовать Ant/Maven и развертывать приложение на отдельном экземпляре OC4J. –

+0

Я не уверен, была ли ваша проблема решена. Не могли бы вы подтвердить? –

0

На сегодняшний день я не нашел способ указать разные пути к классам для сборки и времени выполнения, но с помощью коллеги было разрешено решение моей конкретной ситуации. Несмотря на то, что соединитель не является проектом JDev, зависимый проект может ссылаться на файл jar logjj, который упакован и загружен с ним. Это эффективно имитирует поведение во время выполнения как автономного, так и встроенного развертывания контейнера oc4j, в котором веб-приложение и связанный с ним код приложения привязываются к экземпляру log4j, загружаемому загрузчиком классов класса JCA-класса. Я не думал, что это будет работать, если предположить, что библиотека log4j, загруженная двумя разными загрузчиками классов, по-прежнему будет представлять собой два разных экземпляра библиотеки относительно статических инициализаторов log4j. (Это то, что я предполагаю, мотивирует log4j выбросить исключение, если он найдет другой экземпляр сам по себе в иерархии загрузчика классов.) По-видимому, это не так, по крайней мере для встроенного сценария. Мне не нужно проверять это для автономного контейнера, так как сборка Maven не включает в себя копию библиотеки журнала log4j в файле EAR приложения через «предоставленную» спецификацию области в файле сборки. Вложенный контейнер OC4J теперь загружает соединитель JCA, соответствующий экземпляр библиотеки log4, развертывает приложение и позволяет использовать классы log4j из одного и того же файла библиотеки log4j. Не совсем уверен в том, как взаимодействуют загрузчики классов и веб-приложений, но теперь это работает.

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

  • Нет связанных вопросов^_^