2012-04-20 17 views
2

私たちはビルドシステムをAnt + Ivyから他のものに移行することを検討しており、Buildrも可能性の1つです。ただし、Ivyをすぐにサポートするようには見えないため、社内のIvy repoファイルとivy.xmlファイルをMavenとPOMに変換する必要はありません。IvyでBuildrを使用した例?

私はそこには、2つを統合する唯一の方法であると思われるBuildr拡張子を持つivy4rプロジェクトがあることがわかります。しかし、このプロジェクトにはかなりの時間がかかりませんでした。実例やドキュメントはありません。

誰かがBuildr + Ivyの統合サンプルまたはivy4rの簡単なサンプルを持っていますか?私はRuby開発者ではないので、構文は私にとっては外国語です。サンプルコードがなければ、この作業を行うのは非常に難しいでしょう。

答えて

0

次に示すのは、と一緒にbuildrを示す小さなビルドファイルです。コメントは、何が起こるかを明確にすべきである。

覚えておくべき最も重要なことは、ブロックが既に実行されている間にブロックが実行されることです。あなたのアイビーの解決を引き起こすあなたの仕事の依存関係を設定した場合、それは遅すぎます。

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 
関連する問題