2015-01-04 3 views
-4

.jar 파일을 다운로드하는 업데이터가 있습니다. 새로운 것이고 응용 프로그램을 종료 한 다음 .jar 파일을 업데이트 된 파일로 바꾸면 사용자는 해당 업데이트 된 버전을 실행할 수 있습니까?기존 .jar 파일을 새로운 것으로 바꾸는 방법?

어떻게해야합니까?

+0

Java IDE를 시작하고 프로그래밍함으로써. 이 대답이 도움이됩니까? 아니? 그런 다음 설명하는 단계 중 어떤 단계에 대해 도움이 필요하고 정확히 무엇을 알아야하는지에 대해 좀 더 자세하게 설명하십시오. – Philipp

+0

http://hellotojavaworld.blogspot.nl/2010/11/runtimeaddshutdownhook.html 여기에 복사 명령을 입력하십시오. – Charlie

답변

0

현재 사용중인 파일을 덮어 쓰는 데 문제가있는 것 같습니까? 이것은 크게 운영 체제에 따라 다릅니다. Windows에서 Java는 현재 사용중인 모든 jar 파일을 잠그므로 겹쳐 쓸 수 없습니다. Linux에서는 덮어 쓰기가 가능하지만 Java가 전체 파일을 RAM에 복사하지 않기 때문에 파일에서 새로운 클래스를로드 할 수 없으므로 코드가 일부 단계에서 실패 할 수 있습니다 (이 문제는 예를 들어, 종료시에만 사용되는 AskShutdownDialog 클래스). 나는 MacOS에 대해 모른다.하지만 시도해 보는 것도 좋은 생각이 아니다. 다음의 주요 응용 프로그램을 종료하는 java -jar updatehelper.jar 전화를 사용하여 시작

  • 당신은 도우미 응용 프로그램을 사용할 수 있습니다 :

    이 문제를 해결하기 위해 많은 트릭이 있습니다. UpdateHelper는 응용 프로그램이 종료 될 때까지 기다린 다음 이전에 다운로드하고 확인한 파일을 대체하고 다른 Java 호출을 사용하여 다시 기본 응용 프로그램을 시작합니다.

  • 또한 도우미로 명령 줄 스크립트를 사용할 수 있지만, 적어도 Windows에서 그것을 개발하는 것은 매우 쉬운 일이 아닙니다 당신은 시스템 특정 스크립트이 옵션의

모두를 운영해야 할 특정 일부 운영 시스템이 필요 코드, 적어도 자바 응용 프로그램을 다시 시작할 수있는 바이너리를 찾으려면. 이것은 테스트되지 않은 OS에서 문제를 일으킬 수 있습니다. (

)
  • 완전히 다른 방법은 로더를 구현하는 것입니다. 이 파일은 오랜 시간 동안 변경되지 않는 작은 jar 파일입니다. 이 로더는 현재 버전을 찾으려고 할 수 있습니다. 예를 들어 설정 파일에서 기본 항아리의 이름을로드하면됩니다 : MyMain-1.01.jar (전체 클래스 경로를이 파일에 저장하고 이름을 지정하는 것이 좋습니다. 메인 클래스, 당신은 또한 자신의 클래스 로더가 필요할 것이다). 그런 다음이 파일을로드하고 실제 파일을 호출합니다. 이 설정을 사용하면 OS 의존 코드는 필요 없지만 적어도 Windows에서는 항상 로더가 잠겨 있음을 알아야합니다. 그러나 그 후에도 새로운 버전의 응용 프로그램에 UpdateHelper를 도입 할 수 있습니다. 이 옵션을 한 번 사용하고 매우 안정적인 업데이트 개념을 가졌습니다. 로더가 진행 막대가있는 시작 화면을 표시하고 웹 서버에서 직접 업데이트를 다운로드했습니다. 이와 비슷한 것을 원할 경우 Java WebStart

  • 또한 핫 배포 옵션이 있습니다. 즉, 런타임에 jar 파일을 언로드한다는 의미입니다. 그러나 이것은 매우 모듈화 된 응용 프로그램 설계를 필요로하며 모듈간에 하드 참조가 필요하지 않습니다. 이것은 응용 프로그램 서버와 Tomcat, Jetty, JBoss 등과 같은 웹 서버의 도메인으로 개별 클래스 로더를 사용합니다. 이것을 처음부터 구현하는 것은 쉽지 않습니다.

관련 문제