代码之家  ›  专栏  ›  技术社区  ›  ATG

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

  •  0
  • ATG  · 技术社区  · 7 年前

    我有一个Java项目,它使用apachebuildr作为构建工具。它将一个WAR和两个ZIP文件安装到Maven存储库中。但是,在buildr1.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 项目根目录中的文件夹,其中只包含一个伪文本文件。

    1 回复  |  直到 7 年前
        1
  •  0
  •   ATG    6 年前

    由于对这个问题没有任何回应,也没有承认这是一个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

    免责声明: