Манифест Buildr генерирует путь к классу из пакета EAR

#buildr

#buildr

Вопрос:

Я использую (и изучаю) Buildr для сборки и упаковки своих проектов. Я хотел бы автоматически сгенерировать атрибут пути к классу в файле МАНИФЕСТА проектов EJB. В настоящее время я делаю:

 manifest_cp = compile.dependencies.map { |d| 
    "#{File.basename(d.name)}"
}.join(" ")

package(:jar).with :manifest=>manifest.merge('Class-Path'=>manifest_cp)
  

Я новичок в Ruby и Buildr, поэтому, вероятно, есть лучший способ сделать это. Однако я на самом деле надеялся, что смогу генерировать jar, которые я определяю, и упаковывать в моем EAR, в отличие от получения зависимостей компиляции в моем JAR.

Я упаковываю свой проект ear следующим образом:

 package(:ear).include(ANTLR, AOP_ALLIANCE, ...
  

Возможно ли в моей сборке проекта EJB при упаковке jar и изменении манифеста создать атрибут Class-Path со всеми зависимостями, упакованными в EAR? Кроме того, я также хотел бы исключить одну или две зависимости?

Спасибо

Обновить

Я попробовал другой подход, который кажется лучше (но все же, вероятно, есть способы намного лучше, чем те, что у меня есть). Я создал константу, которая содержала все мои артефакты, которые я хочу включить в свой EAR, а затем создал строку classpath:

 EARLIBS = [ANTLR, AOP_ALLIANCE, ... ]
manifest_cp = Buildr.artifacts(EARLIBS).each { |artifact| artifact.invoke }.map{ |d| 
        "#{File.basename(d.to_s)}"
}.join(" ")
  

Когда я упаковываю EJB, я указываю manifest_cp, который был создан выше:

 package(:jar).with :manifest=>manifest.merge('Class-Path'=>manifest_cp)
  

Когда я упаковываю EAR, я ссылаюсь на объявленную константу со всеми артефактами:

 package(:ear).include(EARLIBS)
  

Даже если это работает для того, что я хочу, я был бы признателен, если у кого-нибудь есть лучший способ сделать это

Спасибо,

Ответ №1:

Документ по сборке для EarTask содержит, как я полагаю, решение:

Все указанные библиотеки добавляются в архив EAR, а запись манифеста пути к классу изменяется для каждого компонента EAR.