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 를 갖고 있다.

  1. 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.
  2. 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에 포함된 plinkpscp 등의 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 을 사용하자

참고 자료