Я CM и отвечаю за наш процесс непрерывной сборки, помогая разработчикам правильно определять и использовать сборки. Я пытаюсь настроить все так, чтобы разработчику просто нужно было загрузить модуль из системы управления исходным кодом, и набрать ant
или maven
, и все заработало.
В проектах Ant я либо использую ivy
, либо у меня есть каталог lib
, содержащий необходимые сторонние jar-файлы. Это помогает мне четко определить все зависимости и позволяет разработчикам легко создать модуль для своей системы. Да, есть некоторая зависимость от правильной версии JDK, и в некоторой степени от правильной версии Ant, но даже они немного гибкие. Помимо Ecipse и Jenkins / Hudson, вы можете определить точные версии JDK и Ant, которые вы хотите использовать.
Проблема в том, что этот проект зависит от Weblogic 10.3 (он же 11g). До появления Weblogic 10 вы могли бы просто покончить с использованием только файла weblogic.jar и, возможно, одного или двух других jar-файлов. Начиная с Weblogic 10, банки теперь «модульные».
Когда я делаю сборку, я все равно просто включаю weblogic.jar
в мой путь к классам. Однако weblogic.jar
в своем файле MANIFEST.MF
содержит ссылки на каталог ..\..\..\modules\features
(который фактически является родительским каталогом, который содержит Weblogic 10.3!). Здесь находятся банки, в которых нет путей к классам, но сами они имеют путь к классам, встроенный в MANIFEST.MF
, который указывает на другие банки. Это, в свою очередь, может относиться к другим банкам.
Я полагаю, у меня есть один из следующих вариантов:
- Включите все 10900 файлов, 700Mb Weblogic, в мой исходный репозиторий для каждого модуля.
- Каким-то образом загрузите Weblogic, используя Maven или Ivy в качестве одного tarball. Распакуйте файл, затем выполните сборку.
- Скажите разработчикам, что они должны загрузить Weblogic 10.3, а затем изменить процесс сборки, чтобы указать, где они установили Weblogic 10.3.
Ни один из этих вариантов на самом деле не подходит мне прямо сейчас.
UPDATE
Как отмечали другие, я мог попытаться найти различные банки, и я сделал именно это с Weblogic 9.x и более ранними версиями. Например, простой сценарий оболочки:
find $WEBLOGIC_HOME -name "*.jar" | while read jar
do
echo "JAR NAME = jar"
jar tvf $jar
done | less
будет отображать содержимое всех JAR-файлов Weblogic на моем терминале. Если я обнаружу в сборке, что класс javax.servlet.ServletException
отсутствует, я могу найти javax\servlet\ServletException.class
, а затем вернуться к поиску JAR NAME =
и найти имя банки.
Однако в Weblogic 10 я обнаружил, что зависел от javax.servlet.ServletException
, и проследил его обратно до C:\bea\modules\javax.servlet_1.0.0.0.0.jar
, которого даже нет в моем каталоге $WEBLOGIC_HOME
. Это потому, что C:\bea\wlserver_10.3\server\lib\weblogic.jar
содержит путь к классу ..\..\..\modules\features\somejar.jar
. И somejar.jar
не содержит классов. Вместо этого он содержит ссылку на другой jar в своем classpath, который затем ссылается на javax.servlet_1.0.0.0.0.jar
.
Итак, теперь мне нужно добавить еще четыре jar-файла, один из которых не содержит классов, и если я хочу эмулировать структуру Weblogic, у меня должны быть следующие файлы в моем каталоге lib
:
weblogic.lib\wlserver_10.3\server\lib\weblogic.jar
weblogic.lib\modules\features\somejar.jar
weblogic.lib\modules\someOtherJar.jar
weblogic.lib\modules\javax.servlet_1.0.0.0.0.jar
Хорошо, это заняло около 2 часов. Одна проблема с зависимостью уменьшилась, еще 43 осталось.
Как видите, это может занять несколько дней, даже недель, и закончится десятками банок в моем ... э-э ... минимальном Weblogic 10 модуле. В конце концов, этот минимальный модуль может быть не намного меньше.
Кто-нибудь знает, может быть, некоторую документацию, которая позволяет мне быстро определить, где существуют эти зависимости, или способ построения дерева зависимостей, так что, когда мне нужен classpath com.bea.weblogic.foo.bar.barfoo, я можно быстро увидеть, что мне нужны эти 7 или 8 банок?