Google AdSense (text)

hidden logo stop

Moving

거지 같은 이글루스 광고노출 정책이 싫어서,
새 보금자리(http://blog.leocat.kr/)로 이사감.

[Maven] 원격 repository로 deploy하기 (deploy:deploy) Computer & Program

Maven의 여러 Phase를 실행해 봤다. 그런데.. 궁금증이 생겼다.

내가 만든 프로젝트를 배포해서 다른 프로젝트에서 공유해 사용하려면 Nexus와 같은 Maven repository에 업로드를 해야 하지 않겠는가?? 그래야 dependency를 걸면 알아서 다운받아 사용이 가능하겠지?? 어떻게 deploy하냐고요~~ 일단 다짜고짜 deploy Phase 실행~~

mvn deploy

m2eclipse를 쓰고 있다면 Eclipse 메뉴에서 Run -> Run Configurations...를 선택하면 아래와 같은 창이 열린다. 왼쪽의 "Maven Build"를 더블클릭하면 하나가 추가되며, 우측에서 "Browse Workspace..."를 클릭해서 프로젝트를 선택한다. 그리고 "Goals"에 "deploy" Phase를 추가한다. "Run"을 클릭하면 해당 프로젝트의 deploy Phase를 실행할 것이다. Phase 대신 Goal 이름을 추가한다면 해당 Goal을 실행한다.

헌데.. 일단 실행은 했는데 제대로 되는 것 같지는 않다. 아래처럼 오류를 내뱉네.. 무슨 소린지 정확히는 모르겠으나.. 대충 읽어보니 컴파일 후 패키징(jar:jar), local repository에 배포(install:install)까지는 성공한 것 같다. 그리고 문제는.. maven-deploy-plugin 플러그인의 deploy를 진행하는 도중 뭔가 설정(<configuration>)이 되지 않아 실패한 것 같은데.. 어디에 무슨 설정을 해야 하는지 도통 모르겠다. @ㅅ@ Maven을 언제 써봤어야지.. ArtifactRepository 어쩌구 써있는걸 보니 느낌상으로는 원격 repository 설정이 제대로 되지 않은 것 같은데..

...

[INFO] [jar:jar]
[INFO] Building jar: D:\workspace\maven-autodeploy-plugin\target\maven-autodeploy-plugin-0.0.1-SNAPSHOT.jar
[INFO] [plugin:addPluginArtifactMetadata]
[INFO] [install:install]
[INFO] Installing D:\workspace\maven-autodeploy-plugin\target\maven-autodeploy-plugin-0.0.1-SNAPSHOT.jar to C:\Users\Sigel\.m2\repository\kr\tuxedocat\maven-autodeploy-plugin\0.0.1-SNAPSHOT\maven-autodeploy-plugin-0.0.1-SNAPSHOT.jar
[INFO] [plugin:updateRegistry]
[ERROR]

Maven encountered an error while configuring one of the mojos for your build.

Mojo:
Group-Id: org.apache.maven.plugins
Artifact-Id: maven-deploy-plugin
Version: 2.3
Mojo: deploy
brought in via: packaging: maven-plugin

While building project:
Group-Id: kr.tuxedocat
Artifact-Id: maven-autodeploy-plugin
Version: 0.0.1-SNAPSHOT
From file: D:\workspace\maven-autodeploy-plugin\pom.xml


Here is the configuration it attempted to apply to the mojo:<configuration>
  <altDeploymentRepository>${altDeploymentRepository}</altDeploymentRepository>

  <artifact>${project.artifact}</artifact>

  <attachedArtifacts>${project.attachedArtifacts}</attachedArtifacts>

  <deploymentRepository>${project.distributionManagementArtifactRepository}</deploymentRepository>

  <localRepository>${localRepository}</localRepository>

  <packaging>${project.packaging}</packaging>

  <pomFile>${project.file}</pomFile>

  <updateReleaseInfo>${updateReleaseInfo}</updateReleaseInfo>
</configuration>


Error message:org.codehaus.plexus.component.configurator.ComponentConfigurationException: Class 'org.apache.maven.artifact.repository.ArtifactRepository' cannot be instantiated



[INFO] ------------------------------------------------------------------------
[INFO] For more information, run with the -e flag
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILED
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 10 seconds
[INFO] Finished at: Fri Dec 25 20:30:38 KST 2009
[INFO] Final Memory: 7M/19M
[INFO] ------------------------------------------------------------------------



마구마구!! 한참 몇 시간을 찾으니 Maven Getting Started Guide에서 원격 repository에 내가 만든 jar 파일 deploy하는 방법을 찾을 수 있었다. 역시 이럴 때는 메뉴얼이 최고다. pom.xml 파일과 settings.xml 파일을 수정하면 된다.

일단 pom.xml 파일에 원격 repository 설정(<distributionManagement>)을 추가해준다. 아래 설정은 Nexus의 URL 설정이다. Artifactory와 같은 다른 repository를 사용한다면 해당 repository의 배포 경로를 URL에 맞춰 사용하면 된다.

<project>
  <groupId>kr.tuxedocat</groupId>
  <artifactId>maven-autodeploy-plugin</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  ...
  <distributionManagement>
    <repository>
      <id>tuxedoCat-release</id>
      <name>tuxedoCat-release</name>
      <url>http://[NEXUS_IP]/nexus/content/repositories/releases/</url>
    </repository>
    <snapshotRepository>
      <id>tuxedoCat-snapshots</id>
      <name>tuxedoCat-snapshots</name>
      <url>http://[NEXUS_IP]/nexus/content/repositories/snapshots/</url>
    </snapshotRepository>
  </distributionManagement>
  ...
</project>

"repository"는 release 버전의 deploy에 사용되고, "snapshotRepository"는 snapshot 버전의 deploy에 사용된다. release와 snapshot의 구분은 pom.xml 파일의 project 설정 시 "version"에 "SNAPSHOT"이 있는지 여부에 따라 결정된다. Maven은 버전의 접미사로 SNAPSHOT을 사용하면 개발 중인 버전으로 인식한다. 위와 같이 0.0.1-SNAPSHOT 버전이라면 "snapshotRepository" 설정을 사용할 것이다.


그리고 settings.xml 파일에 repository의 접속 인증 정보를 설정한다. settings.xml 파일은 각 계정 경로에 존재한다. Windows XP는 C:\Documents and Settings\[사용자 ID]\.m2\에 존재할 것이고 Windows Vista의 경우는 C:\Users\[사용자 ID]\.m2\에 존재할 것이다. 한글 Windows Vista의 경우는 "C:\Users" 경로가 "사용자"로 보이도록 설정되어 있으니 폴더가 없다고 속지 말자.. 아마 Windows 7도 비슷하지 않을까?? -ㅅ-a 만일 settings.xml 파일이 존재하지 않으면 생성해서 사용하면 된다.

<?xml version="1.0" encoding="UTF-8"?>

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">


  <servers>
    <server>
      <id>tuxedoCat-release</id>
      <username>[deploy 사용자 ID]</username>
      <password>[deploy 사용자 비밀번호]</password>
    </server>
    <server>
      <id>tuxedoCat-snapshots</id>
      <username>[deploy 사용자 ID]</username>
      <password>[deploy 사용자 비밀번호]</password>
    </server>
  </servers>
</settings>

pom.xml에서 사용한 repository의 ID와 settings.xml 파일에서 사용한 server의 ID는 동일하게 사용해야 한다. 그래야 repository에 접속할 때 해당 사용자 ID와 비밀번호를 가지고 로그인을 한다. 잘못 설정하면 다음과 같은 400 오류나 401 오류를 내뱉으며 deploy가 되지 않는다.

...

[INFO] [deploy:deploy]
altDeploymentRepository = null
[INFO] Retrieving previous build number from tuxedoCat-snapshot
url = http://[NEXUS_IP]/nexus/content/repositories/snapshots/
Uploading: http://[NEXUS_IP]/nexus/content/repositories/snapshots//kr/tuxedocat/maven-autodeploy-plugin/0.0.1-SNAPSHOT/maven-autodeploy-plugin-0.0.1-20091225.160233-7.jar
3K uploaded
[ERROR]

The following mojo encountered an error while executing:
Group-Id: org.apache.maven.plugins
Artifact-Id: maven-deploy-plugin
Version: 2.3
Mojo: deploy
brought in via: packaging: maven-plugin

While building project:
Group-Id: kr.tuxedocat
Artifact-Id: maven-autodeploy-plugin
Version: 0.0.1-SNAPSHOT
From file: D:\workspace\maven-autodeploy-plugin\pom.xml
Reason: Error deploying artifact: Failed to transfer file: http://[NEXUS_IP]/nexus/content/repositories/snapshots//kr/tuxedocat/maven-autodeploy-plugin/0.0.1-SNAPSHOT/maven-autodeploy-plugin-0.0.1-20091225.160233-7.jar. Return code is: 401



[INFO] ------------------------------------------------------------------------
[INFO] For more information, run with the -e flag
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILED
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11 seconds
[INFO] Finished at: Sat Dec 26 01:02:33 KST 2009
[INFO] Final Memory: 8M/22M
[INFO] ------------------------------------------------------------------------


+ Maven 용어 완전 헷갈린다. 이름 외우는 기억력 완전 제로인 나로써는 이런 용어 완전 쥐약이다. TㅅT
+ 음.. 글쓰다 다 날려먹으니 완전 의욕 제로 TㅅT
+ 아.. 지금 책을 보니 간단하게 쓰여있구나.. 난 대체 하루종일 뭘한거야 -ㅅ-;;; 더 의욕 제로 TㅅT

덧글

댓글 입력 영역

Google AdSense (text/image)