현재 프로젝트에서 SVN 을 사용하고 있습니다. 


IDE는 IntelliJ 2016.5 를 사용하고 있고요. 


헌데, 작업중인 branch 에서 trunk 로 complete merge 를 진행하려 하였으나, 오류가 나면서 진행이 안되었습니다. 

$ svn merge https://server.blah/source/orb/branches/bronze_services
svn: Reintegrate can only be used if revisions 650 through 694 were previously merged from
     https://server.blah/source/orb/trunk to the reintegrate source, but this is not the
     case:
  branches/bronze_services/occl
    Missing ranges: /trunk/occl:650-693

그래서 범위 merge 를 시도하였습니다. 작업 결과는 성공으로 나오더군요. 

하지만 자세히 살펴본결과, 일부 병합이 제대로 처리가 되지 않은 상태였습니다.

이걸 모르고 commit 을 해버렸네요. 


그래서 trunk 에 commit 된 결과를 reverting (ranges of) revisions 을 진행하여 원래 상태의 trunk 로 돌렸고, 

다시 명령행을 통해 Merging ranges of revisions 를 진행하였습니다. 


결과는 적합한 병합이 되었네요. 

$ svn merge -r 650:693 https://server.blah/source/orb/trunk
$ svn commit -m 'merged revisions 650:693 from trunk'
    Sending        occl
Committed revision 695.


왜 이런 현상이 나타나는지는 모르겠지만,, (아마 IntelliJ 버그라고 보여지네요.) 

이런 현상이 발생하는 경우 참고하세요. 


svn merge 방법

https://www.mediawiki.org/wiki/Quick_SVN_merging_guide


예문 참조

http://stackoverflow.com/questions/4737605/reintegrate-can-only-be-used-if-revisions-x-through-y-were-previously-merged-fro

블로그 이미지

카랸

나의 일상 생활 이야기~~

,
http://kimsq.cweb.co.kr/b/tinylogs/10#.


블로그 이미지

카랸

나의 일상 생활 이야기~~

,

이번에 maven release 를 하면서 하루 동안 삽질한 결과를 남긴다.


삽질을 하긴 했지만, 그래도 이를 통해 많은 것을 배운 것은 좋게 생각한다. 

단, 같은 실수를 다시 하면 안되겠지!


maven 의 release 순서는 다음과 같다.


  1. 모든 사항을 commit 하여 local 에 변경점을 모두 저장소에 올린다.

  2. pom.xml 파일의 내용을 확인한다.
    1. <scm> 태그가 존재하여야 한다.
    2. 인코딩에 문제가 발생한다면, pom.xml에 다음과 같이 설정한다.
      <properties>
          <project.build.sourceEncoding>utf-8</project.build.sourceEncoding
          <project.reporting.outputEncoding>utf-8</project.reporting.outputEncoding>
      </properties>
    3. maven-release plugin 에도 계정 정보가 필요하다.
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-release-plugin</artifactId>
        <version>2.5.2</version>
        <configuration>
          <branchBase>${svn.branches.dir}</branchBase>
          <tagBase>${svn.tags.dir}</tagBase>
          <autoVersionSubmodules>true</autoVersionSubmodules>
          <goal>deploy</goal>
          <username>${svn.username}</username>
          <password>${svn.password}</password>
        </configuration>
      </plugin>

  3. 필요할 경우 java args 옵션을 통해 test와 javadoc의 생성을 중지시킨다.
    -Darguments="-DskipTests -Dmaven.javadoc.skip=true"

  4. release:prepare 를 실행한다.
    1. 릴리즈 버전 정보를 입력.
    2. svn tag 정보를 입력.
    3. 개발 버전 정보를 입력.
    4. 만약 문제가 발생할 경우 release:rollback 을 수행하면 초기화 시킬 수 있다.
    5. tag 에 같은 이름이 있을 경우 오류가 발생한다. 지우고 처리할 것.
    6. nexus 에서 bad request 400 오류가 발생할 경우, release repository 를 삭제한 후 작업할 것.

  5. release-perform 를 실행한다.


Gradle 로 곧 변경을 할 예정이지만, maven 에 있을 때까지는 꿀을 빨도록 하자.

블로그 이미지

카랸

나의 일상 생활 이야기~~

,

18 Top Tools for Java developers


아래 링크를 살펴보자.


블로그 이미지

카랸

나의 일상 생활 이야기~~

,
블로그 이미지

카랸

나의 일상 생활 이야기~~

,
modal 창을 이용하다보면, 전송 버튼을 눌렀을 때 _self 를 썼음에도 불구하고 새로운 모달창이 하나 더 떠서 곤혹스러울 때가 있다. 

이 때의 해결방법은 다음과 같다.

모달 창 jsp 페이지 내부에 

window.name = "dialogPopup";
form.target = "dialogPopup";
form.submit();

위처럼 해주면 새로운 창으로 뜨는 황당함을 피할 수 있을 것이다.

블로그 이미지

카랸

나의 일상 생활 이야기~~

,
다운로드 작업에 필요한 사항 하나가 인코딩 작업이다.

파일 명을 다운로드할 경우 다음과 같이 인코딩을 하면 된다.

...
        String fileName = request.getParameter("fileName");
        String fileMask = request.getParameter("fileMask");
       
        // 서버폴더명
        String savePath = Constants.UPLOADPATH_BBS;
       
        // Download file
        File file = new File(savePath + File.separatorChar + fileMask); // 절대경로입니다.
        byte b[] = new byte[(int) file.length()];

        fileName = URLEncoder.encode(fileName, "UTF-8");
        response.setContentType("Content-type: application/x-msdownload;");
        response.setHeader("Content-Disposition", "attachment; filename="
                + fileName);
        logger.debug("download path : " + savePath + File.separatorChar + fileMask);

        if (file.isFile()) {
            BufferedInputStream fin = null;
            BufferedOutputStream outs = null;
            int read = 0;

            try {
                fin = new BufferedInputStream(new FileInputStream(file));
                outs = new BufferedOutputStream(response.getOutputStream());

                while ((read = fin.read(b)) != -1) {
                    outs.write(b, 0, read);
                }
                outs.close();
                fin.close();

            } catch (Exception e) {
                logger.error(e.getMessage(), e);
                frm.setResultMsg(bundle.getMessage(getLocale(request), "SYSCommConInqAL.msg.error.fileDownload"));

            } finally {
                if (outs != null)
                    outs.close();
                if (fin != null)
                    fin.close();
            }
        }

블로그 이미지

카랸

나의 일상 생활 이야기~~

,
FCKeditor(http://www.fckeditor.net/) 는 오픈소스 에디터이면서도 매우 강력한 기능으로 사랑받고 있다.
하지만 강력한 기능만큼 설정 또한 약간 복잡하다.

다음에서 FCKeditor 의 설정을 알아보도록 하겠다.

블로그 이미지

카랸

나의 일상 생활 이야기~~

,