{"id":1356,"date":"2009-11-09T23:15:35","date_gmt":"2009-11-10T04:15:35","guid":{"rendered":"http:\/\/jianmingli.com\/wp\/?p=1356"},"modified":"2009-11-10T12:49:02","modified_gmt":"2009-11-10T17:49:02","slug":"use-apache-ivy-to-manage-jar-dependencies","status":"publish","type":"post","link":"https:\/\/jianmingli.com\/wp\/?p=1356","title":{"rendered":"Use Apache Ivy to Manage Jar Dependencies"},"content":{"rendered":"<span id=\"Install_Ivy\"><h2>Install Ivy<\/h2><\/span>\n<p>* Download Ivy from <a href=\"http:\/\/ant.apache.org\/ivy\/download.cgi\">http:\/\/ant.apache.org\/ivy\/download.cgi<\/a><br \/>\n* Add to ANT_HOME\/lib directory<\/p>\n<pre>\r\nivy-2.1.0.jar\r\njsch-0.1.31.jar # Needed for ssh and sftp resolvers\r\n<\/pre>\n<p>* For Eclipse, add Ivy jars to Ant runtime classpath:<br \/>\nWindow -> Preferences -> Ant -> Runtime -> Classpath -> Ant Home Entries -> Add External Jars <\/p>\n<span id=\"Use_Ivy\"><h2>Use Ivy<\/h2><\/span>\n<span id=\"Create_a_dependency_file_named_ivy.xml\"><h3>Create a dependency file named ivy.xml<\/h3><\/span>\n<p>ivy.xml file defines your project dependencies.<\/p>\n<pre lang=\"xml\">\r\n<ivy-module version=\"1.0\">\r\n <info organisation=\"my.com\" module=\"myproject\" \/>\r\n  <dependencies>\r\n    <dependency name=\"junit\" rev=\"3.8.1\" \/>\r\n    <dependency name=\"commons-lang\" rev=\"2.0\"\/>\r\n <\/dependencies>\r\n<\/ivy-module><\/pre>\n<span id=\"Create_a_settings_file_named_ivysettings.xml\"><h3>Create a settings file named ivysettings.xml<\/h3><\/span>\n<p>ivysettings.xml file defines your repositories.<\/p>\n<pre lang=\"xml\">\r\n<ivysettings>\r\n  <settings defaultResolver=\"chained\" \/>\r\n  <resolvers>\r\n    <chain name=\"chained\">\r\n      <filesystem name=\"libraries\">\r\n        <artifact pattern=\"C:\/repository\/[artifact]-[revision].[ext]\" \/>\r\n      <\/filesystem>\r\n      <ssh keyFile=\"C:\/Documents and Settings\/me\/.ssh\/id_rsa\"\r\n        keyFilePassword=\"\">\r\n        <artifact\r\n\t    pattern=\"ssh:\/\/user:me@my.com:22\/path\/to\/repository\/[organisation]\/[module]\/[artifact]-[revision].[ext]\" \/>\r\n      <\/ssh>\r\n      <ibiblio name=\"ibiblio\" m2compatible=\"true\" \/>\r\n    <\/chain>\r\n  <\/resolvers>\r\n<\/ivysettings>\r\n<\/pre>\n<span id=\"In_Ant_build_file_build.xml\"><h3>In Ant build file build.xml<\/h3><\/span>\n<span id=\"Add_Ivy_namespace_to_project\"><h4>Add Ivy namespace to project<\/h4><\/span>\n<pre lang=\"xml\">\r\n<project name=\"myproject\" basedir=\".\"\r\n\txmlns:ivy=\"antlib:org.apache.ivy.ant\">\r\n<\/pre>\n<span id=\"Define_Ivy_settings_file\"><h4>Define Ivy settings file<\/h4><\/span>\n<pre lang=\"xml\">\r\n<ivy:settings file=\"ivysettings.xml\" \/>\r\n<\/pre>\n<span id=\"Define_ivy.lib.dir\"><h4>Define ivy.lib.dir<\/h4><\/span>\n<p>This is the directory where retrieved jar files will reside. <\/p>\n<pre lang=\"xml\">\r\n<property name=\"ivy.lib.dir\" value=\"${lib.dir}\" \/>\r\n<\/pre>\n<span id=\"Define_resolve_target\"><h4>Define resolve target<\/h4><\/span>\n<pre lang=\"xml\">\r\n<target name=\"resolve\" \r\n  description=\"--> resolve and retrieve dependencies with ivy\">\r\n    <ivy:retrieve\/>\r\n<\/target>\r\n<\/pre>\n<span id=\"Use_Ivy_1\"><h4>Use Ivy<\/h4><\/span>\n<pre lang=\"xml\">\r\n<target name=\"report\" depends=\"resolve\" \r\n  description=\"--> generates a report of dependencies\">\r\n    <ivy:report todir=\"${build.dir}\"\/>\r\n<\/target>\r\n\r\n<path id=\"build.classpath\">\r\n <fileset dir=\"${lib.dir}\">\r\n  <include name=\"**\/*.jar\"\/>\r\n <\/fileset>\r\n<\/path>\r\n<\/pre>\n<span id=\"Sample_build.xml_file\"><h4>Sample build.xml file<\/h4><\/span>\n<pre lang=\"xml\">\r\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<project name=\"myproject\" basedir=\".\"\r\n\txmlns:ivy=\"antlib:org.apache.ivy.ant\">\r\n\t\r\n    <property name=\"lib.dir\" location=\".\/lib\"\/>\r\n    <property name=\"build.dir\" location=\".\/build\"\/>\r\n    <property name=\"ivy.lib.dir\" value=\"${lib.dir}\" \/>\r\n\t\r\n    <ivy:settings file=\"ivysettings.xml\" \/>\r\n\r\n    <target name=\"resolve\" \r\n    \tdescription=\"--> resolve and retrieve dependencies with ivy\">\r\n        <ivy:retrieve\/>\r\n    <\/target>\r\n\t\r\n    <target name=\"report\" depends=\"resolve\" \r\n    \tdescription=\"--> generates a report of dependencies\">\r\n        <ivy:report todir=\"${build.dir}\"\/>\r\n    <\/target>\r\n\r\n    <path id=\"build.classpath\">\r\n    <fileset dir=\"${lib.dir}\">\r\n    <include name=\"**\/*.jar\"\/>\r\n    <\/fileset>\r\n    <\/path>\r\n\r\n    <target name=\"clean.cache\">\r\n    \t<ivy:cleancache \/>\r\n    <\/target>\r\n<\/project><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Install Ivy * Download Ivy from http:\/\/ant.apache.org\/ivy\/download.cgi * Add to ANT_HOME\/lib directory ivy-2.1.0.jar jsch-0.1.31.jar # Needed for ssh and sftp resolvers * For Eclipse, add Ivy jars to Ant runtime classpath: Window -> Preferences -> Ant -> Runtime -> Classpath &hellip; <a href=\"https:\/\/jianmingli.com\/wp\/?p=1356\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[14],"tags":[],"class_list":["post-1356","post","type-post","status-publish","format-standard","hentry","category-java"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p8cRUO-lS","_links":{"self":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/1356","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1356"}],"version-history":[{"count":5,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/1356\/revisions"}],"predecessor-version":[{"id":1359,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/1356\/revisions\/1359"}],"wp:attachment":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1356"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1356"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1356"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}