2010-03-17 7 views
8

안녕하세요 스택 오버플로 친구. 나는 간단한 해결책을 갖고있는 두려움이없는 간단한 문제가 있으며 진행 방법에 대한 조언이 필요하다. 나는 실행 가능한 JAR로 패키징 된 자바 애플리케이션을 개발 중이다.하지만 실행 중에 JAR 파일 내용을 수정해야한다. 일부 OS는 파일을 잠그기 때문에이 단계에서 문제가 발생합니다.수정 실행 Jar 파일

사용자가 응용 프로그램을 종료 할 때까지 jar 파일의 업데이트 된 버전을 볼 수 있어야합니다. 그러나이 방법은 상당히 유연 할 수 있습니다. 깨끗하고 효율적인 솔루션이 분명히 선호되지만 이식성은 유일한 어려운 요구 사항입니다.

다음은 문제를 해결할 수있는 3 가지 접근 방식입니다. 문제에 대해 의견을 말하고 다른 사람들에게 자유롭게 의견을 제시 할 수 있습니다.

  1. (이 나던 가능 보인다하지만 easyest 해결책이 될 것이다) 작성에 대한 JAR 파일의 잠금을 해제하기 위해 자바에게 응용 프로그램 시작에 tempory 파일의 실행 클래스 파일
  2. 복사를로드하는 클래스 로더를 사용 이 파일들을 초기 JAR 파일에서 언로드하십시오. (클래스 로더에 대한 많은 경험이 없지만 JVM이 원래의 JAR이 더 이상 사용되지 않으므로 잠금 해제하기에 충분히 똑똑 할 것입니다.)
  3. 두 번째 넣기 실행 가능한 JAR 파일 시작, 시작시 내부 임시 파일을 임시 파일로 추출하고, 복사 된 내부 JAR을 사용하여 새 Java 프로세스를 호출하고 외부 JAR, 첫 번째 프로세스의 위치를 ​​전달하십시오 종료, 두 번째 과정은 unincumbered 바깥 항아리를 modifys. (이 작동하지만 하나 개의 자바 앱이 다른 호출의 플랫폼 독립적 인 방법이 확실하지 메신저 것이다) 나는이 이상한 질문이지만 어떤 도움을 주시면 감사하겠습니다 알고

가 .

+3

실행하는 동안 jar 파일을 수정해야하는 이유에 대해 알려 줄 수 있습니까? – Poindexter

+0

@pinkynobrain 당신은 예전의 개미 식으로 생각하고 있습니다. 예를 들어 무료 전자 서적으로 Maven을 읽으시 고 제안하시는 것이 의미가 없다는 것을 알게 될 것입니다. 나는 당신을 도우려고 노력하는 것이 아닙니다. .. 우리 모두가 거기에 없었어요 – ant

+0

달성하기 위해 무엇을하려합니까 - 자체 업데이트 응용 프로그램? –

답변

2

하나의 옵션 :

이 프로그램이 JAR 파일의 수정 사본을 적게한다.

JAR 파일에는 실행시 원본 JAR 파일을 삭제하고 수정 된 복사본의 이름을 원래 파일 이름과 동일하게 변경하는 유틸리티가 포함 된 두 번째 JAR 파일이 포함됩니다.

프로그램이 종료되면 (변경된 후)이 유틸리티를 추출하여 자체 JVM (Runtime.getRuntime().exec() 사용)에서 실행하십시오. 유틸리티는 잠금이 원래의 수정되지 않은 JAR에서 빠져 나올 때까지 기다렸다가 비즈니스를 수행하고 종료합니다.

사용자에게 종료 할 때 JAR 파일이 업데이트되는 것처럼 보일 것입니다 (또는 충분히 가까워 야합니다!).

+0

이 질문에 유래 stackoverflow.com 의해 질문 Hey, 답변을위한 ths, 그게 내 옵션 3 동일한 문제가 여전히 고통 스럽지만 definetly 다른 솔루션 thats. 나는 exec ("java") 상당히 portable 나는 다른 Java 애플리케이션을 생성하는 진정한 플랫폼 독립적 인 방법이 있기를 바랬다. – PinkyNoBrain

+0

Java는 다른 많은 언어보다 플랫폼 독립적 인 반면, 여러 가지면에서 불완전하지만 많은 이점이있다. jar 파일을 실행하는 방식과 같은 것을 플랫폼 기반의 스위치에서 수행 할 수 있습니다. (심지어 다를 필요가 있다면 - 'Java '은 유닉스와 윈도우에서 작동한다고 생각합니다.) – Chris

+0

어때요? 'Runtime.getRuntime(). exec()'을 실제 호출 전에 플랫폼'독립적 인 '방법으로 실행하는 데 필요한 모든 정보를 얻었습니다.'System.getProperties()'메소드는 유용한 정보를 가지고 있다고 생각합니다. ation. –

1

나는 당신의 접근 방식이 잘못되었다고 솔직하게 생각합니다. 이것은 단순히 java를 배치하는 기본 방법에 적합하지 않습니다. 수정 된 파일은 db 또는 xml 파일을 어딘가에 보관해야합니다. 이는 실용적인 방법입니다.

뭐니 뭐니해도 "바람과 싸우는 것"일뿐입니다. 힘들어하면 효과가 있지만, 결국에는 당신이나 고객을 물 것입니다.

+0

이 답변을 싫어해서 죄송합니다. 이름 바꾸기, 잠그기, 등등과 함께, 나는 당신이 문제에 잘 맞지 않는 해결책을 강요하려고 했었다는 나의 생각을 표현하고있었습니다. – MJB

+1

그래서 답이 아니라 주석이됩니다. –