Child pages
  • 메이븐 중앙 저장소에 아티팩트 업로딩 - maven - uploading artifact to central repository

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

 


개요

java 기반의 오픈 소스 프로젝트를 하고 있다면 library jar 파일을 메이븐의 중앙 저장소에 올려서 다른 이들과 손쉽게 공유할 수 있습니다.

...

먼저 오픈 소스 프로젝트를 개설하고 pom.xml 을 만들고 여기에 groupID와 artifact id, version 과 부가 항목(name, description, url, license 은 옵션 항목이지만 중앙 저장소에 올리려면 필수)을 지정해 줍니다.

Expand
Code Block
languagexml
titlepom.xml
project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.lesstif</groupId>
	<artifactId>jira-rest-api</artifactId>
	<version>0.7.0</version>
	
	<name>JIRA REST Client</name>
    <description>A Java client library for integrating with the JIRA issue and bug tracking software.</description>
    <url>https://github.com/lesstif/jira-rest-client</url>
	
	<licenses>
        <license>
            <name>pache-2.0</name>
            <url>https://opensource.org/licenses/Apache-2.0</url>
            <distribution>repo</distribution>
        </license>
    </licenses>
	
	<properties>
		<!-- Generic properties -->
		<java.version>1.6</java.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<!-- Logging -->
		<logback.version>1.0.13</logback.version>
		<slf4j.version>1.7.5</slf4j.version>
		<!-- Test -->
		<junit.version>4.11</junit.version>
	</properties>
</project> 


저는 lesstif.com 이라는 도메인을 소유하고 있으므로 다음과 같이 com.lesstif 를 groupID 로 지정했으며 도메인이 없을 경우 다음과 같이 사용하는 오픈소스 포탈(예: com.github.lesstif) 로 설정해도 됩니다.

Code Block
<groupId>com.github.lesstif</groupId>
	<artifactId>jira-rest-api</artifactId>

 


이제 소스를 구현하고 push 한 후에 deploy 할 준비가 되었다면 https://issues.sonatype.org/secure/Signup!default.jspa 에 연결하여 JIRA 계정을 생성합니다.

계정이 생성되면 이메일로 알림이 오고 JIRA 이슈를 등록 할 권한을 갖게 됩니다.

 


이제 https://issues.sonatype.org/projects/OSSRH 에 연결하여 CREATE 를 눌러서 지라 이슈를 하나 등록합니다.

...

distributionManagement  설정

이제 pom.xml distributionManagement 항목에 다음과 같이 OSSRH 저장소 정보를 설정해 줍니다.

Expand
Code Block
languagexml
	<distributionManagement>
		<snapshotRepository>
			<id>ossrh</id>
			<url>https://oss.sonatype.org/content/repositories/snapshots</url>
		</snapshotRepository>
		<repository>
			<id>ossrh</id>
			<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
		</repository>
	</distributionManagement> 


그리고 $HOME/.m2/settings.xml 의 servers 항목에 위에서 만든 계정과 암호를 설정해 줍니다.

Expand
Code Block
languagexml
title$HOME/.m2/settings.xml
<servers>  
	<server>
			<id>ossrh</id>
			<username>myuserName</username>
			<password>myPassword</password>
			<configuration>
			</configuration>
		</server>
	</servers>


이제 snapshot 을 deploy 해서 테스트 해보기 위해 version 항목에 -SNAPSHOT 을 붙이고 다음 명령어를 실행해 봅니다.

...

정상적으로 deploy 가 되었다면 https://oss.sonatype.org/content/repositories/snapshots/com/lesstif/ 에 연결하여 확인해 볼 수 있습니다.

 


GPG 키 생성

메이븐 중앙 저장소에 올라오는 library 는 위변조를 방지하기 위해 GPG 키로 전자 서명하게 되어 있습니다.

...

생성이 완료되었으면 Export Certificate 를 클릭해서 공개키를 *.asc 파일로 저장한 후에 이 파일을 http://pgp.mit.edu/ 에 업로드합니다.

Warning

GPG 키는 중요하므로 꼭 백업해 두세요.


deploy

javadoc 과 source jar

중앙 저장소에는 source jar와 javadoc와 필요하므로 pom.xml 에 다음과 같이 에 maven-source-plugin, maven-javadoc-plugin 을 추가합니다. 

물론 javadoc 이 제대로 생성되려면 사전에 소스에 주석을 달아놓아야 합니다.

Expand
Code Block
languagexml
titlepom.xml
<plugin>
    <artifactId>maven-source-plugin</artifactId>
    <version>2.3</version>
    <executions>
        <execution>
        <id>attach-sources</id>
        <phase>verify</phase>
        <goals>
            <goal>jar</goal>
        </goals>
        </execution>
    </executions>
</plugin>
<plugin>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>2.9.1</version>
    <executions>
        <execution>
        <id>attach-javadocs</id>
        <phase>verify</phase>
        <goals>
            <goal>jar</goal>
        </goals>
        </execution>
    </executions>
</plugin>

 


gpg-sign 

deploy 시 GPG 로 jar 파일 위변조를 확인하는 것 같으므로 확인하므로 deploy 시 gpg 서명이 필요하므로 서명을 추가하기 위해 gpg-plugin 설정을 합니다.

Expand
Code Block
languagexml
titlepom.xml
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-gpg-plugin</artifactId>
    <version>1.5</version>
    <executions>
        <execution>
            <id>sign-artifacts</id>
            <phase>verify</phase>
            <goals>
                <goal>sign</goal>
            </goals>
        </execution>
    </executions>
</plugin>


settings.xml 에는 위에서 생성한 gpg 개인키의 passphrase 를 설정해 줍니다.

Expand
Code Block
languagexml
titlesettings.xml
<profiles>
    <profile>
        <id>myprofile</id>
         <properties>
            <gpg.passphrase>myPassword</gpg.passphrase>
        </properties>
    </profile>
</profiles>
<activeProfiles>
    <activeProfile>myprofile</activeProfile>
</activeProfiles>

 


deploy

이제 deploy 명령을 실행하면 모든 요구 조건이 맞을 경우 중앙 저장소에 올라 갑니다.

...

Code Block
mvn clean deploy

 

 



참고 자료