mvnd
- Maven 데몬 mvnd
설치하는 방법mvnd
특정 옵션mvnd
빌드mvnd
빌드mvnd
설치 이 프로젝트의 목표는 Gradle 및 Takari에서 알려진 기술을 사용하여 더 빠른 Maven 빌드를 제공하는 것입니다.
아키텍처 개요:
mvnd
Maven이 포함되어 있습니다(따라서 Maven을 별도로 설치할 필요가 없습니다).
실제 빌드는 데몬이라고도 불리는 오래 지속되는 백그라운드 프로세스 내에서 발생합니다.
하나의 데몬 인스턴스는 mvnd
클라이언트의 여러 연속 요청을 처리할 수 있습니다.
mvnd
클라이언트는 GraalVM을 사용하여 빌드된 기본 실행 파일입니다. 기존 JVM을 시작하는 것보다 더 빠르게 시작하고 더 적은 메모리를 사용합니다.
빌드 요청을 처리할 유휴 데몬이 없는 경우 여러 데몬이 병렬로 생성될 수 있습니다.
이 아키텍처는 다음과 같은 이점을 제공합니다.
실제 빌드를 실행하기 위한 JVM은 각 빌드마다 새로 시작할 필요가 없습니다.
Maven 플러그인 클래스를 보유하는 클래스로더는 여러 빌드에 걸쳐 캐시됩니다. 따라서 플러그인 jar는 한 번만 읽고 구문 분석됩니다. Maven 플러그인의 SNAPSHOT 버전은 캐시되지 않습니다.
JVM 내부의 JIT(Just-In-Time) 컴파일러에 의해 생성된 네이티브 코드도 유지됩니다. 기본 Maven에 비해 JIT 컴파일에 소요되는 시간이 더 적습니다. 반복되는 빌드 중에 JIT 최적화 코드를 즉시 사용할 수 있습니다. 이는 Maven 플러그인 및 Maven Core에서 제공되는 코드뿐만 아니라 JDK 자체에서 제공되는 모든 코드에도 적용됩니다.
mvnd
Maven에 다음 기능을 추가합니다.
기본적으로 mvnd
여러 CPU 코어를 사용하여 모듈을 병렬로 구축합니다. 활용된 코어 수는 Math.max(Runtime.getRuntime().availableProcessors() - 1, 1)
공식으로 제공됩니다. 소스 트리가 병렬 빌드를 지원하지 않는 경우 -T1
명령줄에 전달하여 빌드를 직렬로 만듭니다.
향상된 콘솔 출력: 기본 Maven에서 병렬 빌드의 출력을 따르기가 어렵다고 생각합니다. 따라서 우리는 각 빌드 스레드의 상태를 별도의 줄에 표시하는 단순화된 비롤링 보기를 구현했습니다. 24개 코어가 있는 머신에서는 다음과 같습니다.
빌드가 완료되면 전체 Maven 출력이 콘솔로 전달됩니다.
mvnd
설치하는 방법SDKMAN이라면! 운영 체제를 지원하므로 다음과 같이 쉽습니다.
sdk install mvnd
과거에 수동 설치를 사용한 경우 ~/.m2/mvnd.properties
의 설정이 여전히 적합한지 확인하세요. SDKMAN!을 사용하면 ~/.m2/mvnd.properties
파일은 일반적으로 전혀 필요하지 않습니다. JAVA_HOME
과 MVND_HOME
이 모두 SDKMAN!에 의해 관리되기 때문입니다.
brew install mvndaemon/homebrew-mvnd/mvnd
참고: 최신 버전을 설치하는 mvnd
와 1.x 라인을 설치하는 mvnd@1
이라는 두 가지 공식이 있습니다.
sudo port install mvnd
우리는 Chocolatey, Scoop 또는 asdf를 지원하기 위한 기여를 찾고 있습니다. 우리를 돕고 싶다면…
선택적으로 다음과 같이 완료를 설정할 수 있습니다.
# ensure that MVND_HOME points to your mvnd distribution, note that sdkman does it for you
$ echo ' source $MVND_HOME/bin/mvnd-bash-completion.bash ' >> ~ /.bashrc
bash
현재 지원되는 유일한 셸입니다.
https://downloads.apache.org/maven/mvnd/에서 귀하의 플랫폼에 적합한 최신 ZIP을 다운로드하세요.
원하는 디렉토리에 압축을 푼다
PATH
에 bin
디렉터리 추가
선택적으로 JAVA_HOME
환경 변수 설정에 신경쓰지 않으려면 ~/.m2/mvnd.properties
생성하고 java.home
속성을 설정할 수 있습니다.
mvnd
작동하는지 테스트합니다.
$ mvnd --version
Maven Daemon 0.0.11-linux-amd64 (native)
Terminal: org.jline.terminal.impl.PosixSysTerminal with pty org.jline.terminal.impl.jansi.osx.OsXNativePty
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /home/ppalaga/orgs/mvnd/mvnd/daemon/target/maven-distro
Java version: 11.0.1, vendor: AdoptOpenJDK, runtime: /home/data/jvm/adopt-openjdk/jdk-11.0.1+13
Default locale: en_IE, platform encoding: UTF-8
OS name: " linux " , version: " 5.6.13-200.fc31.x86_64 " , arch: " amd64 " , family: " unix "
Windows를 사용 중이고 VCRUNTIME140.dll was not found
메시지가 표시되는 경우 https://support.microsoft.com/en-us/help/2977003/the-latest-supported에서 vc_redist.x64.exe
설치해야 합니다. -시각적-c-다운로드. 자세한 내용은 oracle/graal#1762를 참조하세요.
macOS를 사용하는 경우 아카이브 압축을 푼 후 모든 파일에서 격리 플래그를 제거해야 합니다.
$ xattr -r -d com.apple.quarantine mvnd-xyz-darwin-amd64
mvnd
는 stock mvn
과 같은 명령줄 옵션(몇 가지 추가 기능 포함 - 아래 참조)을 허용하도록 설계되었습니다. 예:
mvnd verify
mvnd
특정 옵션 --status
실행 중인 데몬을 나열합니다.
--stop
실행 중인 모든 데몬을 종료합니다.
mvnd --help
전체 옵션 목록을 인쇄합니다.
구성은 속성 파일을 통해 제공될 수 있습니다. Mvnd는 다음 위치에서 속성 파일을 읽습니다.
MVND_PROPERTIES_PATH
환경 변수 또는 mvnd.propertiesPath
시스템 변수를 사용하여 제공된 속성 경로
[PROJECT_HOME]/.mvn/mvnd.properties
에 있는 로컬 속성 경로
사용자 속성 경로: [USER_HOME]/.m2/mvnd.properties
다음 위치에 있는 시스템 속성 경로: [MVND_HOME]/conf/mvnd.properties
첫 번째 파일에 정의된 속성은 낮은 순위의 파일에 지정된 속성보다 우선합니다.
몇 가지 특수 속성은 위의 메커니즘을 따르지 않습니다.
mvnd.daemonStorage
: 이 속성은 mvnd가 파일(레지스트리 및 데몬 로그)을 저장하는 위치를 정의합니다. 이 속성은 명령줄에서 시스템 속성으로만 정의할 수 있습니다.
mvnd.id
: 이 속성은 생성되는 데몬을 식별하기 위해 내부적으로 사용됩니다.
mvnd.extClasspath
: Maven 확장 클래스 경로를 지정하는 내부 옵션
mvnd.coreExtensions
: 등록할 Maven 확장 목록을 지정하는 내부 옵션
사용 가능한 속성의 전체 목록은 /dist/src/main/distro/conf/mvnd.properties를 참조하세요.
mvnd
빌드 git
메이븐
GitHub에서 GraalVM CE 다운로드 및 압축 풀기
JAVA_HOME
이전 단계에서 GraalVM의 압축을 푼 위치로 설정합니다. java -version
출력이 예상대로인지 확인합니다.
$ $JAVA_HOME /bin/java -version
openjdk version " 11.0.9 " 2020-10-20
OpenJDK Runtime Environment GraalVM CE 20.3.0 (build 11.0.9+10-jvmci-20.3-b06)
OpenJDK 64-Bit Server VM GraalVM CE 20.3.0 (build 11.0.9+10-jvmci-20.3-b06, mixed mode, sharing)
native-image
도구를 설치합니다.
$ $JAVA_HOME /bin/gu install native-image
native-image
플랫폼에 따라 추가 소프트웨어를 설치해야 할 수도 있습니다. native-image
설명서를 참조하세요.
mvnd
빌드 $ git clone https://github.com/apache/maven-mvnd.git
$ cd maven-mvnd
$ mvn clean verify -Pnative
...
$ cd client
$ file target/mvnd
target/mvnd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=93a554f3807550a13c986d2af9a311ef299bdc5a, for GNU/Linux 3.2.0, with debug_info, not stripped
$ ls -lh target/mvnd
-rwxrwxr-x. 1 ppalaga ppalaga 25M Jun 2 13:23 target/mvnd
Windows를 운영 체제로 사용하는 경우 maven-mvnd
빌드하려면 다음과 같은 필수 구성 요소가 필요합니다. 즉, "C++를 사용한 데스크톱 개발" 워크로드와 개별 구성 요소 "Windows Universal CRT SDK"가 포함된 Visual Studio 버전입니다.
mvnd
설치 $ cp -R dist/target/mvnd-[version] [target-dir]
그런 다음 PATH
에 [target-dir]/bin
추가하고 mvnd
실행할 수 있습니다.
mvnd
개선하게 되어 기쁘게 생각합니다. 피드백을 환영합니다!