Ivy Androidプロジェクトの依存関係の管理

AndroidプロジェクトがMavenまたはSBT(またはAnt以外)を使用してコンパイルおよびビルドされている場合、「すぐに使える」と呼ばれるものによって提供される依存関係管理メカニズムを既に使用しています。 ただし、Antを使用する場合、または単にADTプラグインを使用してEclipseでアプリケーションをビルドする場合、そのような機能はなく、libディレクトリはプロジェクトのルートに手動で入力されます。もちろん、Mavenの使用に切り替える欲求や能力はありません。 次に、jarファイルをVCSに手動で保存したり、バイナリを保持したり、プロジェクト設定の「ビルドパス」に自分で追加したりすることはできませんか? もちろん、質問があります!





「大きな」Javaの世界では、多くの人がIvyと呼ばれるツール-「アジャイル依存関係マネージャー」を聞いた、またはそれでさえ働いたことがあると思います。 ところで、SBTを使用する場合、自動的にIvyを使用しますが、それについては知りません。 Ivyでできること おおまかに言って、それはまさに一つのことを目的としています-サードパーティのライブラリに対するプロジェクトの依存関係の管理。 Ivyはビルドシステムではなく、それを補完するだけです。



プロジェクトで1つまたは2つのライブラリを使用している場合、おそらくIvyなどの機器を使用すると不必要な「オーバーヘッド」に見えるかもしれませんが、プロジェクトが成長し、サードパーティが提供する機能を「取得」すると、生活が大幅に簡素化されます。



準備する



私たちの目標は、Eclipseとコンソールの両方から構築できるアプリケーションです。 コンソールからIvyを操作するには、Antを使用します。これについては通知する必要があります-ivy.jar〜/ .ant / lib /に配置します。 JSchライブラリ(ssh2実装) -jsch.jarも必要になる場合があります。これは〜/ .ant / lib /にも配置できます。 古いバージョンを使用しないでください、それらに問題がありました。 この段階では、何もする必要はありません。プロジェクトのセットアップに進みます。



カスタマイズ



次のステップでは、使用済みのパッケージリポジトリで動作するようにIvyを構成する必要があります。 このために、いわゆるがあります。 リゾルバ-URL 、構造、およびその他の特性を指定するリポジトリの説明。 この例では、ZXing、ACRA、RoboGuiceの3つのライブラリを使用しました。 後者はmvnrepository.comにあり、他の2つは独自のMaven互換リポジトリを使用しています。 Ivy設定ファイルはivysettings.xmlと呼ばれ、 build.xmlがあるディレクトリにあります。この場合、これはプロジェクトのルートです。 この例の内容は次のとおりです。



<ivysettings> <resolvers> <ibiblio name="maven2" m2compatible="true" /> <url name="acra" m2compatible="true"> <artifact pattern="http://acra.googlecode.com/svn/repository/releases/[organization]/[module]/[revision]/[module]-[revision].jar" /> </url> <url name="zxing" m2compatible="true"> <artifact pattern="http://mvn-adamgent.googlecode.com/svn/maven/release/[organization]/[revision]/[module]-[revision].jar" /> </url> <chain name="chained" returnFirst="true"> <resolver ref="maven2" /> <resolver ref="acra" /> <resolver ref="zxing" /> </chain> </resolvers> <settings defaultResolver="chained" /> </ivysettings>
      
      





ibiblio リゾルバー Ivyパッケージの標準であり、maven.orgなどにあるストレージ施設を接続します。 さらに、ZXingとACRAを備えたストレージが構成されます。 リポジトリの構造を定義するパターン属性に注意してください。 また、リゾルバはチェーンチェーンに結合されており、目的のパッケージを検索する際にストレージをソートする順序を決定します。



そのため、リポジトリを構成し、依存関係自体について説明します。 これを行うために、 ivy.xmlファイルが( ivysettings.xmlと同じディレクトリに) 作成されます。 その内容:



 <ivy-module version="2.0"> <info organisation="com.example" module="ivy-android-example" revision="0.1" /> <dependencies> <dependency org="org.acra" name="acra" rev="4.2.3" /> <dependency org="com.google.inject" name="guice" transitive="false" rev="2.0-no_aop" /> <dependency org="org.roboguice" name="roboguice" rev="1.1.2" transitive="false" /> <dependency org="com.google.zxing.core" name="core" rev="1.6" /> </dependencies> </ivy-module>
      
      





情報セクションが必要であり、その目的は例から明らかだと思います。 その背後には、依存関係自体の説明があります。 guiceroboguiceで停止するより多くの価値。 最初のライブラリは2番目のライブラリの依存関係であり、そのうち2つは動作するのに十分です(RoboGuiceのドキュメントによると)。しかし、 guiceは依存関係を「プル」します。 この構成では、追加のパッケージ-javadocおよび-sources (存在する場合) 提供されます。 必要ない場合は、 ivy.xmlに 構成セクションを追加し、空の構成を作成する必要があります。



 <configurations> <conf name="default" visibility="public" /> </configurations>
      
      





属性conf =“ default”を依存関係の説明に追加します。



最後のステップはプロジェクトのbuild.xmlを変更することです(生成方法は公式ドキュメントに記載されています)。 ただし、Antを使用する予定がない場合は、この手順をスキップできます。 最初に、プロジェクトの説明にIvy名前空間を追加します。



 <project xmlns:ivy="antlib:org.apache.ivy.ant" name="IvyAndroidExample" default="help">
      
      





そして、新しいターゲットを追加します。



 <target name="resolve" description="--> retrieve dependencies with ivy"> <ivy:retrieve /> </target>
      
      





最後に、アプリケーションのビルドプロセスに目標を追加できます(Antを使用してプロジェクトをビルドする場合)。



 <target name="-pre-build" depends="resolve" />
      
      





ここで、プロジェクトのルートディレクトリでコマンドを実行すると



  $ ant resolve 


その後、パッケージをロードするプロセスが表示され、結果がライブラリのjarファイルを含むlibディレクトリになります。



Eclipse統合



開始するには、Eclipse用のIveDEプラグインをインストールする必要があります。 プラグインは、Eclipse Marketplaceで入手できます。 インストール後、ツールバーに「すべての依存関係を解決」ボタンが表示されます。







次に、プロジェクトに依存関係を接続します。プロジェクトのプロパティを開きます-> Java Build Path- > Librariesタブに移動-> Libraryの追加 ->表示されるリストで、 IvyDE Managed Dependenciesを選択-> Nextをクリックします。 次に、 ivy.xmlファイルの場所とその他の設定について尋ねられます。 この場合、すべてをそのままにして[設定 ]タブに移動し、 [ Ivy設定パス] プロパティivysettings.xmlファイルへのパスを指定でき ます 。 その後、「完了」をクリックします。 これで、依存関係としてivy.xmlに登録されたすべてのライブラリがプロジェクトに接続され、パッケージエクスプローラーに表示されます。







ivy.xmlに変更を加えると、 EclipseはIvy Resolveタスクを実行します。 プロジェクトのbuild.xmlを追加して、Antビューを使用して起動することもできます。



ローカルストレージ



多くの場合、必要なライブラリがパブリックリポジトリにないか、プロジェクトの別のチームによって作成されたライブラリを使用し、それを依存関係などとして接続する必要がある場合があります。 独自のIvyストレージの作成はこの記事の範囲を多少超えていますが、非常に基本的な(ただし非常に機能する)構成の説明を含めることにしました。



テストサンプルとして、 Droid @ Screenライブラリを使用しました。リポジトリは/ var / ivyに配置されます。 ここで、アーティファクトの場所の構造を選択する必要があります。この場合は、 / organization / name / version / artifactになります。 テストライブラリの場合、 com.ribomationはパッケージ名の組織として使用され、ストレージ構造は次のようになります。



	 / var / ivy
	 └──com
	     └──リボメーション
	         └──droidAtScreen
	             └──0.5.1
	                 ├──droidAtScreen.jar
	                 └──ivy.xml


ivy.xmlファイルに注意してください -アーティファクト、その依存関係、構成などの説明が含まれています。 その最小コンテンツは次のとおりです。



 <ivy-module version="2.0"> <info organisation="com.ribomation" module="droidAtScreen" revision="0.5.1" /> <publications> <artifact /> </publications> </ivy-module>
      
      





次に、 ivysettings.xmlでローカルストレージを接続する必要があります(ドットは既存のタグ、KOをマークします)。



 <ivysettings> <property name="repo.dir" value="/var/ivy"/> <resolvers> <...> <filesystem name="local" m2compatible="true"> <ivy pattern="${repo.dir}/[organization]/[module]/[revision]/[artifact].[ext]" /> <artifact pattern="${repo.dir}/[organization]/[module]/[revision]/[module].jar" /> </filesystem> <chain name="chained" returnFirst="true"> <...> <resolver ref="local" /> </chain> </resolvers> <...> </ivysettings>
      
      





m2compatible属性に注意してください -その使用により、Ivyは組織名のドットをそれぞれシステムセパレーターに置き換え、アーティファクトの検索はcom.ribomationディレクトリではなく、階層-com / ribomationになります。 次に、依存関係をivy.xmlに追加します



 <dependency org="com.ribomation" name="droidAtScreen" rev="0.5.1" />
      
      





実際、それだけです- 解決タスクを実行できます。



SSH経由でアクセスされたリモートリポジトリを使用する場合は、 ファイルシステムではなくsshをリゾルバとして使用する必要があります



 <ssh name="shared" host="example.com" user="${user.name}" keyFile="${user.home}/.ssh/key"> <...> </ssh>
      
      





それ以外は同じです。



備考



IvyとEclipseを使用しているときに、次のエラーに気付きました-プロジェクトが複数(メイン、テストなど)に分割されている場合、それらを開くと、何らかの理由でIvyプラグインがプロジェクト間の依存関係を混乱させます。 解決策は非常に簡単です-ツールバーの[すべての依存関係を解決]ボタンをクリックするだけです。



結論の代わりに



そのため、この記事の目的は、プロジェクトの既存の構造(およびインフラストラクチャ)を変更せずに、依存関係解決メカニズムを追加し、それらをプロジェクトに維持および追加する手作業を取り除く方法を示すことでした。 プロジェクトのソースコードはこちらです。 この情報がお役に立てば幸いです。



All Articles