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 에 기술할 수 있다.
pom.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>
[...]
settings.xml
[...]
<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 에 기술한다.
pom.xml
<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.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
pom.xml
<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.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 을 사용하자