构建器不会在具有多个包的项目中生成 POM

  • 本文关键字:项目 POM 构建 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]

。构建器生成一个输出文件夹,其中包含:

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和"配置.zip",但没有.pom文件。 如果您注释掉压缩 conf 文件夹的说明,则会得到一个与 WAR 文件一起生成的 .pom 文件。

在没有对此问题做出任何回应或承认这是构建器错误的情况下,我设法通过修改构建器中的有问题的文件来解决此问题。

在文件/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程序员也不是构建者开发人员,所以这可能是软件其他领域的重大变化。 我只能说它对我有用,并且已经在我的机器上解决了这个问题。

最新更新