Sonatype OSS Maven仓库使用手册2011-06-24
概述
Sonatype使用 Nexus 为开源项目提供 Maven仓库主机 服务,您可以通过她来发布项目的snapshot和release版本。
这篇文章将逐步引导您使用 Maven仓库主机 服务。
注册用户
首先您需要在 https://issues.sonatype.org/ 上,注册一个Sonatype JIRA帐号。
- 点击Sign Up链接注册
- 填写注册页面中的表单内容


记住您的用户名,创建JIRA凭证将会用到您的用户名。
创建JIRA凭证
- 在浏览器中打开 https://issues.sonatype.org/browse/OSSRH 页面。
- 通过下图的页面创建IRA凭证:


必要的准备工作
最好在linux系统下安装以下软件:
- JDK 1.5+是否已安装;
- 确保已安装版本控制(CVS、SVN、GIT…)系统客户端;
- 使用Maven 2.2.1+;
- 安装GPG(Ubuntu 已安装),生成 GPG签名 .
我在windows下生成GPG签名后,发布public key时失败,所以建议您中linux下使用;如果您找到在windows下的使用方法,请您给我留言,或发邮件,谢谢!
pom 配置
- 以下pom元素在您项目的pom中必须要出现的:
<modelVersion>
<groupId>
<artifactId>
<version>
<packaging>
<name>
<description>
<url>
<licenses>
<scm><url>
<scm><connection>
<developers>
首先您需要配置您maven的settings.xml:
<settings>
...
<servers>
<server>
<id>sonatype-nexus-snapshots</id>
<username>your-jira-id(注册帐号时的username)</username>
<password>your-jira-pwd(注册帐号时的password)</password>
</server>
<server>
<id>sonatype-nexus-staging</id>
<username>your-jira-id</username>
<password>your-jira-pwd</password>
</server>
</servers>
...
</settings>
如果您的项目packaging是jar,那么您必须要添加几个插件:
<build> ... <plugins> ... <plugin> <!-- 添加 artifactId-version-source.jar --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>2.1.2</version> <executions> <execution> <id>attach-sources</id> <goals> <goal>jar-no-fork</goal> </goals> </execution> </executions> </plugin> <plugin> <!-- 添加 artifactId-version-javadoc.jar --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>2.7</version> <executions> <execution> <id>attach-javadocs</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> ... </plugins> ... </build>
下面是我项目的一个完整pom配置:
<?xml version="1.0" encoding="UTF-8"?>
<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>net.mlw</groupId>
<artifactId>vlh</artifactId>
<version>0.1.14-SNAPSHOT</version>
<packaging>jar</packaging>
<name>valuelist</name>
<description>Java Web Pages</description>
<url>http://github.com/fqntxmqee/valuelist</url>
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
</license>
</licenses>
<scm>
<url>ssh://git@github.com/fqntxmqee/valuelist</url>
<connection>scm:git:ssh://git@github.com/fqntxmqee/valuelist</connection>
<developerConnection>scm:git:ssh://git@github.com/fqntxmqee/valuelist</developerConnection>
</scm>
<developers>
<developer>
<id>fqntxmqee</id>
<name>Guoqing Huang</name>
<email>guoqing.huang@foxmail.com</email>
</developer>
</developers>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<tomcat.version>6.0.16</tomcat.version>
<plugin.findbugs.version>2.0.1</plugin.findbugs.version>
<plugin.checkstyle.version>2.3</plugin.checkstyle.version>
<plugin.javadoc.version>2.7</plugin.javadoc.version>
<plugin.cobertura.version>2.4</plugin.cobertura.version>
</properties>
<dependencies>
...
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.2.6.ga</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.5.6</version>
</dependency>
...
</dependencies>
<build>
<pluginManagement>
<plugins>
<!-- findbugs插件 -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>${plugin.findbugs.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>${plugin.checkstyle.version}</version>
</plugin>
<!-- 测试插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.7.2</version>
<executions>
<execution>
<id>run-integration-test</id>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<includes>
<include>**/*IT.java</include>
</includes>
</configuration>
</execution>
</executions>
<configuration>
<!-- 跳过测试 <skipTests>true</skipTests> -->
</configuration>
</plugin>
<!-- 覆盖率测试插件 -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>${plugin.cobertura.version}</version>
<configuration>
<excludes>
<exclude>**/*Test.class</exclude>
</excludes>
</configuration>
<executions>
<execution>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.2</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.7</version>
<configuration>
<show>private</show>
<nohelp>true</nohelp>
</configuration>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- 资源插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4.2</version>
</plugin>
<!-- 编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-scm-plugin</artifactId>
<version>1.4</version>
<configuration>
<connectionType>developerConnection</connectionType>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.1</version>
<configuration>
<mavenExecutorId>forked-path</mavenExecutorId>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<!-- distribut -->
<distributionManagement>
<snapshotRepository>
<id>sonatype-nexus-snapshots</id>
<name>Sonatype Nexus Snapshots</name>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>sonatype-nexus-staging</id>
<name>Nexus Release Repository</name>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2</url>
</repository>
</distributionManagement>
</project>
如果您项目的版本控制不是Git,请更新pom中scm元素的配置。
SVN:
<project>
...
<scm>
<connection>scm:svn:http://foo.googlecode.com/svn/trunk/</connection>
<developerConnection>scm:svn:https://foo.googlecode.com/svn/trunk/</developerConnection>
<url>http://foo.googlecode.com/svn/trunk/</url>
</scm>
...
</project>
发布snapshot和release
$ mvn clean deploy -Dgpg.passphrase=yourpassphrase /*yourpassphrase:gpg --gen-keys命令时设置的密码*/
$ mvn release:clean $ mvn release:prepare -Dgpg.passphrase=yourpassphrase $ mvn release:perform -Dgpg.passphrase=yourpassphrase
参考资源
Sonatype OSS Maven Repository Usage Guide
How To Generate PGP Signatures With Maven