Может ли buildr включить результат пакета подпроекта в ресурсы текущего проекта?
Если я хочу упаковать файл jar подпроекта в основной файл jar, я могу сделать следующее:
define 'library' do
project.version = '0.1'
define 'subproject' do
package :jar
end
package(:jar).include(project('subproject').package(:jar),
as: 'org/acme/library/subproject.jar')
end
Это лениво создаст банку в подпроекте, прямо перед тем, как она понадобится для упаковки в основную банку, и все работает.
Проблема в том, что мои тесты также хотят использовать jar-файл, поэтому логическое место для него - ресурсы. Поэтому мне интересно, как я должен скопировать что-то, созданное другим проектом, в ресурсы этого проекта. В документах, в частности, отсутствуют какие-либо примеры этого, и в основном они сосредоточены на том, как скопировать один каталог файлов в другой.
Вот что я попробовал:
resources.from(project('subproject').package(:jar),
as: 'org/acme/library/subproject.jar')
Это не удается:
RuntimeError : Source directory $HOME/Documents/library/subproject/target/library-subproject-0.1.jar doesn't exist
$HOME/Documents/library/buildfile:38:in `block in <top (required)>'
К моему удивлению, это, кажется, единственное место в buildr, которое охотно оценивает существование продукта сборки вместо того, чтобы устанавливать его как ленивую зависимость...
Я могу обойти это следующим образом:
# Crappy workaround to eagerly create target dir in subproject.
mkdir_p project("lucene#{ver}").path_to(:target)
resources.from(project("lucene#{ver}").path_to(:target)).
include(project("lucene#{ver}").package(:jar))
Мне это не нравится, потому что он по-прежнему охотно оценивает каталог, что вынуждает меня создать этот каталог задолго до запуска какой-либо сборки. Это означает, что даже когда я бегу buildr clean
создает этот каталог. Тьфу.
Так каков правильный способ сделать это?
1 ответ
Обычно мы делаем так, чтобы не создавать пакеты с проектом верхнего уровня, а вместо этого использовать подпроект для определения двух пакетов. т.е.
define 'myproject'
...
define 'model' do
...
package(:jar)
end
define 'server' do
...
package(:war) do |war|
war.libs.clear
war.libs << project('model').package(:jar)
end
end
end
Это позволяет значительно упростить управление зависимостями и упорядочение сборок. Надеюсь, это поможет!