넥서스 레포지토리란

maven에서 사용할 수 있는 가장 널리 사용되는 무료 repository 이다. 사설 Repository로 사용할 수 있으며 코드 공유등에 사용 할 수 있다. Docker와 Helm도 지원한다! 생각보다 많은 것들을 지원한다.

용도는 어떤게있을까?

참조 : https://gs.saro.me/dev?tn=466

저장소 종류

  • 프록시 저장소(Proxy Repository)
    • 프록시 저장소는 메이븐 중앙 저장소등 원격지에 있는 저장소를 미러링한다.
  • 호스터 저장소
    • 기업용 사설 저장소, 업로드는 호스트 저장소만 가능하다.
  • 가상저장소
    • 다른 유형의 저장소의 아답터로 동작한다. 넥서스는 기본적으로 메이븐1형식의 저장소를 2형식으로 변환하는 기능을 제공
  • 그룹저장소
    • 여러종류의 저장소를 논리적으로 묶어 하나의 저장소처럼 사용할 수 있는 기능

사용법

  1. https://www.sonatype.com/download-oss-sonatype 에서 다운

  2. 압축 푼 뒤 nexus~~ 하위 폴더의 bin에 있는 nexus.exe를 실행합니다.
    • 리눅스 -./nexus run 윈도우 :nexus.exe /run
      접속이 된 것 이다.
  3. 접속 : http://localhost:8081 (default이다) / 초기 ID : admin / PW : admin123 OR admin.password 파일에 있음

  4. 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 공부도 필요