[컴] codeium

 

코파일럿 무료로 / free / 어떻게 무료 /무료버전 /  codium / aws whispher / aws whisperer vs / 비교 / github copilot

codeium

copilot 기능을 무료로 제공, plugin 을 설치하고, login 을 하면 된다.(당연히 계정가입은 해야한다.)

그들이 왜 무료로 제공하는지에 대한 글, 간략하게 읽어보면, 개인에게는 무료로 하고, enterprise 쪽에서 돈을 벌려한다는 이야기인듯. 무료로 사용한 개인이 enterprise 에 사용하게 해달라고 광고를 하는 것도 어느정도 계산에 포함됐다고 하는 듯. 영향력을 확대하고, 가장 저렴하게 공급하는 쪽을 택한다고 하는 듯.

그리고 개인이 작성한 code를 training 에 사용하지 않는다고도 이야기하고 있음

self-host solution

그들이 그들의 blog 에서도 이야기하지만, 코드가 자꾸 외부로 나가는 것은 보안의 위험이 커지는 것을 이야기한다. 그런것을 걱정해서 On premise 로(self-host solution) 내부에 copilot 툴을 설치해서 사용할 수 있게 해주려는 듯 하다.

참고로 이전에 ’번역기’를 돌리면서 유출된 내용이 문제가 되기도 했다. 그러니 개인이 사용할 때 주의할 필요는 있다.

번역 앱을 사용하는 가장 안전한 방법은 민감한 데이터를 멀리하는 것이다

See Also

  1. AI Code Generator - Amazon CodeWhisperer - AWS : aws 에서도 copilot 같은 툴을 내놨다. 잠깐 vscode extension 을 설치했는데, vue file 에서 js 에 대한 code suggestion 을 해주지 못하고 있다. language 를 js 로 바꿔야만 제안해 준다. codeium 은 잘 된다.
  2. Tabnine Chat 베타 공개 | GeekNews

[컴] 새로운 git GUI client

git gui / git clients / git tools

새로운 git GUI client

개인적으로 visual studio code (gitlens + console) 의 git gui 를 좋아한다. 그래서 비슷한 느낌의 GUI 를 찾고 있지만, 조금씩 아쉽다. 일단 몇몇 것들을 짧게 사용해보고 간략하게 정리해 본다.

  • Fork - a fast and friendly git client for Mac and Windows
    • 유료다. 다만 평가판도 제한이 없이 쓸 수 있다.
      • https://alternativeto.net/software/fork/about/#post-79980
    • command 창을 띄울 수 있다.
    • command pallet(quick launch) 를 가지고 있다.
    • custom command 를 추가할 수 있다.
    • 화면도 유려하고, 필요한 기능들을 잘 갖췄다.
  • GitKraken Legendary Git Tools | GitKraken
    • 회원가입을 하고, 로그인을 해야 사용할 수 있다.
    • 무료버전은 일부 기능의 제한이 있다.
  • Sublime Merge | Git client from the makers of Sublime Text
    • 유료다, 다만 평가판도 기능의 제약은 없다. 다만 다크모드가 안된다.
    • 가장 내가 좋아하는 UI를 가지고 있다. command pallete을 사용해서 빠르게 명령어를 실행할 수 있다. 이것이 git command를 입력하는 것보다 나은 유일한 방법인 듯 싶다.
    • side-by-side diff view 는 설정에 가서 기본 view를 설정할 수 있다.
  • gittypup
    • 메모리 사용량도 50MB 수준
    • diff tool을 변경할 수 있다.
    • console 을 포함하고 있지는 않다.
    • stage 를 지원
  • GitFiend - Git client for Windows, Mac and Linux
    • Electron 으로 만들어진 것으로 보인다. multi process 이다.
    • 대략 100MB 수준의 메모리를 사용
    • stage 를 지원하지 못한다.
    • side-by-side diff view 는 제공안된다.
  • git-cola/git-cola: git-cola: The highly caffeinated Git GUI
    • DAG graph view 와 main view 가 따로 있다. 각각 약 40~50MB를 소모한다.
    • panel 의 위치를 원하는대로 바꿀 수 있다.
    • side-by-side diff view 는 아직 제공 안된다.
    • stage 는 지원
  • Gitg - GNOME Wiki!
    • 요즘 update 가 되지 않는 듯 하다.
    • 대략 60MB 수준의 메모리 사용, 사용하면 계속 상승
    • stage 를 지원
    • side-by-side diff view 제공

[컴][머신러닝] 외부data 를 openapi 가 익히도록 해서 답변하도록 하기

 

ai / 머신러닝 / LLM / 언어모델 / 오픈api / 챗gpt /chatgpt / gpt code / code ai  / analyze code / source code github

외부data 를 openapi 가 익히도록 해서 답변하도록 하기

설치

pip install llama-index

git clone https://github.com/jerryjliu/gpt_index.git
cd gpt_index/examples/paul_graham_essay

paul_graham_essay 폴더에 가면 data 가 있다. 이 data 를 보면, paul_graham_essay.txt 가 있다. 간략하게 설명하면, 이 .txt를 OPENApi 에게 던져주고, 그것을 기반으로 대답을 하도록 하게 해주는 것이다.

이렇게 얻은 index 는 저장할 수 있다. index.save_to_disk()

다음처럼 .py 를 만들자.

from llama_index import GPTSimpleVectorIndex, SimpleDirectoryReader

documents = SimpleDirectoryReader('data').load_data()
index = GPTSimpleVectorIndex(documents)
# load from disk
# index = GPTSimpleVectorIndex.load_from_disk('my-index.json')

response = index.query("What did the author do growing up?")
print(response)

# save to disk
index.save_to_disk('my-index.json')

그리고 OPENAI_API_KEY 를 환경변수로 설정해주자. 그리고 code를 실행하면 된다.

SET OPENAI_API_KEY=sk-myopenapikey
python run.py

요즘의 chatGPT 를 이용한 tool들

실제로 하는 일은 chatgpt 에 대한 prompt 를 만들어주는 것이 이것이 하는 일이다. 요즘 이런식의 툴들이 많이 보인다.

위 code 에는 다음과 같은 prompt 를 이용한다.

const makeQAPrompt = (projectName: string, repositoryUrl: string, contentType: string, chatPrompt: string, targetAudience: string) =>
  PromptTemplate.fromTemplate(
    `You are an AI assistant for a software project called ${projectName}. You are trained on all the ${contentType} that makes up this project.
  The ${contentType} for the project is located at ${repositoryUrl}.
You are given the following extracted parts of a technical summary of files in a ${contentType} and a question. 
Provide a conversational answer with hyperlinks back to GitHub.
You should only use hyperlinks that are explicitly listed in the context. Do NOT make up a hyperlink that is not listed.
Include lots of ${contentType} examples and links to the ${contentType} examples, where appropriate.
Assume the reader is a ${targetAudience} but is not deeply familiar with ${projectName}.
Assume the reader does not know anything about how the project is strucuted or which folders/files are provided in the context.
Do not reference the context in your answer. Instead use the context to inform your answer.
If you don't know the answer, just say "Hmm, I'm not sure." Don't try to make up an answer.
If the question is not about the ${projectName}, politely inform them that you are tuned to only answer questions about the ${projectName}.
Your answer should be at least 100 words and no more than 300 words.
Do not include information that is not directly relevant to the question, even if the context includes it.
Always include a list of reference links to GitHub from the context. Links should ONLY come from the context.
${
  chatPrompt.length > 0
    ? `Here are some additional instructions for answering questions about ${contentType}:\n${chatPrompt}`
    : ''
}
Question: {question}
Context:
{context}
Answer in Markdown:`,
  );

Reference

  1. Installation and Setup — LlamaIndex documentation : llama-index 설치
  2. Starter Tutorial — LlamaIndex documentation : test code 를 만들자

[컴] gradle 에서 여러 profile 을 사용하는 법

 

여러 profile 을 사용하는 방법 / mavne to gradle / convert / 변환 / 여러 property 사용 방법 / howto / 여러 profile 사용 / 어떻게 profile 마다 다른 properties 를 불러오기 /

gradle 에서 여러 profile 을 사용하는 법

기본적으로 gradlew build 를 하면, 모든 src\main\resources\*.properties file들이 \build\resources\main\' 에 복사되어지는데, 이때 각 file 마다 expand(https://docs.gradle.org/current/dsl/org.gradle.language.jvm.tasks.ProcessResources.html#org.gradle.language.jvm.tasks.ProcessResources:expand(java.util.Map) 작업을 해주게 된다.

processResources {

    filesMatching("**/*.properties" ) {
        println "expanding (marker replacement) " + it

        expand(activatedProperties: 'prod')
    }
}

expand

만약 application.properties 에 다음처럼 적어놓으면, ${activatedProperties ?: 'local'} 에 대한 처리를 해준다.

# src\main\resources\application.properties
spring.application.name=myapp
spring.profiles.active=${activatedProperties ?: 'local'}

즉, 최종적으로 build/resources/main/application.properties 파일은 아래처럼 생성된다.

# build/resources/main/application.properties
spring.application.name=myapp
spring.profiles.active=prod

여러 profile 사용

gradle 에서는 -P 옵션으로 여러 profile 을 사용할 수 있다.

gradlew -PbuildProfile=prod build

이것을 이용해서 여러 다른 값을 할당하게 할 수 있다.

다만 주의할점은 resource 가 copy 돼야만, processResources가 동작하기 때문에, 대체로 build 하기전에 clean 을 하고 build 를 해야만, processResources 의 내용이 동작할 것이다.

// build.gradle
...
if (!hasProperty('buildProfile')) ext.buildProfile = 'local' 
apply from: "profile-${buildProfile}.gradle"

processResources {
    filesMatching("**/*.properties" ) {
        println "expanding (marker replacement) " + it
        expand(activatedProperties2: project.buildId)
    }
}
// profile-local.gradle
ext.buildId = 'local'
// profile-prod.gradle
ext.buildId = 'prod'

maven pom.xml

이것을 maven 의 pom.xml 로 구현하면 다음과 같다.

<?xml version="1.0" encoding="UTF-8"?>
<project ...>
    ...
    <profiles>
        <profile>
            <id>local</id>
            <properties>
                <activatedProperties>local</activatedProperties>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <activatedProperties>prod</activatedProperties>
            </properties>
        </profile>
    </profiles>
# src\main\resources\application.properties
spring.application.name=myapp
spring.profiles.active=@activatedProperties@
/src/main/resources
  |
  + application-local.properties
  |
  \ application-prod.properties

See Also

  1. Resource Filtering with Gradle - DZone

[컴][머신러닝] 재밌는 ai 를 활용한 기능들

ai / 인공지능/ 아이디어 / machine learning

재밌는 ai 를 활용한 기능들

작성중…

[컴] jenkins pipeline 예시

젠킨스 파이프라인 사용법 / 예시 / 예제 / example /

jenkins pipeline 예시

  • git plugin / ssh-agent plugin 이 필요하다.
  • ssh -f 를 사용해야 한다. 그렇지 않으면 java application 을 실행하고, agent 가 return 을 하지 못하고 계속 떠있게 된다.
  • 아래 pipeline 은 대략적으로 다음과 같은 일을 한다.
    1. git checkout / ssh credential (참고로 이를 위해서, public/private key 를 만들어서 이 키를 git site 에 deploy key 를 추가하고, jenkins 에도 git credential 을 추가한다.)
    2. gradle clean assemble
    3. sshagent 를 이용해서 remote server 로 file 전송
    4. remote server 에서 kill / java 실행
// ref: https://www.jenkins.io/doc/book/pipeline/
pipeline {
    agent any
    environment {
        DEPLOY_HOST = 'my.host.co.kr'
        DEPLOY_HOST_DIR = '/home/myuser/apiserver'
    }
    stages {
        stage('Build') {
            steps {
                // Get some code from a GitHub repository
                // ref: https://www.jenkins.io/doc/pipeline/steps/git/
                checkout scmGit(
                    branches: [[name: '*/master']],
                    userRemoteConfigs: [[
                        credentialsId:  'my-git-id',
                        url: 'https://mygitrepo.com/myrepo_url']])


                // Run gradle on a Unix agent.
                sh "chmod +x ./gradlew"
                sh "cd \$WORKSPACE && ./gradlew -PbuildProfile=prod clean assemble"

            }
        }
        stage('Deploy') {
            steps {
                sh """#!/bin/bash
                echo ${env.DEPLOY_HOST}
                """
                // https://plugins.jenkins.io/ssh-agent/
                sshagent(credentials: ['my-credential']) {
                    //
                    // `pidMyApp` variable :
                    //   ps aux --sort=-pid | grep "[M]yApp" | grep -v zsh | sed -n '1p' | awk '{print $2}'
                    //

                    sh """#!/bin/bash
                    echo ${env.DEPLOY_HOST}

                    cd \$WORKSPACE/build/libs/

                    jarfilename=\$(ls -t *.jar | head -n 1)
                    filenameNoExt=\${jarfilename%.*}
                    newJarFilename=\$filenameNoExt-\$(date +%Y%m%d.%H%M%S).jar
                    echo \$newJarFilename

                    # --------
                    # send to the remote server
                    # --------
                    scp -oStrictHostKeyChecking=no \$jarfilename ${env.DEPLOY_HOST}:${env.DEPLOY_HOST_DIR}/\$newJarFilename

                    # --------
                    # run command in the remote-server
                    #
                    # -f option:
                    #     https://stackoverflow.com/questions/19996089/use-ssh-to-start-a-background-process-on-a-remote-server-and-exit-session/22364328#22364328
                    # '\$var' : varialbe of this script
                    # '\\\$var' : variable of the script for the remote-server
                    # --------
                    ssh -f -oStrictHostKeyChecking=no ${env.DEPLOY_HOST} \"
                        echo \"remote-server actions\"
                        pwd
                        pidMyApp=\\\$(ps aux --sort=-pid | grep \\\"[M]yApp\\\" | grep -v zsh | sed -n '1p' | awk '{print \\\$2}')

                        # --------
                        # restart
                        # --------
                        sudo kill \\\$pidMyApp
                        sudo nohup java -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true -jar ${env.DEPLOY_HOST_DIR}/\$newJarFilename --spring.profiles.active=prod &
                    \"

                    """
                    
                }
            }
            post {                
                success {
                    sh "echo SUCCESS"
                }
            }
        }
    }
}

jenkins directory

  • Backing-up/Restoring Jenkins

  • $JENKINS_HOME/workspace: build 나 build 에 필요한 파일등을 설치 하는 것들은 이곳에서 작업하게 된다.

  • $JENKINS_HOME/jobs

See Also

  1. Pipeline NPM Integration | Jenkins plugin : npm build 를 위한 plugin, 이 plugin 은 단순히 node 설정을 사용할 수 있게 해주는 역할인듯 하다. 실제적으로 jenkins 서버에 node는 따로 설치를 해야 하는 듯 하다.(불확실)
  2. 쿠...sal: [컴] github 는 어떻게 ssh:// 를 지원할까?

[컴] log4j 가 충돌하는 이슈, gradle 설정

spring boot / issue

log4j 가 충돌하는 이슈, gradle 설정

아래 build.gradle 에서, log4j-slf4j-impllogback-classic 에서 모두 slf4j 를 사용해서 문제가 발생

from: SLF4J Multiple bindings were found on the class path

class path에 2개 이상의 binding이 있는 경우 SLF4J는 해당 binding 들의 위치들을 보여주고, warning을 내보낸다.

수정

위 글의 이야기 처럼 exclude를 이용해서 해결함.

configurations.all {
    exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
plugins {
    id 'org.springframework.boot' version '2.4.5'
    id 'java'
    // ref: https://plugins.gradle.org/plugin/io.freefair.lombok
    id "io.freefair.lombok" version "8.0.1"
}
...
configurations.all {
    exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web:2.6.6'
    implementation 'org.springframework.boot:spring-boot-starter-validation:2.6.6'
    implementation 'org.springframework.boot:spring-boot-starter:2.6.6'

    implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2'
    ...

    implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.2'
    implementation 'org.apache.logging.log4j:log4j-core:2.17.2'
    implementation 'org.apache.logging.log4j:log4j-api:2.17.2'

    runtimeOnly 'mysql:mysql-connector-java:8.0.28'

    testImplementation 'org.springframework.boot:spring-boot-starter-test:2.6.6'

}

tasks.named('test', Test) {
    useJUnitPlatform()
}

binding error log

* Get more help at https://help.gradle.org

BUILD FAILED in 2s
5 actionable tasks: 3 executed, 2 up-to-date

D:\myproj>gradlew bootRun

> Task :bootRun FAILED
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/myuser/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.17.2/log4j-slf4j-impl-2.17.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/myuser/.m2/repository/ch/qos/logback/logback-classic/1.2.11/logback-classic-1.2.11.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Exception in thread "main" java.lang.ExceptionInInitializerError
        at com.me.MyRobotApplication.main(MyRobotApplication.java:10)  
Caused by: org.apache.logging.log4j.LoggingException: log4j-slf4j-impl cannot be present with log4j-to-slf4j
        at org.apache.logging.slf4j.Log4jLoggerFactory.validateContext(Log4jLoggerFactory.java:60)  
        at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:44)        
        at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:33)        
        at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:53)
        at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:33)        
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:363)
        at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155)    
        at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132)    
        at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:655)
        at org.springframework.boot.SpringApplication.<clinit>(SpringApplication.java:174)
        ... 1 more

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':bootRun'.
> Process 'command 'D:\a\appss\jdk-11.0.16.101-hotspot\bin\java.exe'' finished with non-zero exit value 1

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 1s
5 actionable tasks: 1 executed, 4 up-to-date

gradlew dependencies

D:\myproj>gradlew dependencies   

> Task :dependencies

------------------------------------------------------------
Root project 'MyRobot' - MyRobot
------------------------------------------------------------

annotationProcessor - Annotation processors and their dependencies for source set 'main'.
\--- org.projectlombok:lombok:1.18.26

bootArchives - Configuration for Spring Boot archive artifacts. (n)
No dependencies

compileClasspath - Compile classpath for source set 'main'.
+--- org.projectlombok:lombok -> 1.18.26
+--- org.springframework.boot:spring-boot-starter-web:2.6.6
|    +--- org.springframework.boot:spring-boot-starter:2.6.6
|    |    ...
|    |    +--- org.springframework.boot:spring-boot-starter-logging:2.6.6
|    |    |    +--- ch.qos.logback:logback-classic:1.2.11***
|    |    |    |    +--- ch.qos.logback:logback-core:1.2.11
|    |    |    |    \--- org.slf4j:slf4j-api:1.7.32 -> 1.7.36
|    |    |    +--- org.apache.logging.log4j:log4j-to-slf4j:2.17.2
|    |    |    |    +--- org.slf4j:slf4j-api:1.7.35 -> 1.7.36
|    |    |    |    \--- org.apache.logging.log4j:log4j-api:2.17.2
|    |    |    \--- org.slf4j:jul-to-slf4j:1.7.36
|    |    |         \--- org.slf4j:slf4j-api:1.7.36
|    |    ...
|    |    \--- org.yaml:snakeyaml:1.29
...
+--- org.apache.logging.log4j:log4j-slf4j-impl:2.17.2***
|    +--- org.slf4j:slf4j-api:1.7.25 -> 1.7.36
|    \--- org.apache.logging.log4j:log4j-api:2.17.2
+--- org.apache.logging.log4j:log4j-core:2.17.2
|    \--- org.apache.logging.log4j:log4j-api:2.17.2
+--- org.apache.logging.log4j:log4j-api:2.17.2
\--- org.projectlombok:lombok:1.18.26

compileOnly - Compile only dependencies for source set 'main'. (n)
\--- org.projectlombok:lombok (n)

default - Configuration for default artifacts. (n)
No dependencies

developmentOnly - Configuration for development-only dependencies such as Spring Boot's DevTools.   
No dependencies

implementation - Implementation only dependencies for source set 'main'. (n)
...
+--- org.apache.logging.log4j:log4j-slf4j-impl:2.17.2 (n)***
+--- org.apache.logging.log4j:log4j-core:2.17.2 (n)
\--- org.apache.logging.log4j:log4j-api:2.17.2 (n)

lombok
\--- org.projectlombok:lombok:1.18.26

mainSourceElements - List of source directories contained in the Main SourceSet. (n)
No dependencies

productionRuntimeClasspath
+--- org.springframework.boot:spring-boot-starter-web:2.6.6
|    +--- org.springframework.boot:spring-boot-starter:2.6.6
|    |    ...
|    |    +--- org.springframework.boot:spring-boot-starter-logging:2.6.6
|    |    |    +--- ch.qos.logback:logback-classic:1.2.11***
|    |    |    |    +--- ch.qos.logback:logback-core:1.2.11
|    |    |    |    \--- org.slf4j:slf4j-api:1.7.32 -> 1.7.36
|    |    |    +--- org.apache.logging.log4j:log4j-to-slf4j:2.17.2
|    |    |    |    +--- org.slf4j:slf4j-api:1.7.35 -> 1.7.36
|    |    |    |    \--- org.apache.logging.log4j:log4j-api:2.17.2
|    |    |    \--- org.slf4j:jul-to-slf4j:1.7.36
|    |    |         \--- org.slf4j:slf4j-api:1.7.36
|    |    ...
|    |    \--- org.yaml:snakeyaml:1.29
...
+--- org.apache.logging.log4j:log4j-slf4j-impl:2.17.2***
|    +--- org.slf4j:slf4j-api:1.7.25 -> 1.7.36
|    +--- org.apache.logging.log4j:log4j-api:2.17.2
|    \--- org.apache.logging.log4j:log4j-core:2.17.2
|         \--- org.apache.logging.log4j:log4j-api:2.17.2
+--- org.apache.logging.log4j:log4j-core:2.17.2 (*)
+--- org.apache.logging.log4j:log4j-api:2.17.2
\--- mysql:mysql-connector-java:8.0.28
     \--- com.google.protobuf:protobuf-java:3.11.4

runtimeClasspath - Runtime classpath of source set 'main'.
+--- org.springframework.boot:spring-boot-starter-web:2.6.6
|    +--- org.springframework.boot:spring-boot-starter:2.6.6
|    |    ...
|    |    +--- org.springframework.boot:spring-boot-starter-logging:2.6.6
|    |    |    +--- ch.qos.logback:logback-classic:1.2.11***
|    |    |    |    +--- ch.qos.logback:logback-core:1.2.11
|    |    |    |    \--- org.slf4j:slf4j-api:1.7.32 -> 1.7.36
|    |    |    +--- org.apache.logging.log4j:log4j-to-slf4j:2.17.2
|    |    |    |    +--- org.slf4j:slf4j-api:1.7.35 -> 1.7.36
|    |    |    |    \--- org.apache.logging.log4j:log4j-api:2.17.2
|    |    |    \--- org.slf4j:jul-to-slf4j:1.7.36
|    |    |         \--- org.slf4j:slf4j-api:1.7.36
|    |    ...
|    |    \--- org.yaml:snakeyaml:1.29
...
+--- org.apache.logging.log4j:log4j-slf4j-impl:2.17.2***
|    +--- org.slf4j:slf4j-api:1.7.25 -> 1.7.36
|    +--- org.apache.logging.log4j:log4j-api:2.17.2
|    \--- org.apache.logging.log4j:log4j-core:2.17.2
|         \--- org.apache.logging.log4j:log4j-api:2.17.2
+--- org.apache.logging.log4j:log4j-core:2.17.2 (*)
+--- org.apache.logging.log4j:log4j-api:2.17.2
\--- mysql:mysql-connector-java:8.0.28
     \--- com.google.protobuf:protobuf-java:3.11.4

runtimeElements - Elements of runtime for main. (n)
No dependencies

runtimeOnly - Runtime only dependencies for source set 'main'. (n)
\--- mysql:mysql-connector-java:8.0.28 (n)

testAnnotationProcessor - Annotation processors and their dependencies for source set 'test'.       
\--- org.projectlombok:lombok:1.18.26

testCompileClasspath - Compile classpath for source set 'test'.
+--- org.springframework.boot:spring-boot-starter-web:2.6.6
|    +--- org.springframework.boot:spring-boot-starter:2.6.6
|    |    ...
|    |    +--- org.springframework.boot:spring-boot-starter-logging:2.6.6
|    |    |    +--- ch.qos.logback:logback-classic:1.2.11***
|    |    |    |    +--- ch.qos.logback:logback-core:1.2.11
|    |    |    |    \--- org.slf4j:slf4j-api:1.7.32 -> 1.7.36
|    |    |    +--- org.apache.logging.log4j:log4j-to-slf4j:2.17.2
|    |    |    |    +--- org.slf4j:slf4j-api:1.7.35 -> 1.7.36
|    |    |    |    \--- org.apache.logging.log4j:log4j-api:2.17.2
|    |    |    \--- org.slf4j:jul-to-slf4j:1.7.36
|    |    |         \--- org.slf4j:slf4j-api:1.7.36
|    |    ...
|    |    \--- org.yaml:snakeyaml:1.29
...
+--- org.apache.logging.log4j:log4j-slf4j-impl:2.17.2***
|    +--- org.slf4j:slf4j-api:1.7.25 -> 1.7.36
|    \--- org.apache.logging.log4j:log4j-api:2.17.2
...

testCompileOnly - Compile only dependencies for source set 'test'. (n)
No dependencies

testImplementation - Implementation only dependencies for source set 'test'. (n)
\--- org.springframework.boot:spring-boot-starter-test:2.6.6 (n)

testResultsElementsForTest - Directory containing binary results of running tests for the test Test 
Suite's test target. (n)
No dependencies

testRuntimeClasspath - Runtime classpath of source set 'test'.
+--- org.springframework.boot:spring-boot-starter-web:2.6.6
|    +--- org.springframework.boot:spring-boot-starter:2.6.6
|    |    ...
|    |    +--- org.springframework.boot:spring-boot-starter-logging:2.6.6
|    |    |    +--- ch.qos.logback:logback-classic:1.2.11***
|    |    |    |    +--- ch.qos.logback:logback-core:1.2.11
|    |    |    |    \--- org.slf4j:slf4j-api:1.7.32 -> 1.7.36
|    |    |    +--- org.apache.logging.log4j:log4j-to-slf4j:2.17.2
|    |    |    |    +--- org.slf4j:slf4j-api:1.7.35 -> 1.7.36
|    |    |    |    \--- org.apache.logging.log4j:log4j-api:2.17.2
|    |    |    \--- org.slf4j:jul-to-slf4j:1.7.36
|    |    |         \--- org.slf4j:slf4j-api:1.7.36
|    |    ...
|    |    \--- org.yaml:snakeyaml:1.29
...
+--- org.apache.logging.log4j:log4j-slf4j-impl:2.17.2***
|    +--- org.slf4j:slf4j-api:1.7.25 -> 1.7.36
|    +--- org.apache.logging.log4j:log4j-api:2.17.2
|    \--- org.apache.logging.log4j:log4j-core:2.17.2
|         \--- org.apache.logging.log4j:log4j-api:2.17.2
...

testRuntimeOnly - Runtime only dependencies for source set 'test'. (n)
No dependencies

(*) - Indicates repeated occurrences of a transitive dependency subtree. Gradle expands transitive dependency subtrees only once per project; repeat occurrences only display the root of the subtree, followed by this annotation.

(n) - A dependency or dependency configuration that cannot be resolved.

A web-based, searchable dependency report is available by adding the --scan option.

BUILD SUCCESSFUL in 1s
1 actionable task: 1 executed