# Using standalone

Ivy can be used as a standalone program very easily. All you need is a Java 7+ runtime environment (JRE)!

Then here is how to call it:

    java -jar ivy.jar -?

It will display usage text as follows:

    usage: ivy
    ==== settings options
     -settings <settingsfile>     use given file for settings
     -properties <propertiesfile> use given file for properties not specified in set
                                  tings
     -cache <cachedir>            use given directory for cache
     -novalidate                  do not validate ivy files against xsd
     -m2compatible                use Maven 2 compatibility

    ==== resolve options
     -ivy <ivyfile>               use given file as ivy file
     -refresh                     refresh dynamic resolved revisions
     -dependency <organisation> <module> <revision>
                                  use this instead of ivy file to do the rest of the
                                   work with this as a dependency.
     -confs <configurations>      resolve given configurations
     -types <types>               accepted artifact types
     -mode <resolvemode>          the resolve mode to use
     -notransitive                do not resolve dependencies transitively

    ==== retrieve options
     -retrieve <retrievepattern>  use given pattern as retrieve pattern
     -ivypattern <pattern>        use given pattern to copy the ivy files
     -sync                        use sync mode for retrieve
     -symlink                     create symbolic links
     -overwriteMode <overwriteMode> use given overwrite mode for retrieve

    ==== cache path options
     -cachepath <cachepathfile>   outputs a classpath consisting of all dependencies
                                   in cache (including transitive ones) of the given
                                   ivy file to the given cachepathfile

    ==== deliver options
     -deliverto <ivypattern>      use given pattern as resolved ivy file pattern

    ==== publish options
     -publish <resolvername>      use given resolver to publish to
     -publishpattern <artpattern> use given pattern to find artifacts to publish
     -revision <revision>         use given revision to publish the module
     -status <status>             use given status to publish the module
     -overwrite                   overwrite files in the repository if they exist

    ==== makepom options
     -makepom <pomfilepath>       create a POM file for the module

    ==== http auth options
     -realm <realm>               use given realm for HTTP AUTH
     -host <host>                 use given host for HTTP AUTH
     -username <username>         use given username for HTTP AUTH
     -passwd <passwd>             use given password for HTTP AUTH

    ==== launcher options
     -main <main>                 the FQCN of the main class to launch
     -args <args>                 the arguments to give to the launched process
     -cp <cp>                     extra classpath to use when launching process

    ==== message options
     -debug                       set message level to debug
     -verbose                     set message level to verbose
     -warn                        set message level to warn
     -error                       set message level to error

    ==== help options
     -?                           display this help
     -deprecated                  show deprecated options
     -version                     displays version information

(since 1.3) System properties are included as Ivy variables, so you can easily define an Ivy variable like this:

    java -Dmyivyvar=myvalue org.apache.ivy.Main [parameters]

(since 2.5) Additional properties defined in a separate `.properties` file (rather than Ivy settings) can be loaded using `-properties` option like this:

    java -jar ivy.jar -properties version.properties -main org.apache.tools.ant.Main

Note | Prior to 2.5, Ivy `-main` created a classloader that used Ivy classloader as a parent. This is no longer the case; if your usage depended on Ivy classes being available, Ivy must be declared as a dependency of the component that you want to launch.

(since 2.5) Ivy can convert `ivy.xml` files to `pom.xml` files using `-makepom` option.

## Examples

    java -jar ivy.jar

calls Ivy with default configuration using ivy.xml in the current dir

    java -jar ivy.jar -settings path/to/myivysettings.xml -ivy path/to/myivy.xml

calls Ivy with given Ivy settings file using given Ivy file

(since 1.3)

    java -jar ivy.jar -settings path/to/myivysettings.xml -dependency apache commons-lang 2.0

calls Ivy with given Ivy settings file and resolve apache `commons-lang 2.0`.

This is equivalent to:

    java -jar ivy.jar -settings path/to/myivysettings.xml -ivy ivy.xml

with `ivy.xml` like this:

    <ivy-module version="1.0">
      <info organisation="org"
           module="standalone"
           revision="working"/>
      <dependencies>
        <dependency org="apache" name="commons-lang" rev="2.0" conf="default->*"/>
      </dependencies>
    </ivy-module>

(since 1.3)

    java -jar ivy.jar -settings path/to/myivysettings.xml -ivy path/to/myivy.xml -cachepath mycachefile.txt

calls Ivy with given Ivy settings file and resolves the dependencies found in the given Ivy file, and then outputs the classpath of resolved artifacts in cache in a file. This file can then be used to define a classpath corresponding to all the resolved dependencies for any Java program.

(since 1.4)

    java -jar ivy.jar -settings path/to/myivysettings.xml -dependency bar foo 2.0 -main org.bar.foo.FooMain

calls Ivy with given Ivy settings file and resolves the dependency `bar` `foo` `2.0`, and then runs `org.foo.FooMain` class with the resolved artifacts as classpath.