问题
Suppose I sent a large jar or war file to someone. Could I later just change one small section and send that to him? Suppose I just changed one class file. I recompiled the java for into a class file. Other then exchanging the new class file for the old class file it there anything else I would have to do?
In java do you have to rebuild the entire jar/war file? Also, is there some open source package available for doing updates?
回答1:
The person receiving the class file could simply add that file to the jar as long as they know which directory to put it in. Be weary of signed jars, as noted in the comments.
jar uf foo.jar foo.class
http://docs.oracle.com/javase/7/docs/technotes/tools/solaris/jar.html
回答2:
You can copy the modified .class file this way.
jar uf test.jar com\test\Test.class
If there is a logical way for you to separate out your components in individual jar files then I would create a jar file per component type. That way you will not have re-distribute everything back to the client. For example - take a look at how Spring 3 has the components separated out.
回答3:
There is JARDiff, designed for updating Java WebStart applications.
回答4:
You will need to rebuild the entire jar file unless you want them to unjar, overwrite a file and rejar.
回答5:
Take a look at the usage of jar
command. The option u lets you update an existing archive.
回答6:
Just open up your jar file with 7zip and overwrite the classes you have edited. Make sure to make a backup first though.
回答7:
If you have your old and new jar file, you can create an xdelta of both and send only the delta file to your client, which should be much smaller than the whole jar file, if you changed only one class of many. This should work for signed jars, too, but requires that both sender and receiver have the xdelta program (or be able to install it).
And of course, you have to create the new jar first (but this can be done by the methods already mentioned by the other answers).
来源:https://stackoverflow.com/questions/5069539/is-there-are-way-to-patch-jar-files