넥서스 레포지토리란
maven에서 사용할 수 있는 가장 널리 사용되는 무료 repository 이다. 사설 Repository로 사용할 수 있으며 코드 공유등에 사용 할 수 있다. Docker와 Helm도 지원한다! 생각보다 많은 것들을 지원한다.
용도는 어떤게있을까?
참조 : https://gs.saro.me/dev?tn=466
저장소 종류
- 프록시 저장소(Proxy Repository)
- 프록시 저장소는 메이븐 중앙 저장소등 원격지에 있는 저장소를 미러링한다.
- 호스터 저장소
- 기업용 사설 저장소, 업로드는 호스트 저장소만 가능하다.
- 가상저장소
- 다른 유형의 저장소의 아답터로 동작한다. 넥서스는 기본적으로 메이븐1형식의 저장소를 2형식으로 변환하는 기능을 제공
- 그룹저장소
- 여러종류의 저장소를 논리적으로 묶어 하나의 저장소처럼 사용할 수 있는 기능
사용법
-
https://www.sonatype.com/download-oss-sonatype 에서 다운
- 압축 푼 뒤 nexus~~ 하위 폴더의 bin에 있는 nexus.exe를 실행합니다.
- 리눅스 -./nexus run 윈도우 :nexus.exe /run
접속이 된 것 이다.
- 리눅스 -./nexus run 윈도우 :nexus.exe /run
-
접속 : http://localhost:8081 (default이다) / 초기 ID : admin / PW : admin123 OR admin.password 파일에 있음
-
gradle을 이용 했을때 build.gradle에 nexus에 올린 jar 빌드코드와 host repository에 올릴 script를 작성한다.
- 아직 gradle에 익숙하지않아서 잘 모르니 참고만 하자..!
- 빌드와 upload가 제대로 됐다면 nexus에 올라가게 된다.
이로써 기본적으로 repository에 deploy하는 방법을 보았다.
upload의 경우 uploadArchives 로 release, snapshot 배포를 하고
download의 경우 repositories에 Maven 저장소의 Group으로 등록하고 dependencies 에 업로드한 라이브러리의 group id, artifact id, version로 가져오게 된다.
예)
참고 : https://help.sonatype.com/repomanager3/rest-and-integration-api
http://localhost:8081/service/rest/v1/search?repository=maven-public
같은 형식으로 repository의 목록을 받아올 수 있는 것 같다.
"items":[
{
"id": "bWF2ZW4tc25hcHNob3RzOjJlNDdkZGEwZjFiNTU1ZTA3MTU5ZGM5ZjlkZDNmZWY0",
"repository": "maven-snapshots",
"format": "maven2",
"group": "com.example",
"name": "Springboottest",
"version": "0.1.1-20190829.052800-2",
"assets":[
{"downloadUrl": "http://localhost:8081/repository/maven-snapshots/com/example/Springboottest/0.1.1-SNAPSHOT/Springboottest-0.1.1-20190829.052800-2.jar",…},
{"downloadUrl": "http://localhost:8081/repository/maven-snapshots/com/example/Springboottest/0.1.1-SNAPSHOT/Springboottest-0.1.1-20190829.052800-2.jar.md5",…},
{"downloadUrl": "http://localhost:8081/repository/maven-snapshots/com/example/Springboottest/0.1.1-SNAPSHOT/Springboottest-0.1.1-20190829.052800-2.jar.sha1",…},
{"downloadUrl": "http://localhost:8081/repository/maven-snapshots/com/example/Springboottest/0.1.1-SNAPSHOT/Springboottest-0.1.1-20190829.052800-2.pom",…},
{"downloadUrl": "http://localhost:8081/repository/maven-snapshots/com/example/Springboottest/0.1.1-SNAPSHOT/Springboottest-0.1.1-20190829.052800-2.pom.md5",…},
{"downloadUrl": "http://localhost:8081/repository/maven-snapshots/com/example/Springboottest/0.1.1-SNAPSHOT/Springboottest-0.1.1-20190829.052800-2.pom.sha1",…}
//~~~~~
]
},
dto
@Getter
@Setter
@ToString
public class Items {
private String id;
private String repository;
private String format;
private String group;
private String name;
private String version;
public Items(){
}
@Getter
@Setter
@ToString
public class NexusResult {
private List<Items> items;
// private String continuationToken;
}
service
@Service
public class NexusService {
private RestTemplate restTemplate;
public NexusService(RestTemplateBuilder restTemplateBuilder) {
this.restTemplate = restTemplateBuilder.build();
}
public NexusResult getAllList(){
nexusResult = restTemplate.getForObject("http://localhost:8081/service/rest/v1/search?repository=maven-public",NexusResult.class);
return nexusResult;
}
}
controller
@RestController
@RequestMapping("/nexus/test")
public class NexusRepoTestController {
@GetMapping("/list")
public ResponseEntity getAllList(@ModelAttribute NexusResult nexusResult){
nexusResult = nexusService.getAllList();
return new ResponseEntity(nexusResult, HttpStatus.OK);
}
}
maven만 사용하다 gradled을 사용하니 아직 너무 생소한 것이 많다. 또 속도도 빠르다고 들은 것 같은데 처음 빌드할때 느낀건 좀 느리다는 것 이었다. gradle 공부도 필요