[컴] 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

댓글 없음:

댓글 쓰기