我有一个使用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 package
和buildr install
。
免责声明:我既不是Ruby程序员也不是构建者开发人员,所以这可能是软件其他领域的重大变化。 我只能说它对我有用,并且已经在我的机器上解决了这个问题。