Maven Wrapper는 어디에 쓰는 물건인지..
소스코드를 빌드하려고 할 때 보통은 개발자의 노트북이나 PC에 Maven이 설치되어 있어야 합니다. Maven Wrapper는 Maven을 설치하지 않아도 자동으로 Maven을 다운로드하고 빌드를 할 수 있도록 해주는 기능으로써 각 프로젝트에 Maven Wrapper를 추가해두면 Java만 설치되어 있는 Linux 시스템에서도 별도로 Maven을 설치하지 않고 손쉽게 빌드할 수 있습니다. 단, Maven Wrapper는 다음의 경우 쓰기가 어려울 수 있습니다.
- Maven Wrapper는 Maven을 다운로드하도록 되어 있으므로 인터넷이 안되는 환경에서는 사용이 어렵습니다.
- Maven Wrapper를 실행시키는 환경에서는 반드시 JDK 또는 JRE가 설치되어 있어야 합니다.
Maven Wrapper란?
Maven Wrapper는 Maven을 별도로 설치하지 않더라도 Maven Wrapper가 Maven을 자동으로 다운로드하여 빌드할 수 있도록 지원합니다.
. ├── .mvn │ └── wrapper │ ├── maven-wrapper.jar │ └── maven-wrapper.properties ├── README.md ├── build.gradle ├── gradle │ └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── mvnw ├── mvnw.cmd ├── pom.xml ├── settings.gradle └── src └── main └── java └── com └── example └── authenticatingldap ├── AuthenticatingLdapApplication.java └── HomeController.java
Maven Wrapper의 설정 파일은 .mvn/wrapper/maven-wrapper.properties
파일이며 이 파일은 다음과 같이 구성되어 있습니다.
distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
이제 mvnw
커맨드를 실행하여 Maven을 실행할 수 있습니다.
# ./mvnw -Dmaven.test.skip=true clean package 20:24:10 git:(master) ✗ Downloading https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip ................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................ Unzipping /Users/fharenheit/.m2/wrapper/dists/apache-maven-3.6.3-bin/lm9vem38rfmjij3jj0mk5bvnt/apache-maven-3.6.3-bin.zip to /Users/fharenheit/.m2/wrapper/dists/apache-maven-3.6.3-bin/lm9vem38rfmjij3jj0mk5bvnt Set executable permissions for: /Users/fharenheit/.m2/wrapper/dists/apache-maven-3.6.3-bin/lm9vem38rfmjij3jj0mk5bvnt/apache-maven-3.6.3/bin/mvn [INFO] Scanning for projects... [INFO] [INFO] ------------------< com.example:authenticating-ldap >------------------- [INFO] Building authenticating-ldap 0.0.1-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ authenticating-ldap --- [INFO] Deleting /Users/fharenheit/Downloads/gs-authenticating-ldap/complete/target [INFO] [INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ authenticating-ldap --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 1 resource [INFO] Copying 1 resource [INFO] [INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ authenticating-ldap --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 3 source files to /Users/fharenheit/Downloads/gs-authenticating-ldap/complete/target/classes [INFO] [INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ authenticating-ldap --- [INFO] Not copying test resources [INFO] [INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ authenticating-ldap --- [INFO] Not compiling test sources [INFO] [INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ authenticating-ldap --- [INFO] Tests are skipped. [INFO] [INFO] --- maven-jar-plugin:3.1.2:jar (default-jar) @ authenticating-ldap --- [INFO] Building jar: /Users/fharenheit/Downloads/gs-authenticating-ldap/complete/target/authenticating-ldap-0.0.1-SNAPSHOT.jar [INFO] [INFO] --- spring-boot-maven-plugin:2.2.6.RELEASE:repackage (repackage) @ authenticating-ldap --- [INFO] Replacing main artifact with repackaged archive [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.669 s [INFO] Finished at: 2020-04-19T20:25:26+09:00 [INFO] ------------------------------------------------------------------------
Maven Wrapper 프로젝트는 첨부파일을 참고하십시오. Maven Wrapper의 경우 distributionUrl
의 다운로드 경로가 외부에 있는 경우 인터넷 네트워크에 접속이 되어야 합니다. 만약에 내부에서 사용하고자 하는 경우 내부 웹 서버 등을 통해 업로드후 사용하도록 합니다.
Maven Wrapper 다운로드
현재 디렉토리에 Maven Wrapper를 추가하려면 다음의 커맨드를 실행해야 합니다. 단, 이 커맨드도 마찬가지로 인터넷 연결이 되어 있어야 합니다.
# mvn -N io.takari:maven:wrapper
생성된 결과물은 다음과 같이 확인할 수 있습니다.
# tree -a . ├── .mvn │ └── wrapper │ ├── MavenWrapperDownloader.java │ ├── maven-wrapper.jar │ └── maven-wrapper.properties ├── mvnw └── mvnw.cmd 2 directories, 5 files
만약에 사용할 Maven의 버전을 명시하고자 하는 경우는 다음과 같이 지정할 수 있습니다.
# mvn -N io.takari:maven:wrapper -Dmaven=3.3.3
Maven Wrapper를 실행하면 사용자의 홈 디렉토리에 다음의 위치에 다운로드를 하고 사용합니다.
# cd ~/.m2/wrapper/dists # tree . └── apache-maven-3.6.3-bin └── lm9vem38rfmjij3jj0mk5bvnt ├── apache-maven-3.6.3 │ ├── LICENSE │ ├── NOTICE │ ├── README.txt │ ├── bin │ │ ├── m2.conf │ │ ├── mvn │ │ ├── mvn.cmd │ │ ├── mvnDebug │ │ ├── mvnDebug.cmd │ │ └── mvnyjp │ ├── boot │ │ ├── plexus-classworlds-2.6.0.jar │ │ └── plexus-classworlds.license │ ├── conf │ │ ├── logging │ │ │ └── simplelogger.properties │ │ ├── settings.xml │ │ └── toolchains.xml │ └── lib │ ├── cdi-api-1.0.jar │ ├── cdi-api.license │ ├── commons-cli-1.4.jar │ ├── commons-cli.license │ ├── commons-io-2.5.jar │ ├── commons-io.license │ ├── commons-lang3-3.8.1.jar │ ├── commons-lang3.license │ ├── ext │ │ └── README.txt │ ├── guava-25.1-android.jar │ ├── guava.license │ ├── guice-4.2.1-no_aop.jar │ ├── guice.license │ ├── jansi-1.17.1.jar │ ├── jansi-native │ │ ├── README.txt │ │ ├── freebsd32 │ │ │ └── libjansi.so │ │ ├── freebsd64 │ │ │ └── libjansi.so │ │ ├── linux32 │ │ │ └── libjansi.so │ │ ├── linux64 │ │ │ └── libjansi.so │ │ ├── osx │ │ │ └── libjansi.jnilib │ │ ├── windows32 │ │ │ └── jansi.dll │ │ └── windows64 │ │ └── jansi.dll │ ├── jansi.license │ ├── javax.inject-1.jar │ ├── javax.inject.license │ ├── jcl-over-slf4j-1.7.29.jar │ ├── jcl-over-slf4j.license │ ├── jsoup-1.12.1.jar │ ├── jsoup.license │ ├── jsr250-api-1.0.jar │ ├── jsr250-api.license │ ├── maven-artifact-3.6.3.jar │ ├── maven-builder-support-3.6.3.jar │ ├── maven-compat-3.6.3.jar │ ├── maven-core-3.6.3.jar │ ├── maven-embedder-3.6.3.jar │ ├── maven-model-3.6.3.jar │ ├── maven-model-builder-3.6.3.jar │ ├── maven-plugin-api-3.6.3.jar │ ├── maven-repository-metadata-3.6.3.jar │ ├── maven-resolver-api-1.4.1.jar │ ├── maven-resolver-connector-basic-1.4.1.jar │ ├── maven-resolver-impl-1.4.1.jar │ ├── maven-resolver-provider-3.6.3.jar │ ├── maven-resolver-spi-1.4.1.jar │ ├── maven-resolver-transport-wagon-1.4.1.jar │ ├── maven-resolver-util-1.4.1.jar │ ├── maven-settings-3.6.3.jar │ ├── maven-settings-builder-3.6.3.jar │ ├── maven-shared-utils-3.2.1.jar │ ├── maven-slf4j-provider-3.6.3.jar │ ├── org.eclipse.sisu.inject-0.3.4.jar │ ├── org.eclipse.sisu.inject.license │ ├── org.eclipse.sisu.plexus-0.3.4.jar │ ├── org.eclipse.sisu.plexus.license │ ├── plexus-cipher-1.7.jar │ ├── plexus-cipher.license │ ├── plexus-component-annotations-2.1.0.jar │ ├── plexus-component-annotations.license │ ├── plexus-interpolation-1.25.jar │ ├── plexus-interpolation.license │ ├── plexus-sec-dispatcher-1.4.jar │ ├── plexus-sec-dispatcher.license │ ├── plexus-utils-3.2.1.jar │ ├── plexus-utils.license │ ├── slf4j-api-1.7.29.jar │ ├── slf4j-api.license │ ├── wagon-file-3.3.4.jar │ ├── wagon-http-3.3.4-shaded.jar │ └── wagon-provider-api-3.3.4.jar └── apache-maven-3.6.3-bin.zip 17 directories, 85 files