[컴] OpenJDK 를 제공하는 여러 업체들

 

openjdk for windows / openjdk 다운로드 / download where / 어디서 다운 / jdk download / windows jdk /

OpenJDK 를 제공하는 여러 업체들

docker openjdk image:

Reference

  1. How To Install OpenJDK Java 11 On Windows Real Quick

[컴] offline 에서 kotlin gradle을 이용한 build를 하기

오프라인 빌드 / 코틀린 빌드 오프라인 /

offline 에서 kotlin gradle을 이용한 build를 하기

현재의 결론은 ref. 1 의 방법을 사용하는 것이 가장 나은듯 하다. 이것 이전에 몇가지를 시도했지만 다 실패했다.

그래서 여기서는 ref.1 에 있는 내용처럼 maven 의 repository 를 이욯해서 build 를 할 것이다.

이전에 시도한 방법들:

  1. gradle cache 를 복사해서 사용 : java - How do I use gradle without internet access? - Stack Overflow
  2. gradle 을 이용해서 compile time 에 쓰이는 jar 을 모두 local 에 두고, implementaion 의 경로를 전부 local 로 했다. 그리고 repository 도 flatDir 로 변경했다. 이때는 실패했다.
    • kotlin build deamon (?) 때문에 error 가 난다.
    • 이 상황에서 repository 가 mavenCentral() 일때는 성공한다.

절차

  1. local maven repository(.m2) 만들기
  2. offline 에서 gradle wrapper 사용하도록 설정
  3. gradle build 시 local repository 를 사용하도록 설정
  4. 빌드 : gradlew clean build

local maven repository(.m2) 만들기

gradle 의 내용을 일단 pom.xml 로 만들고, 이 pom.xml 을 이용해서 mvn install 을 하자. 그러면 <home>/.m2 에 mavne repository 가 생성된다. 일부는 maven-central 에서 download 가 안되는 경우도 있어서 repository 를 변경해서 mvn install 을 한 번 더 시도해야 할 수 있다.

offline 에서 gradle wrapper 사용하도록 설정

gradlew 를 실행하면, 기본적으로 <proj>\gradle\wrapper\gradle-wrapper.properties 에 있는 distributionUrl 경로에서 gradle 을 가져와서 사용하게 된다. 그래서 이 부분을 offline 에서는 local 의 gradle 을 이용하도록 변경해 줘야 한다. 다음 링크에서 자세한 설명을 확인할 수 있다.

gradle build 시 local repository 를 사용하도록 설정

이제 gradle.build 에서 gradlew build 시에 local repository 를 사용하도록 설정해줘야 한다. 그래서 처음에 plugins DSL 로 정의된 부분을 legacy plugin application 로 변경했다. 그 부분은 다음 링크를 참고하면 된다.

그래서 아래처럼 repositories<proj>/locallib/.m2/repository 로 설정했다. 참고로 full path 를 적어줘야 한다. 상대경로도 잘 동작한다.

그리고 처음에 --offline 을 이용하려고 if (gradle.startParameter.isOffline()){} 를 이용했는데, 그 경우 gradle 이 cache 를 이용하기 때문에 local repository 를 이용하지 않았다. 다만 if (gradle.startParameter.isOffline())buildscript.repositories 내부에서 사용해 보지는 않았다.


buildscript {
  repositories {
    maven {
      url 'c:/myproj/locallib/.m2/repository/'
    }
  }
  dependencies {
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.0"
  }
}


plugins {
    id 'application' 
    id 'maven-publish'
}

apply plugin: "org.jetbrains.kotlin.jvm"

...

repositories {
    maven {
        url 'c:/myproj/locallib/.m2/repository/'
    }
    // mavenCentral() 
}

...

publishing {
    publications {
        customLibrary(MavenPublication) {
            from components.java
        }
    }

    repositories {
        maven {
            name = 'sampleRepo'
            url = layout.buildDirectory.dir("repo")
        }
    }
}

빌드 : gradlew clean build

그리고 gradlew clean build 로 빌드를 했다.

C:\myproj>gradlew clean build

> Task :compileKotlin
w: C:\myproj\src\main\kotlin\io\myproj\Req.kt: (54, 37): Parameter 'req' is never used, could be renamed to _
...
Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

See https://docs.gradle.org/7.4.2/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 1m 23s
8 actionable tasks: 8 executed
C:\myproj>

References

  1. How do I do offline Kotlin development? : Kotlin

[컴] offline 에서 gradle 사용하기 (gradle wrapper)

gradle 을 이용 / 오프라인 빌드 /

offline 에서 gradle 사용하기(gradle wrapper)

대체로 gradle 을 사용해서 만들어지는 project 들은 gradle 을 실행하면, gradle 을 특정 repository 에서 받아서 실행하게 된다.

이 부분을 offline 의 특정 file 을 지정해줘서 그 file 을 이용해서 gradle wrapper 를 설치할 수 있게 할 수 있다.

gradle distributions

다양한 gradle version 은 다음 경로에서 받을 수 있다.

gradle wrapper 의 distributionUrl 변경

<proj>/gradle/wrapper/gradle-wrapper.properties/ 값을 수정

  • gradle-7.4.2-bin.zip 를 download 받고, <proj>/gradle/wrapper/에 copy 해 놓는다.
  • <proj>/gradle/wrapper/gradle-wrapper.properties/의 값 수정 : distributionUrl=gradle-7.4.2-bin.zip

Reference

  1. Gradle Offline Build

[컴] maven repository .m2 옮기기

 메이븐 / 오프라인 빌드 하는 법 /

maven repository .m2 옮기기

이 .m2 를 옮기는 작업은 offline 에서 build 를 하기 위함이다.

절차

간략하게 절차를 설명하면

  1. maven 으로 project 를 설치(install)를 한다.(maven install)
  2. 그리고 ~/.m2/repository 를 복사해서 offline 컴퓨터에 옮긴다. 참고로, 여기서는 docker 에서 작업을 한다.
  3. build 를 해보고 빠진 부분이 있으면 pom.xml 에 추가하고 다시 maven install 를 한다.
    • 이것은 code를 가져와서 mvn compile 을 하면 이런 행위를 안해도 될 수 있을 것 같긴 하다. 하지만 여기서는 mvn compile 을 하지 않았다.
    • 또는 docker의 volume 과 .m2 에 대한 link 만들어서 좀 더 간단하게 작업을 할 수 있다.
dnf install maven

mkdir ~/testdir && cd ~/testdir

# /data/pom.xml 에 올려놓은 pom.xml 이 있다.
cp /data/pom.xml ./
/usr/share/maven/bin/mvn install

cd ~ 
tar -cvzf m2archive.tgz .m2/

build.gradle 로 pom.xml 만들기

kotlin to groovy

이거 혹시나 build.gradle 에서 kotlin 을 DSL 로 사용하는 경우를 위해서 적어놓은 것이다.

implementation(kotlin("stdlib-jdk8"))
--> 
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.0"

implementation("io.projectreactor.netty" , "reactor-netty" , "1.+")
--> 
implementation "io.projectreactor.netty:reactor-netty:1.+"

val taskNames = gradle.startParameter.taskNames
--> 
def taskNames = gradle.startParameter.taskNames

plugins {
    kotlin("jvm") version "1.6.0"
    application
}
-->
plugins {
    id 'org.jetbrains.kotlin.jvm' version '1.6.0'
    id 'application'
}

val mynewtask by tasks.registering { ... }
-->
task createDocs { ... }

maven repository (.m2) 생성

dnf install maven

mkdir ~/testdir && cd ~/testdir
cp /data/pom.xml ./
/usr/share/maven/bin/mvn install

.m2 를 묶기

이제 .m2 folder 를 묶어서 옮기자. 그리고 $USER_HOME/ 에서 압축을 풀면 된다. 그러면, $USER_HOME/.m2/가 생성된다.

cd ~ 
tar -cvzf m2archive.tgz .m2/

압축 풀때는 아래처럼 하면 된다.

cd ~
tar -xvzf m2archive.tgz

사용법

maven repository 경로는 아래처럼 변경할 수 있다. 대체로 maven central 에서 download 가 가능하지만, 내 경우는 gradle 관련 dependency 의 jar 이 없는 경우가 있어서, 이 경우는 gradle 의 repository https://plugins.gradle.org/m2/ 를 이용해야만 했다.

// build.gradle
...

repositories {
    
    maven {
        url '/locallib/.m2/repository'  // $proj/locallib/.m2/repository
    }
    
}
<!-- pom.xml -->
<project>
  ...
  <repositories>
    <repository>
      <id>example-repo</id>
      <name>Example Repository</name>
      <url>file://path/to/your/local/repository</url>
    </repository>
  </repositories>
</project>

See Also

  1. Migrating build logic from Groovy to Kotlin : gradle 에서 kotlin 과 groovy 의 syntax 차이
  2. Gradle | Kotlin

Reference

  1. How do I do offline Kotlin development? : Kotlin

[컴] build.gradle 를 maven POM 으로 변경

maven 으로 변경 / pom 만드는 법

build.gradle 를 maven POM 으로 변경

maven-publish plugin 을 적용하면, publish task 가 추가된다.

apply plugin: 'maven-publish'
publishing {
    publications {
        customLibrary(MavenPublication) {
            from components.java
        }
    }

    repositories {
        maven {
            name = 'sampleRepo'
            url = layout.buildDirectory.dir("repo") // $projDir/build/repo
        }
    }
}
gradle publish

다음 경로에서 pom.xml 을 얻을 수 있다.

  • <proj>/build/publications/customLibrary/pom-default.xml
<proj>/build/repo/ : 이 folder에 우리가 repository 에 publish 하는 내용이 들어가게 된다.

Reference

  1. Converting Gradle Build File to Maven POM | Baeldung

[컴] docker에서 gradle build 와 결과파일 실행

 

도커로 gradle 빌드 / 도커에서 빌드

docker에서 gradle build 와 결과파일 실행

ref. 2 에 나와있다. 동작 내용은 다음과 같다.

1번째 image 에서 gradle build 를 하고, 2번째 이미지로 1번째 image 에서 만든 jar 을 copy 하고, 2번째 image 에서 그 jar 을 실행한다.

FROM gradle:7.4.2-jdk11-alpine AS build
COPY --chown=gradle:gradle . /home/gradle/src
WORKDIR /home/gradle/src
RUN gradle build --no-daemon 

FROM openjdk:8-jre-slim

EXPOSE 8080

RUN mkdir /app

COPY --from=build /home/gradle/src/build/libs/*.jar /app/spring-boot-application.jar

ENTRYPOINT ["java", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-Djava.security.egd=file:/dev/./urandom","-jar","/app/spring-boot-application.jar"]

See Also

  1. 쿠…sal: [컴] 테스트용 docker network

Refrence

  1. java - Gradle and Docker: How to run a Gradle build within Docker container? - Stack Overflow
  2. Java Example with Gradle and Docker · Codefresh | Docs
  3. 7.4.2-jdk11-alpine,

[컴] git 에서 새로운 remote 만드는 법

git remote 옮기기 / origin 옮기기 / git remote 새로 생성 / 어떻게 옮기기

git 에서 새로운 remote 만드는 법

git clone tmp-dir
git checkout <branch-name>
git pull
git fetch --tags

git remote rm origin
git remote add origin https://github.com/namhpro/polaris.git
git push origin --all
git push --tags

참고로, github 에서 import repository 를 통해서 가져올 수 있다.

See Also

  1. 쿠…sal: [컴] git 에서 size 가 100mb 가 넘는 commit 삭제 방법

Reference

  1. How to move a git repository with history | Atlassian Git Tutorial
  2. version control - How to remove/delete a large file from commit history in the Git repository? - Stack Overflow