2015-07-09 3 views
1

Если я хочу, чтобы упаковать банку подпроекта внутри основного кувшина, я могу сделать такую ​​вещь:Может ли build построить результат пакета подпроекта в ресурсах текущего проекта?

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 который охотно оценивает существование сборки продукт вместо того, чтобы устанавливать его как ленивую зависимость ...

Я могу обойти это следующим образом:

Мне не нравится это, потому что он все еще с нетерпением оценивает каталог, что заставляет меня создавать этот каталог задолго до того, как будет запущена какая-либо из строек. Это означает, что даже когда я запускаю buildr clean, он создает этот каталог. Тьфу.

Итак, каков правильный способ сделать это?

ответ

1

Как мы обычно это делаем, это не создавать пакеты с проектом верхнего уровня и вместо этого использовать подпроект для определения двух пакетов. i.e

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 

Это позволяет значительно упростить управление зависимостями и упорядочением сборок. Надеюсь, это поможет!

+0

В настоящее время упаковка в пакете работает нормально, проблема в том, что я хочу упаковать данные в место назначения ресурсов. Вопрос показывает, что я получил это, чтобы работать, но, используя хак, который кажется неестественным. Тем не менее, использование подпроекта для конечного пакета похоже на то, что он будет убирать файл сборки, поэтому я думаю, что все равно сделаю это. :) – Trejkaz

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

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