2

ビルド システムを Ant+Ivy から別のものに移行することを検討しており、Buildr はその可能性の 1 つです。しかし、そのままでは Ivy をサポートしていないようで、社内の Ivy リポジトリーと ivy.xml ファイルを Maven と POM に変換するつもりはありません。

2つを統合する唯一の方法と思われるBuildr拡張機能を備えたivy4rプロジェクトがあるようですただし、このプロジェクトにはかなり長い間新しい開発が行われておらず、確かな例やドキュメントもありません。

Buildr+Ivy 統合のサンプル、または ivy4r の簡単な例を持っている人はいますか? 私は Ruby 開発者ではないので、構文は私にはなじみがなく、いくつかのサンプル コードがなければ、これを機能させるのは非常に難しいのではないかと心配しています。

4

1 に答える 1

0

buildr以下は、と一緒に表示される小さなビルドファイルですivy4r。コメントは、何が起こるかを明確にする必要があります。

覚えておくべき最も重要なことはpost_resolve、ビルドが既に実行されている間だけブロックが実行されるということです。Ivy の解決を引き起こすタスクの依存関係を設定した場合、手遅れです。

require 'buildr/ivy_extension'

repositories.remote << "http://repo1.maven.org/maven2"
THIS_VERSION = 1.0

define 'my-app', :version => THIS_VERSION do
  # Tell ivy4r to add task dependencies to the compile and test tasks.
  # These tasks will cause ivy to resolve the needed artefacts.
  ivy.compile :conf => 'default', :type => 'jar'
  ivy.test :conf => 'test', :type => 'jar'

  # Declare package tasks so that buildr sets up their dependencies.
  jar = package :jar
  zip = package :zip

  # During the build, at some point ivy will resolve because of the
  # task dependencies set up above.
  # After ivy has resolved, the post_resolve blocks will be run.
  ivy.post_resolve do |ivy|
    # Now that ivy has resolved, get a list of the jar artefacts.
    deps = ivy.deps :conf => 'default', :type => 'jar'

    # Do something interesting with the artefacts.
    # -> e.g. put them in the manifest of the main jar
    jar.with :manifest => manifest.merge({
        'Main-Class' => 'Main',
        'Class-Path' => deps.map { |f| "#{File.basename(f)}" }.join(', '),
    })
    # -> package the app as a zip, including also those artefacts
    # This results in a main.jar that specifies its own class path
    # and can be run by double-clicking or just java -jar main.jar
    zip.path("#{id}-#{version}").tap do |p|
      p.include jar, :as => 'main.jar'
      p.include deps
    end
  end
end
于 2014-01-16T08:33:35.233 に答える