자바에서 Long 값을 ==로 비교하면 안되지만,


실수하기 쉽다.


문제는 Long.valueOf()를 사용할 때


성능 향상을 위해 내부적으로 바이트 (Byte) 범위에 대해 캐시 (Cache)를 사용하는데


이로 인해 127을 넘어서기 전까지 정상 동작하는 함정이 있다.


다음은 이를 확인하는 테스트이다.


import org.junit.Test;


import static org.hamcrest.CoreMatchers.is;

import static org.hamcrest.CoreMatchers.not;

import static org.hamcrest.CoreMatchers.sameInstance;

import static org.hamcrest.MatcherAssert.assertThat;


public class LongTest {


    @Test

    public void valueOf() {

        assertThat(Long.valueOf("1"), is(sameInstance(Long.valueOf("1"))));

        assertThat(Long.valueOf("127"), is(sameInstance(Long.valueOf("127"))));

        assertThat(Long.valueOf("128"), is(not(sameInstance(Long.valueOf("128")))));

    }


}

저작자 표시

Posted by izeye

Gradle에서 Maven Artifact를 업로드하기 위해


build.gradle에 다음과 같이 작성한다.


apply plugin: 'maven-publish'


publishing {

    publications {

        maven(MavenPublication) {

            groupId 'com.ctb.tinyprojects'

            artifactId 'link-sharer'

            version '1.0.0'


            from components.java

        }

    }

}


publishing {

    repositories {

        maven {

            credentials {

                username "admin"

                password "xxx"

            }

            url "http://127.0.0.1:8080/repository/internal"

        }

    }

}


다음과 같이 디펜던시 (Dependency)를 사용할 수 있다.


repositories {

    mavenCentral()


    maven {

        url "http://127.0.0.1:8080/repository/internal"

    }

}


dependencies {

    compile("com.ctb.tinyprojects:link-sharer:1.0.0")


    compile("junit:junit:4.11")

}


참고로 Maven repository manager는 아파치 (Apache) Archiva를 사용했다.


Reference:

http://www.gradle.org/docs/current/userguide/publishing_maven.html

저작자 표시

Posted by izeye


티스토리 툴바