Buildr не будет генерировать POM в проектах с несколькими пакетами - PullRequest
0 голосов
/ 12 июня 2018

У меня есть проект Java, который использует Apache Buildr в качестве инструмента для сборки.Он устанавливает WAR и два ZIP-архива в репозиторий Maven.Однако в Buildr 1.5.6 кажется, что когда инструкции по сборке ZIP-архивов добавляются в файл сборки, в выходной папке не создается файл .pom.

А именно, при выполнении buildr clean package используя этот код файла сборки:

task :package => [:get_svn_version] 
SQL_ARCHIVE = "Project-#{VERSION_NUMBER}-sql.zip"
package(:zip, :file => _(:target, SQL_ARCHIVE)).include("src/main/sql")
CONF_ARCHIVE = "Project-#{VERSION_NUMBER}-conf.zip"
package(:zip, :file => _(:target, CONF_ARCHIVE)).include(_("conf"))
package(:war).with :libs => [PACKAGE_ONLY_DEPS, COMPILE_PACKAGE_DEPS]

... Buildr создает выходную папку, содержащую:

atg@host:> ls target classes Project-1.1-SNAPSHOT-conf.zip Project-1.1-SNAPSHOT.war test js-test Project-1.1-SNAPSHOT-sql.zip resources

Принимая во внимание только это:

task :package => [:get_svn_version]
package(:war).with :libs => [PACKAGE_ONLY_DEPS, COMPILE_PACKAGE_DEPS]

... выводит:

atg@host:> ls target classes js-test Project-1.1-SNAPSHOT.pom Project-1.1-SNAPSHOT.war resources test

Как видите, файл .pom в первом случае не создается, поэтому впоследствии buildr install не может быть успешным.Поэтому мой вопрос как мне заставить Buildr создать файл .pom, а также мои архивы WAR и ZIP?

РЕДАКТИРОВАТЬ:

Следующий простой файл сборкидостаточно воспроизвести проблему:

# Generated by Buildr 1.5.6, change to your liking
repositories.remote << 'http://repo1.maven.org/maven2'

DUMMY_DEPENDENCIES = 'org.hamcrest:hamcrest-core:jar:1.3'

desc "Test project for stackoverflow.com"
define 'no-pom' do
  project.group = "test"
  project.version = '1.0-SNAPSHOT'

  test.with DUMMY_DEPENDENCIES

  package(:zip, :file => _("target", "configuration.zip")).include(_("conf"))
  package(:war).with :libs => [DUMMY_DEPENDENCIES]

end

Это основано на классическом автоматически сгенерированном проекте Maven2 с App.java и "строгим" AppTest.java.Все, что я добавил, это папка conf в корне проекта, которая содержит только один фиктивный текстовый файл.

Если вы запустите вышеописанное, вы получите WAR и «configuration.zip», созданные, но нет.POM файл.Если вы закомментируете инструкцию по архивированию папки conf, вы получите файл .pom, сгенерированный вместе с файлом WAR.

1 Ответ

0 голосов
/ 05 июля 2018

В отсутствие какого-либо ответа на этот вопрос или подтверждения его как ошибки Buildr мне удалось обойти эту проблему, изменив файл, вызывающий проблемы в Buildr.

В файле /usr/lib64/ruby/gems/2.5.0/gems/buildr-1.5.6/lib/buildr/java/custom_pom.rb(путь может отличаться в зависимости от версии Ruby / Buildr) ищите эту строку:

candidates = project.packages.select{|p| p.classifier.nil? }.collect{|p|p.type.to_s}

Это строка 181 для меня, так что она, вероятно, будет там или около того для большинства людей.Измените его следующим образом:

candidates = project.packages.select{|p|defined? p.classifier &&p.classifier.nil? }.collect{|p|p.type.to_s}

После сохранения файла вы сможете запускать buildr clean package и buildr install без каких-либо затруднений.

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

...