Gradle을 사용하여 Micronaut 프로젝트를 게시하는 방법

Gradle을 사용하여 Micronaut 프로젝트를 게시하는 방법

2022-10-03 last update

7 minutes reading devops gradle maven micronaut
저는 Micronaut와 함께 일하는 것이 정말 즐거웠습니다. 삶을 더 쉽게 만들어주는 놀랍도록 빠른 프레임워크입니다. 이 새로운 프레임워크는 시작하고 실행하기가 정말 쉽습니다. 반면에 출판은 문서화되어 있지 않기 때문에 이 작업을 수행할 수 있었던 방법에 대한 몇 가지 팁을 공유하고 싶었습니다.

개요



특히 Gradle을 사용하여 Micronaut 앱을 게시할 예정입니다. Micronaut CLI를 설치해야 합니다. 여기에서 잡을 수 있습니다: https://guides.micronaut.io/micronaut-cli/guide/index.html

Micronaut 앱 만들기



이제 CLI를 확보했으므로 새 프로젝트를 만듭니다. Micronaut 사이트의 Launcher 버튼은 특정 패키지를 원하는 경우 CLI 명령을 사용하는 데 도움이 됩니다. 그러나 단순함을 위해 특별한 것은 설치하지 않습니다. 다음 명령을 실행하여 데모 앱을 빌드합니다.

$ mn create-app --build=gradle --jdk=11 --lang=java --test=junit to.dev.publishing


Gradle 단계



나와 같은 경우 Gradle 플러그인이 설치된 IntelliJ가 있을 수 있습니다. 그렇다면 이 다음 부분은 생각할 필요가 없습니다. 단순히 프로젝트를 열면 백그라운드에서 Gradle이 실행되고 프로젝트가 생성됩니다. 다음과 같은 프로젝트 루트에 build.gradle 파일이 있어야 합니다.

plugins {
    id("com.github.johnrengelman.shadow") version "6.1.0"
    id("io.micronaut.application") version "1.4.2"
}

version = "0.1"
group = "to.dev"

repositories {
    mavenCentral()
}

micronaut {
    runtime("netty")
    testRuntime("junit5")
    processing {
        incremental(true)
        annotations("to.dev.*")
    }
}

dependencies {
    implementation("io.micronaut:micronaut-http-client")
    implementation("io.micronaut:micronaut-runtime")
    implementation("javax.annotation:javax.annotation-api")
    implementation("io.micronaut:micronaut-validation")
    runtimeOnly("ch.qos.logback:logback-classic")
}


application {
    mainClass.set("to.dev.Application")
}
java {
    sourceCompatibility = JavaVersion.toVersion("11")
    targetCompatibility = JavaVersion.toVersion("11")
}


Gradle 빌드 실행



다음 명령어를 실행하여 아티팩트를 빌드합니다.

$ ./gradlew build

> Task :compileTestJava
Note: Creating bean classes for 1 type elements

BUILD SUCCESSFUL in 11s
15 actionable tasks: 3 executed, 12 up-to-date


종속성과 워크스테이션에 따라 출력이 약간 다를 수 있습니다.

유물



생성된 아티팩트를 보려면 다음을 실행할 수 있습니다.

$ ls ./build/libs/
publishing-0.1-all.jar
publishing-0.1-runner.jar
publishing-0.1.jar



흠... 재미있죠? 3개가 있는데 어느 것을 생산으로 보내야 합니까? 짧은 대답은 publishing-0.1-all.jar 입니다. 그러나 어떻게 게시합니까? 그리고 나머지 두 JAR은 무엇을 위한 것입니까? (이건 다른 포스팅에서 다루도록 하겠습니다)

출판



현재 사용 사례에 가장 적합한 게시 전략을 이해하는 데 시간이 좀 걸렸습니다. 내가 원했던 것은 다음 3가지였다.
  • 기본 JAR
  • 배포의 Zip 아카이브
  • 배포판의 타르 아카이브

  • 확인. 좋아요... 그럼 어떻게 할까요? build.gradle 파일에 다음 줄을 추가합니다.

    publishing {
        publications {
            myDist(MavenPublication) {
                artifact shadowJar
                artifact distZip
                artifact distTar
            }
        }
    }
    


    그리고 그게 다야! shadowJar는 우리의 큰 publishing-0.1-all.jar를 생산합니다. zip/tar는 프로젝트에 필요한 모든 JAR 파일을 포함하는 전체 배포를 생성합니다.

    로컬로 Maven에 게시 "Trick"



    따라서 Maven Central, Nexus3 또는 Artifactory에 게시할 준비가 되지 않았습니다. 아니 거시기. 다음 "트릭"을 사용하여 로컬 컴퓨터에 게시할 수 있습니다. 이는 배포를 검사하려는 경우 로컬~/.m2 디렉토리를 삭제할 수 있는 경우에 유용합니다.

    $ rm -rf ~/.m2
    


    그런 다음 프로젝트 저장소에서 다음 Gradle 명령을 실행합니다.

    $ ./gradlew publishMyDistPublicationToMavenLocal
    


    이제 "게시된"아티팩트를 검사할 수 있습니다.

    $ find ~/.m2
    /Users/johnny/.m2
    /Users/johnny/.m2/repository
    /Users/johnny/.m2/repository/to
    /Users/johnny/.m2/repository/to/dev
    /Users/johnny/.m2/repository/to/dev/publishing
    /Users/johnny/.m2/repository/to/dev/publishing/maven-metadata-local.xml
    /Users/johnny/.m2/repository/to/dev/publishing/0.1
    /Users/johnny/.m2/repository/to/dev/publishing/0.1/publishing-0.1-all.jar
    /Users/johnny/.m2/repository/to/dev/publishing/0.1/publishing-0.1.pom
    /Users/johnny/.m2/repository/to/dev/publishing/0.1/publishing-0.1.tar
    /Users/johnny/.m2/repository/to/dev/publishing/0.1/publishing-0.1.zip
    
    


    테이크아웃


  • Micronaut는 놀랍고 나는 그것을 좋아합니다. 그것은 여전히 ​​​​새롭고 문서화하기 어렵습니다. 시작하고 실행하는 것은 빠르지만 퍼블리싱은 언뜻 보기에 명확하지 않습니다.
  • 선택하지 않아도 CLI 명령에는 Netty 웹 서버가 포함됩니다. 나는 WAR/Tomcat 배경에서 나온 꽤 매끄러운 것 같아요! Netty는 서블릿을 완전히 피합니다.
  • Gradle은 훌륭합니다. UNIX 전문가로서 내 마음은 항상 Make에 갈 것입니다.

  • 시간을 절약하는 데 도움이 되기를 바랍니다. 이것을 알아내는 데 약간의 시간이 걸렸습니다.