Buildr不会在包含多个包的项目中生成POM

时间:2018-06-12 10:22:42

标签: java buildr

我有一个使用Apache Buildr作为构建工具的Java项目。它将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文件夹的指令,那么您将获得与WAR文件一起生成的.pom文件。

1 个答案:

答案 0 :(得分:0)

由于没有对此问题作出任何回应,也没有将其确认为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 packagebuildr install

免责声明:我既不是Ruby程序员,也不是Buildr开发人员,所以这对于软件的其他领域可能是一个重大突破。我只能说它对我有用,并且已经在我的机器上解决了这个问题。