[java] jar 내부의 파일 수정

내 항아리 안의 파일을 수정하고 싶습니다. 내 응용 프로그램에서 추출 및 재 조립없이이 작업을 수행 할 수 있습니까?

수정하려는 파일은 대부분 xml 기반의 구성 파일입니다.

내가 unjarring하지 않는 데 관심이있는 이유는 응용 프로그램을 unjar하면 launch4j로 래핑되어 .exe 파일을 다시 만들 수 없기 때문입니다.



답변

다음 u옵션을 사용할 수 있습니다.jar

Java Tutorials에서 :

jar uf jar-file input-file(s)

“추가되는 파일과 동일한 경로 이름을 가진 아카이브에 이미있는 모든 파일을 덮어 씁니다.”

JAR 파일 업데이트를 참조하십시오 .

항아리 전체를 다시 만드는 것보다 훨씬 낫습니다. 프로그램 내에서 이것을 호출하는 것도 가능합니다. Java에서 명령 줄 실행 시도


답변

Vim을 사용할 수 있습니다.

vim my.jar

Vim은 unzip사용자 환경에서 압축 된 텍스트 파일을 편집 할 수 있습니다.


답변

Java jar 파일은 zip 파일과 동일한 형식입니다. 따라서 아카이브를 수정할 수있는 zip 파일 유틸리티가있는 경우 발을 들여 놓을 수 있습니다. 두 번째 문제는 만약 당신이 클래스 나 무언가를 재 컴파일하고 싶다면 아마도 단지 단지 재 빌드해야 할 것입니다. 그러나 텍스트 파일 또는 기타 (예 : xml)는 쉽게 수정할 수 있어야합니다.


답변

많은 사람들이 말했듯이 JAR을 다시 만들지 않고는 JAR의 파일을 변경할 수 없습니다. Launch4J를 사용하면 더 나빠집니다. 일단 JAR을 변경하면 EXE를 다시 빌드해야합니다. 그러니이 길을 가지 마십시오.

일반적으로 구성 파일을 JAR에 넣는 것은 좋지 않습니다. 여기 내 제안이 있습니다. 미리 지정된 위치 (예 : 홈 디렉토리, \ Program Files \ 등)에서 구성 파일을 검색합니다. 구성 파일을 찾으면 사용하십시오. 그렇지 않으면 JAR에있는 것을 폴백으로 사용하십시오. 이렇게하면 미리 결정된 위치에 구성 파일을 작성하기 만하면 프로그램이이를 선택합니다.

이 접근 방식의 또 다른 이점은 소프트웨어를 업그레이드해도 수정 된 구성 파일을 덮어 쓰지 않는다는 것입니다.


답변

이 도움이되는지 확실하지 않지만 추출하지 않고 편집 할 수 있습니다.

  1. vi 편집기에서 jar 파일 열기
  2. 목록에서 편집 할 파일을 선택하십시오
  3. Enter 키를 눌러 파일을 열고 변경자를 수행하고 매우 간단하게 저장하십시오.

자세한 내용은 블로그 게시물을 확인하십시오.
http://vinurip.blogspot.com/2015/04/how-to-edit-contents-of-jar-file-on-mac.html


답변

이것은 단기적으로 처리하려는 것보다 더 많은 작업 일 수 있지만 장기적으로는 jar를 수동으로 빌드하는 대신 Ant (또는 Maven 또는 Bazel ) 를 사용하는 것이 매우 유익 할 것이라고 생각합니다. . 이렇게하면 ant 파일 (Eclipse를 사용하는 경우)을 클릭하고 jar를 다시 빌드 할 수 있습니다.

또는 실제로 jar에 이러한 구성 파일이 전혀 포함되어 있지 않을 수 있습니다. 이러한 파일을 정기적으로 교체해야하거나 여러 당사자에게 배포해야하는 경우 구성 파일은 다음의 일부가 아니어야합니다. 항아리.


답변

dfa가 말한 내용을 확장하려면 jar 파일이 zip 파일처럼 설정되어 있기 때문입니다. 파일을 수정하려면 모든 항목을 읽고 변경할 항목을 수정 한 다음 항목을 jar 파일에 다시 써야합니다. 나는 전에 이것을해야했고, 그것이 내가 그것을 할 수있는 유일한 방법이었다.

편집하다

이것은 파일 스트림 인 내부에서 Java jar 파일 편집기를 사용하고 있습니다. 나는 그것을 할 수있는 방법이 있다고 확신합니다. 전체 병을 메모리로 읽고 모든 것을 수정 한 다음 파일 스트림에 다시 쓸 수 있습니다. zip 헤더의 ToC가 쓰기 시간에 정의되어야한다고 믿기 때문에 이것이 내가 7-Zip과 같은 유틸리티가하고 있다고 믿는다. 그러나 나는 틀릴 수 있습니다.