====== SonaType Nexus ====== * http://www.sonatype.org/nexus/ ===== 설정시 주의점 ===== * gradle이나 maven이 Nexus에 요청을 보낼때 GET이 아닌 **HEAD** 요청을 보내 파일의 존재 여부를 체크하는 경우가 있는데, 이때 nginx 1.2 버전에서 HEAD + gzip 설정이 돼 있을 경우 HEAD에 body 까지 담아 보내는 버그가 있어서 파일 다운로드 체크가 올바로 안되는 현상이 발생함. [[nginx:gzip|nginx gzip]] - gzip 을 꺼버려서 해결. 혹은 nginx을 1.4 이상으로 업그레이드 할 것. * Maven Central 리포지토리 설정에서 ''HTTP Request Settings'' 조절안하면 존재하지 않는 파일에 대한 요청을 무한히 기다리는 현상이 발견됨. * ''Request Timeout'' : 3 초로 조정. * ''Request Retry Attemps'' : 3 회로 조정. ===== Proxy 설정 ===== * Proxy 설정 후 **Public Repository**에 추가해줘야 public 주소 하나로 접근 가능하다. ===== jcenter.bintray.com 과 Github Raw Repository ===== * https://github.com/sagemintblue/sagemintblue-repositories 참조. * Nexus 를 리포지토리로 사용할경우 Github 리포지토리를 Proxing 할 때 설정을 주의해야 한다. * **Proxy**로 설정한다. * **Remote Repository Access > Download Remote Indexes**를 **false**로 지정한다. * **Remote Repository Access > Auto blocking active**를 **false**로 지정하고 ''Refresh''한다. * **Repository Status**가 ''Attempting to Proxy and Remote Unavailable'' 로 변한다. ===== Snapshot buildNumber 안 맞는 문제 ===== SNAPSHOT을 배포했는데, 아래처럼 buildNumber(아래에서는 2)와 실제 파일의 빌드넘버(아래에서는 1)로 안 맞는 경우가 발생했다. some.group.id some-artifact 0.0.1-SNAPSHOT 20140208.121756 2 20140208121803 javadoc jar 0.0.1-20140208.121756-1 20140208121756 아때 Nexus 리포지토리에서 해당 아티팩트를 선택하고 **Rebuild Metadata**를 했더니 정상으로 변경되었다. ===== Nexus v2 Rest API ===== * [[http://jagadesh4java.blogspot.com/2016/09/nexus-rest-api.html|My Technical Works: Nexus Rest API]] * [[network:httpie|HTTPie]] 기반 예제. 인증 옵션은 상황에 따라 다름 * [[https://gist.github.com/cedricwalter/e7739aab3d370ef83f1a13b8322e50be|Sonatype NEXUS 2 has a rest API :-) but NEXUS 3 has none/not ready, the following simulate curl/wget call]] * **LATEST** 버전 체크 API 가 인덱스 갱신이 느린지 정상 작동하지 않음. * 차라리 https://stackoverflow.com/a/40378096/1051402 이 방식이 작동함 # maven-metadata.xml URL을 group/artifact 에 따라 달라짐 wget -O - -o /dev/null https://repo1.maven.org/maven2/org/brutusin/wava/maven-metadata.xml | grep -Po '(?<=)([0-9\.]+(-SNAPSHOT)?)' | sort --version-sort -r| head -n 1 # 혹은 curl 로 curl -s https://repo1.maven.org/maven2/org/brutusin/wava/maven-metadata.xml | grep -Po '(?<=)([0-9\.]+(-SNAPSHOT)?)' | sort --version-sort -r| head -n 1 last_version=$(wget -O - -o /dev/null http://nexus.myrepo/content/repositories/releases/myjar/maven-metadata.xml | grep -Po '(?<=)([0-9\.]+(-SNAPSHOT)?)' | sort --version-sort -r| head -n 1) # snapshot 의 최신 빌드를 확인하려면 - last_version 을 안다고 했을 때 curl -s "https://repo1.maven.org/maven2/org/brutusin/wava/${last_version}-SNAPSHOT/maven-metadata.xml" | grep -Po '(?<=)([0-9\.\-]+)' | sort --version-sort -r | head -n 1 # 서버 상태 http -a admin:admin123 -v "http://[서버]/service/local/status" # 최신버전. r=리포지토리ID, g=그룹명, a=아티팩트ID, e=jar|war 등. 잘 작동안함. http -a admin:admin123 "http://[서버]/service/local/artifact/maven/content?r=repoId&g=groupName&a=art&e=jar&v=LATEST" # 최신버전 curl 잘 작동안함 curl -u "admin:admin123 http://[서버]/service/local/artifact/maven/content?r=repoId&g=groupName&a=art&e=jar&v=LATEST" -o art.jar # 특정 버전 명시 curl : 특정버전 명시할 때는 잘 작동함. ## r=snapshots, v=1.0.1-SNAPSHOT 형태로 스냅샷을 지정하면 스냅샷도 잘 받아짐. curl -u "admin:admin123 http://[서버]/service/local/artifact/maven/content?r=repoId&g=groupName&a=art&e=jar&v=VERSION" -o art.jar