업데이트 (2)

리눅스 환경에 배포한 WAR 또는 JAR 파일에 새로운 파일을 추가하거나 기존 파일을 업데이트하는 방법


안녕하세요, 케이치입니다. 


오늘은 리눅스 환경에 배포한 WAR 또는 JAR 파일에 새로운 파일을 추가하거나 기존 파일을 업데이트하는 방법을 알려드리겠습니다. 그닥 이렇게 할 일이 없다보니 할 때마다 계속 까먹어서 그냥 혼자 끄적일겸 적어봅니다.


우선 /mydir/myapp.war 파일이 있다고 가정합니다.


우선 이 파일안에 어떤 파일이 있는지부터 확인해보죠.


$ cd /mydir

$ ll    (또는 ls -l)

-rw-rw-r--. 1 keichee keichee 63378 Nov  6 11:37 myapp.war


$ unzip -l myapp.war


Archive:  myapp.war

  Length      Date    Time    Name

---------  ----------   -----    ----

        0  11-06-2017 11:28   META-INF/

     128  11-06-2017 11:28   META-INF/MANIFEST.MF

        0  11-06-2017 11:28   css/

        0  11-06-2017 11:28   images/

        0  11-06-2017 11:28   WEB-INF/

        0  11-06-2017 11:28   WEB-INF/classes/

        0  11-06-2017 11:28   WEB-INF/classes/com/

        0  11-06-2017 11:28   WEB-INF/classes/com/my/

.
.....중략.....
.
  85308  08-14-2017 17:37   WEB-INF/lib/spring-oxm-4.3.0.RELEASE.jar
 587278  08-14-2017 17:37   WEB-INF/lib/spring-test-4.3.0.RELEASE.jar
 266993  08-14-2017 17:37   WEB-INF/lib/spring-tx-4.3.0.RELEASE.jar
 808847  08-14-2017 17:37   WEB-INF/lib/spring-web-4.3.0.RELEASE.jar
 905320  08-14-2017 17:37   WEB-INF/lib/spring-webmvc-4.3.0.RELEASE.jar
---------                           -------
 44109477                        393 files

WAR파일안에 어떤 파일들이 들어가있는지 디렉토리 경로까지 전부 확인할 수 있습니다.


이제 파일 하나를 추출해보도록 하죠.


추출할 대상은 /META-INF/MANIFEST.MF 입니다. 사이즈가 128이군요.


$ unzip myapp.war META-INF/MANIFEST.MF

Archive:  myapp.war

  inflating: META-INF/MANIFEST.MF

$ ll   (또는 ls -l )

-rw-rw-r--. 1 keichee keichee 44109477 Nov  6 11:37 myapp.war

drwxrwxr-x. 3 keichee keichee       17 Nov  9 14:42 META-INF

META-INF 디렉토리가 생성된 것을 확인할 수 있습니다.


$ cd META-INF

$ ls -l

-rw-rw-r--. 1 keichee keichee 128 Nov  6 11:28 MANIFEST.MF


파일이 있는 것을 확인할 수 있습니다. 사이즈가 128로 위에서 조회한 것과 동일하네요.


그럼 파일을 수정해볼까요?


$ vi MANIFEST.MF


마음대로 내용을 수정해서 파일 사이즈가 달라지도록 해주세요.


$ ls -l

-rw-rw-r--. 1 keichee keichee 145 Nov  9 13:38 MANIFEST.MF


파일의 사이즈와 시간이 변경되었네요. 128 -> 145


그럼 이 파일을 이제 다시 WAR 파일안으로 업데이트해서 넣어보도록 하겠습니다.


$ jar uvf myapp.war META-INF/MANIFEST.MF

adding: META-INF/MANIFEST.MF(in = 145) (out= 120)(deflated 17%)


파일을 추가한다고 나오면서 압축이 얼마나 됐는지가 나오네요. 17%가 압축됐습니다. 참고로 여기서 in은 실제 파일 사이즈out은 압축된 파일사이즈 입니다.


만약 jar 명령어가 없을 경우에는 zip 명령어를 사용할 수도 있습니다.

$ zip -r myapp.war META-INF/MANIFEST.MF

adding: META-INF/MANIFEST.MF(in = 145) (out= 120)(deflated 17%)



이제 다시 myapp.war 파일에 어떤 파일들이 있는지 조회해보도록 하겠습니다.


$ unzip -l myapp.war


Archive:  myapp.war

  Length      Date    Time    Name

---------  ----------   -----    ----

        0  11-06-2017 11:28   META-INF/

     145  11-09-2017 13:38   META-INF/MANIFEST.MF

        0  11-06-2017 11:28   css/

        0  11-06-2017 11:28   images/

        0  11-06-2017 11:28   WEB-INF/

        0  11-06-2017 11:28   WEB-INF/classes/

        0  11-06-2017 11:28   WEB-INF/classes/com/

        0  11-06-2017 11:28   WEB-INF/classes/com/my/

.
.....중략.....
.
  85308  08-14-2017 17:37   WEB-INF/lib/spring-oxm-4.3.0.RELEASE.jar
 587278  08-14-2017 17:37   WEB-INF/lib/spring-test-4.3.0.RELEASE.jar
 266993  08-14-2017 17:37   WEB-INF/lib/spring-tx-4.3.0.RELEASE.jar
 808847  08-14-2017 17:37   WEB-INF/lib/spring-web-4.3.0.RELEASE.jar
 905320  08-14-2017 17:37   WEB-INF/lib/spring-webmvc-4.3.0.RELEASE.jar
---------                           -------
 44109494                        393 files


파일 사이즈와 날짜가 변경이 되었네요.

참고로 여기에 조회되는 파일사이즈는 압축되기 전의 파일 사이즈입니다.


오류 메시지 : 새로운 apk의 버전 코드(1)가 이미 존재합니다.


해결방법 : 

AndroidManifest.xml 파일에서 


android:versionCode=""

android:versionName=""


를 찾을 수 있다면 해당 값을 변경해주시면 됩니다.


참고로 버전 코드는 몇 번째 업데이트인지를 표시해주시면되고 버전 네임에는 실제 사용자들에게 보여지는 버전입니다.


구글링 하면 대부분 위와같은 방법으로 해결하신 것 같은데 아마도 이클립스에서 안드로이드 개발 하시던 분들이 올린 글인것 같습니다.


저같은 경우는 안드로이드 스튜디오로 개발을 하고있는데 특별히 세팅을 바꾼게 없는데 manifest파일에 위와같은 설정이 없길래 그냥 수동으로 추가해보려했더니 warning이 떴는데 그래들 빌드에서 값을 오버라이드 하고 있다고 나오더군요.


만약 manifest파일에 저런 설정이 없다면 안드로이드 스튜디오 좌측 패키지 익스플로러 창에서 트리 표시 방법을 Android로 선택을 해주시면 build.gradle ( Module:app )을 열어보시면 versionCode와 versionName 설정하는 곳이 보이실 겁니다.


아래 사진을 참고하세요.






그럼 즐프하세요~ ^-^