오프라인 빌드 / 코틀린 빌드 오프라인 /
offline 에서 kotlin gradle을 이용한 build를 하기
현재의 결론은 ref. 1 의 방법을 사용하는 것이 가장 나은듯 하다. 이것 이전에 몇가지를 시도했지만 다 실패했다.
그래서 여기서는 ref.1 에 있는 내용처럼 maven 의 repository 를 이욯해서 build 를 할 것이다.
이전에 시도한 방법들:
- gradle cache 를 복사해서 사용 : java - How do I use gradle without internet access? - Stack Overflow
- gradle 을 이용해서 compile time 에 쓰이는 jar 을 모두 local 에 두고, implementaion 의 경로를 전부 local 로 했다. 그리고 repository 도 flatDir 로 변경했다. 이때는 실패했다.
- kotlin build deamon (?) 때문에 error 가 난다.
- 이 상황에서 repository 가 mavenCentral() 일때는 성공한다.
절차
- local maven repository(.m2) 만들기
- offline 에서 gradle wrapper 사용하도록 설정
- gradle build 시 local repository 를 사용하도록 설정
- 빌드 :
gradlew clean build
local maven repository(.m2) 만들기
gradle 의 내용을 일단 pom.xml
로 만들고, 이 pom.xml 을 이용해서 mvn install
을 하자. 그러면 <home>/.m2
에 mavne repository 가 생성된다. 일부는 maven-central 에서 download 가 안되는 경우도 있어서 repository 를 변경해서 mvn install
을 한 번 더 시도해야 할 수 있다.
- gradle 을 pom.xml 로 변환 : build.gradle 를 maven POM 으로 변경
- 이 pom.xml 을 이용해서 .m2 를 만들고, 이것을 가져오기 : maven repository .m2 옮기기
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>
댓글 없음:
댓글 쓰기