我已经创建了一个应用程序,在这种基础上的操作,它修改属性罐内文件。
我能够创建一个新的临时罐子更新的变化。 但不能重命名的jar文件到现有的jar文件名。 由于它在运行,我不能删除和重命名。
任何一个可以提出任何行动或建议删除该JAR(目前执行),并重新命名临时罐子这个名字?
我已经做了应用: http://java.net/projects_tags/jeazyprops
我已经创建了一个应用程序,在这种基础上的操作,它修改属性罐内文件。
我能够创建一个新的临时罐子更新的变化。 但不能重命名的jar文件到现有的jar文件名。 由于它在运行,我不能删除和重命名。
任何一个可以提出任何行动或建议删除该JAR(目前执行),并重新命名临时罐子这个名字?
我已经做了应用: http://java.net/projects_tags/jeazyprops
可能是你需要编写自定义的类装载器(扩展类加载器),它使您可以加载/卸载罐子。 您应该能够删除的罐子,如果你可以卸载的罐子。
相关链接http://docs.oracle.com/javase/tutorial/deployment/jar/jarclassloader.html
我可以动态地卸载和重装JAR(相同的其他版本)?
你的问题是默认ClassLoader
是预先的Java 1.7的用途-它锁定任何广口瓶,它的负载,直到执行完成不释放罐子。 最简单的解决方法是使用Java 1.7应该解决这个问题。 否则,你可以编写自己的定制ClassLoader
(啊)。 默认ClassLoader
: http://docs.oracle.com/javase/6/docs/api/java/net/URLClassLoader.html
编辑
下面是从Oracle说,他们固定它在Java中1.7注: http://openjdk.java.net/projects/jdk7/features/#f584
我没有看到更换您从程序中执行的jar的可能性。
建议的方法。
创建一个简单的类,只是启动您的现有应用程序新的罐子。 塔发射前应该检查temp.jar
存在,如果存在,删除原和重命名temp.jar
原始。 在创建后,您的应用程序temp.jar
,劳克使用发射器类Runtime.exec
并退出。 您的应用程序将与新的JAR重新启动。