Following ashingel's suggestion I decided to unpack the gate resources to a temporary folder on initialization if it was running from a JAR file.
For details of how to unpack the folder see my answer here: https://stackoverflow.com/a/16659655/281469
Here is an example usage of what I did at initialization (Note: Apache Commons IO dependency):
//My GATE resources are in the "/gate" folder of the JAR
URI url = getClass().getResource("/gate").toURI();
File gateHome;
if (url.isOpaque()) {
logger.info("Unpacking GATE resources from JAR");
String tempDirectoryPath = FileUtils.getTempDirectoryPath();
String gateResource = "gate";
//Delete any existing temporary directory
FileUtils.deleteDirectory(new File(FilenameUtils.concat(tempDirectoryPath, gateResource)));
String gateHomePath = extractDirectoryFromClasspathJAR(getClass(), gateResource, tempDirectoryPath);
gateHome = new File(gateHomePath);
} else {
gateHome = new File(url);
}
Gate.setGateHome(gateHome);