2008-10-16 3 views
12

저는 작업중인 Java/Swing 응용 프로그램에 자체 업데이트 기능을 추가하는 방법을 알아 내려고하고 있습니다.Java Swing 응용 프로그램에 자체 업데이트 기능을 추가하는 가장 좋은 방법은 무엇입니까?

기본적으로 설치된 사용자가 변경 될 때 재배포되는 추가 기능이있는 jar 파일이 많이 있습니다. 복잡하지 않고 새로운 버전이 출시되었는지 확인하고 HTTP를 통해 다운로드 한 다음 선택적으로 사용자에게 앱을 다시 시작하도록 제안합니다.

웹 스타트를 살펴보고 작동 할 수 있습니다. 그러나이 특정 앱은 webstart를 통해 지원되는 것처럼 보이지 않는 클래스로드 및 GC 메모리 설정을 사용하여 펑키 한 작업을 수행하거나 최소한 문제를 복잡하게 만듭니다.

나는이 플러그인 처리기 http://swing-fx.blogspot.com/2008/06/add-auto-update-and-plugins-to-your.html에 추가하는 길을 갔지만, 매우 알파 상태이며 알파 물건으로 얻는 일반적인 버그로 너무 많은 것을 시도합니다.

답변

6

나는 똑같은 일을했다. 그러나 그것은 오래전 이었기 때문에 오늘날에는 더 나은 도구가있을 것입니다.

내가 알아 낸 것은 로더였습니다. 로더 기본 프로그램에 classpath에 app jar가 없습니다. 먼저 필요한 경우 업데이트를 다운로드 한 다음 클래스 경로에 응용 프로그램 jars가있는 사용자 정의 클래스 로더를 만들고 응용 프로그램 기본 클래스의 main 메서드를 호출했습니다. 그것은 그리 복잡하지 않습니다. IIRC 나는 classpath에 이미있는 경우 jar 파일을 창에서 덮어 쓸 수 없기 때문에이 작업을 수행해야했습니다.

희망이 도움이됩니다.

+0

가장 쉬운 방법 인 것 같습니다. 나는 서버에 XML 파일을 저장했고, 업데이트 할 모든 파일과 버전 번호를 로컬에 저장 한 복제본을 보관했다. 빠르고 간단하지만 트릭을 수행합니다. – madlep

4

우리는 6 년 전에 자체 업데이트가있는 스윙 앱을 사용했습니다. 귀하가 제안한 것처럼

1) http를 통해 최신 항아리를 다운로드했습니다.
2) 폴더에 복사했습니다.
3) 스윙 앱이 .BAT 파일을 사용하여 실행 되었기 때문에 사용자가 YES라고 말한 후에 스윙 앱을 종료하고 업데이트 폴더의 파일을 찾습니다. 그렇다면 다른 .BAT 파일을 실행하여 NEW JAR을 필수 디렉토리에 복사하십시오.
4) 스윙 앱을 다시 실행하십시오.

1

필자는 Webstart를 먼저 시험해 보겠습니다. 우리는 Webstart를 사용하여 초기 Eclipse RCP 응용 프로그램을 성공적으로 시작하여 많은 성공을 거두었으며 OSGI 프레임 워크 (Eclipse Equinox)보다 더 재미있는 클래스로드 문제를 얻을 수 없습니다.

클래스 로딩 접근에 대한 질문에 좀 더 자세히 설명해 주시겠습니까?

GC 및 기타 VM 설정 관련 : Web Start에서 응용 프로그램을 시작하는 데 사용되는 JNLP (Java Network Launching Protocol) 파일에서 이러한 설정을 쉽게 지정할 수 있습니다.

+0

RCP 앱에 대한 링크를 제공 할 수 있습니까? – Liam

+0

웹 스타트 할 수있는 RCP 앱을 의미합니까? 내가 작업 한 것은 인트라넷 유형의 엔터프라이즈 애플리케이션 용이므로 웹에서는 사용할 수 없습니다. –

4

업데이트, 플러그인, 관심사 등은 정확히 OSGi의 내용입니다.이 부분을 살펴 보시기 바랍니다.무료 오지 않습니다 (읽기 : 가파른 초기 학습 곡선, 특히 현재 클래스 로딩 트릭을 사용하는 경우) 적어도 좋은 오픈 소스 구현이있다 (펠릭스 - 춘분이 felix.apache.org 참조 - www.eclipse.org 참조 등)

가 이러한 구현의 경우 자동 업데이트 기능을 사용할 수 있습니다. 모듈을 올바르게 작성하면 런타임에 다시 시작하지 않고도 업데이트 할 수 있습니다.

1

Java Web Start는 좋은 선택입니다. GC 물건은 중요하지 않습니다. 클래스 로딩은 문제가 될 수 있습니다. 그러나 사용자가 신뢰할 수있게되면 AllPermisions를 부여 할 수 있으며 사용자 정의 클래스 로딩을 수행 할 수 있습니다. 어쩌면 클래스 로딩과 함께 펑키 한 것들을 재고하는 것이 좋을 것입니다. 정말 필요한가? 또는 NetBeans를 살펴보십시오. 자동 업데이트에 대한 영감을 얻어야합니다.

관련 문제