This commit makes the UpdateInterface class immutable. The Config -> UpdateInterface initialization is moved to the UpdateInterface constructor. Default values for the fields are moved to the constructor as well. Instances of String[] are changed to List<String> and made immutable. Instances of java.awt.Rectangle (which is mutable) are replaced with a new immutable com.threerings.getdown.util.Rectangle class. Although java.awt.Color is (sort of) immutable, it was also removed and replaced with a new immutable com.threerings.getdown.util.Color class, since it was the last dependency from the getdown core module to anything in the java.awt package, which means that when we migrate to Java 9+ the core module should no longer require a dependency on the java.desktop module. The assertions and expected values in ColorTest have been verified against the corresponding java.awt.Color values. (Triggered by internal security audit and Fortify analysis.)
What is it?
Getdown (yes, it's the funky stuff) aims to provide a system for downloading and installing a collection of files on a user's machine and upgrading those files as needed. Though just any collection of files would do, Getdown is mainly intended for the distribution and maintenance of the collection of files that make up a Java application.
It was designed as a replacement for Java Web Start due to limitations in Java Web Start's architecture which are outlined in the rationale section.
How do I use it?
A tutorial and more detailed specification are available from the Documentation page. Questions can be posted to the OOO Libs Google group.
How does it work?
The main design and operation of Getdown is detailed on the design page. You can also browse the javadoc documentation and source code if you're interested in implementation details.
Where can I see it in action?
Getdown was originally written by developers at OOO for the deployment of their Java-based massively multiplayer games. Try out any of the following games to see it in action:
- Puzzle Pirates - OOO
- Spiral Knights - OOO
Getdown is implemented in Java, but certainly can be used to deploy non-Java-based applications. Doing so would be a little crazy since you may have to install a JVM on the user's machine (if they don't already have one installed), which is a ~7MB download. This isn't so bad if you're already installing a Java application and must have a JVM, but it's a little crazy if the JVM is only used for your installer. It is probably possible to compile Getdown with GCJ, which would make Getdown a viable choice for non-Java applications.
Release notes
See CHANGELOG.md for release notes.
Obtaining Getdown
The latest version of Getdown can be obtained thusly:
- Download the pre-built jar file from Maven Central: getdown-1.7.1.jar
- Obtain the jar artifact via Maven with the following identifier:
com.threerings:getdown:1.7.1. - Check out the code and build it yourself.
You can also:
- View the javadoc documentation online.
- Browse the source code online.
JVM Version Requirements
- Getdown version 1.7.x requires Java 7 VM or newer.
- Getdown version 1.6.x requires Java 6 VM or newer.
- Getdown version 1.5 and earlier requires Java 5 VM or newer.
Building
Getdown is built with Maven in the standard ways. Invoke the following commands, for fun and profit:
% mvn compile # builds the classes
% mvn test # builds and runs the unit tests
% mvn package # builds and creates jar file
% mvn install # builds, jars and installs in your local Maven repository
Discussion
Feel free to pop over to the OOO Libs Google Group to ask questions and get (and give) answers.