maven deploy plugin
Intro
메이븐 디플로이 플러그인은 deploy phase 에서 동작하는 플러그인으로 remote repository 에 artifact 를 올리는 기능을 수행한다.
제대로 동작하기 위해서는 다음 정보가 필요하다/
- repository 에 대한 정보(location, URL, 전송 방법(FTP, SCP, SFTP...) 그리고 인증이 필요한 경우 계정 정보
- artifact(s)에 대한 정보 - group, artifact, version, packaging, classifier...
- a deployer: a method to actually perform the deployment. This can be implemented as a wagon transport (making it cross-platform), or use a system specific method.
Goals
두 개의 goals 를 갖고 있다.
- deploy:deploy is used to automatically install the artifact, its pom and the attached artifacts produced by a particular project. Most if not all of the information related to the deployment is stored in the project's pom.
- deploy:deploy-file is used to install a single artifact along with its pom. In that case the artifact information can be taken from an optionally specified pomFile, but can be completed/overriden using the command line.
Usage
deploy:deploy
deploy:deploy Mojo 를 활성화하려면 <distributionManagement> 가 POM 파일에 포함되고 <repository/> 정보에 remote 정보가 있어야 한다. release 와 snapshot repository 를 분리해서 사용한다면 <snapshotRepository/> 를 별도로 기술할수 있다. 마지막으로 project website 를 deploy 하려면 <site/> 항목을 기술해야 한다.
POM 파일에 repository 접근 계정을 기록하면 보안문제가 있을 수 있으므로 repository 정보만 기술하고 해당 id 의 계정 정보는 settings.xml 에 기술할 수 있다.
[...] <distributionManagement> <repository> <id>internal.repo</id> <name>MyCo Internal Repository</name> <url>Host to Company Repository</url> </repository> <snapshotRepository> <uniqueVersion>true</uniqueVersion> <id>snapshot.repo</id> <name>Project Snapshots</name> <url>Host to Snapshot Repository</url> </snapshotRepository> </distributionManagement> [...]
[...] <server> <!-- id 가 pom.xml 에 기술된 것과 일치해야 한다. --> <id>internal.repo</id> <username>maven</username> <password>foobar</password> </server> [...]
plain text password를 넣기 부담스럽다면 maven repository 계정 정보 암호화하기 를 참고해서 암호화된 password를 적용
설정이 완료되었으면 deploy 를 실행해서 정상 설정 여부를 확인한다.
mvn deploy -DrepositoryId=internal.repo
distributionManagement 와 다른 repository 에 deploy 하려면 다음과 같이 build 에 지정할 수 있다.
<build> ... <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-deploy-plugin</artifactId> <inherited>false</inherited> <configuration> <altDeploymentRepository> my-release-repository::default::https://nexus.example.com/content/repositories/releases/ </altDeploymentRepository> </configuration> </plugin> </plugins> </build>
다음과 같은 파라미터를 사용할 수 있다. (자세한 https://maven.apache.org/plugins/maven-deploy-plugin/deploy-mojo.html 참고)
- altReleaseDeploymentRepository
- altSnapshotDeploymentRepository
deploy:deploy-file
원격 저장소에 아티팩트를 디플로이한다.
mvn deploy:deploy-file -Durl=file://C:\m2-repo \ -DrepositoryId=some.id \ -Dfile=your-artifact-1.0.jar \ [-DpomFile=your-pom.xml] \ [-DgroupId=org.some.group] \ [-DartifactId=your-artifact] \ [-Dversion=1.0] \ [-Dpackaging=jar] \ [-Dclassifier=test] \ [-DgeneratePom=true] \ [-DgeneratePom.description="My Project Description"] \ [-DrepositoryLayout=legacy] \ [-DuniqueVersion=false]
Examples
maven deploy 시 소스와 javadoc 도 같이 디플로이 하기
링크 참조
Deployment of artifacts with FTP
먼저 FTP 서버를 <distributionManagement/> 에 기술하고 <extension> 을 <build> element 에 기술한다.
<project> ... <distributionManagement> <repository> <id>ftp-repository</id> <url>ftp://repository.mycompany.com/repository</url> </repository> </distributionManagement> <build> <extensions> <!-- Enabling the use of FTP --> <extension> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-ftp</artifactId> <version>1.0-beta-6</version> </extension> </extensions> </build> ... </project>
server 의 계정 정보는 settings.xml 에 기술한다.
<settings> ... <servers> <server> <id>ftp-repository</id> <username>user</username> <password>pass</password> </server> </servers> ... </settings>
Deployment of artifacts in an external SSH command
<project> ... <distributionManagement> <repository> <id>ssh-repository</id> <url>scpexe://repository.mycompany.com/repository</url> </repository> </distributionManagement> <build> <extensions> <!-- Enabling the use of FTP --> <extension> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-ssh-external</artifactId> <version>1.0-beta-6</version> </extension> </extensions> </build> .. </project>
Unix 환경이나 Windows 위에 Cygwin 을 설치하고 deploy 할 경우에는 ssh 관련 유틸이 있으므로 아래이 설정이 필요없지만 Windows일 경우 Putty에 포함된 plink와 pscp 등의 ssh 구현물을 설치하고 settings.xml에 다음 설정을 해줘야 한다.
<settings> ... <servers> <server> <id>ssh-repository</id> <username>your username in the remote system if different from local</username> <privateKey>/path/to/your/private/key</privateKey> <!-- not needed if using pageant --> <configuration> <sshExecutable>plink</sshExecutable> <scpExecutable>pscp</scpExecutable> <sshArgs>other arguments you may need</sshArgs> </configuration> </server> </servers> ... </settings>
Deploy an artifact with a customized pom
3rd party artifact 용 pom 파일이 있다면 pomFile 파라미터를 주고 deploy 할 수 있다.
mvn deply:deploy-file -Durl=file:///${user.home}/.m2 \ -DrepositoryId=some.id \ -Dfile=path-to-your-artifact-jar \ -DpomFile=path-to-your-pom.xml
See Also
- maven install plugin - local repository 에 artifact 를 추가할 경우에는 mvn install 을 사용하자