Java-код для преобразования списка зависимостей в порядок сборки? - PullRequest
0 голосов
/ 14 мая 2010

Учитывая, что у меня есть список зависимостей, доступных как биты во внешних файлах.Они будут объединены в список, подобный следующему:

module1
module2 dependsOn module1
module3 dependsOn module1
module4 dependsOn module3

Я хотел бы создать порядок сборки, в котором каждый шаг сборки находится в одной строке, и каждая строка содержит список из одного или нескольких модулей, которые могут бытьскомпилированы одновременно, и которые зависят только от модулей, скомпилированных ранее.

Итак, для вышеуказанного набора данных создайте список вроде:

module1
module2,module3
module4

Теперь, это в основном простопроблема создания ориентированного графа и его анализа.Теперь я использую Ant и очень хотел бы использовать что-то готовое ... какой минимум пользовательского кода мне нужно, чтобы он создавал такой список сборки с учетом зависимостей, начинаяс данного входа?Я не хочу писать весь код сам (что я знаю, как делать), но ищу библиотеки, которые помогут мне здесь ...

Кстати, эти модули на самом деле являются пользовательскими модулями, поэтому maven не будет работать.Более того, список модулей создается на лету из исходного кода Java, и я не могу жестко закодировать это в файле сборки.

Ответы [ 3 ]

2 голосов
/ 14 мая 2010

Вы можете использовать топологическую сортировку, чтобы увидеть реальный порядок. Это можно сделать с помощью утилиты unix util tsort или вы можете найти реализацию топологической сортировки (в Excalibur Framework есть что-то вроде этого).

0 голосов
/ 14 мая 2010

Муравей может с этим справиться. Вы в основном описываете свои зависимости модуля как целевые зависимости. Взгляните на [http://stroy.wikidot.com/motpe]. Это 2 сценария муравья с одинаковыми соглашениями для обработки многомодульных сборок.

0 голосов
/ 14 мая 2010

Нарисуйте дерево ваших зависимостей и посмотрите на уровни. Вы можете начать сборку в корне и строить каждый уровень дерева параллельно, если уровни выше уже построены.

1----->2
 |
 ----->3----->4

^      ^      ^
|      |      | 
A      B      C

Сначала создайте A (модуль 1), затем B (2 и 3), затем C (4).

EDIT: Если вы используете Ant и специально запрашиваете решение для разрешения зависимостей для Ant, вы можете взглянуть на Apache Ivy

...