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