maven‎ > ‎

appendix. mavenセントラルリポジトリに公開する


mavenのセントラルリポジトリに自分のコードをアップロードする。。。GitHubに公開なんてちゃちな話じゃありません。どこにいても、pomに依存関係を書いたら自分の書いたコードが勝手にダウンロードされちゃうんですよ!

Centralリポジトリの構成
-------------------------------------------------------------
Centralリポジトリ --+-- Releaseリポジトリ
             +-- Snapshotsリポジトリ
-------------------------------------------------------------

 Step1. アカウント登録issues.sonatype.org
 Step2. 鍵の作成 pgp
 Step3. セントラルリポジトリへのアップロードmvn deploy
mvn release:prepare
mvn release:perform
 oss.sonatype.orgで最後の確認stage close
release



参考2)deploy時にアップロードするリポジトリをsnapshot repogitory,release時にrelease repogitoryに切り替える設定方法https://github.com/maeste/SibillaTest/wiki/Maven-repository-setup-&-release-process-notes

Step1.アカウント登録

セントラルリポジトリにアップロードするためにはSonatypeのアカウントを登録します。
[Sign Up]のリンクを選択すると登録画面が出てきます。

アカウントができたら、さっそくログインして画面の右上にある[New Project...]を選択します。
ダイアログが出てくるので、以下のように公開したいプロジェクトの情報を埋めていきます。(もちろん英語で。簡単なものでいいです)
Summaryプロジェクトの概要
groupIdgroupIdはcom.googlecodeのような自分のドメイン名を含んだ文字列です。プロジェクト名は入れなくていいようです。自分はcom.yasudanetworkで登録できました。
Project URLプロジェクトのWebサイトへのURL
SCM URLソースコード保管場所へのURL(GitHubとかSubversionリポジトリのURLとか)
Nexus Username先ほど作ったアカウントの名前
Already Sync To Centralセントラルリポジトリにすでに成果物が存在しているか?
Descriptionその他、自分が必要と思う雑多な情報
プロジェクトのTicketが作られると、Sonatypeによる内容の確認が行われます。通常2営業日程度の時間がかかるようです。2営業日でメールが届きました。
確認メールが届くまではsnapshotリポジトリへのアップロード、後述するStageに挙げた成果物のReleaseが出来ません。(Releaseリポジトリのアップロードはできました)

Step2.鍵の作成

コードを公開するために、PGP暗号鍵を作る必要があります。

GnuPGをインストールする。Windows Installer
インストールしたディレクトリ(C:\Program Files (x86)\GNU\GnuPG)にPATHを通す。

コマンドラインを開き、以下の操作で公開鍵と秘密鍵を生成する。
C:\Users\Takatsugu>gpg --version
gpg (GnuPG) 1.4.11
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: C:/Users/Takatsugu/AppData/Roaming/gnupg
Supported algorithms:
Pubkey: RSA, RSA-E, RSA-S, ELG-E, DSA
Cipher: 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128,
        CAMELLIA192, CAMELLIA256
Hash: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2

C:\Users\Takatsugu>gpg --gen-key
gpg (GnuPG) 1.4.11; Copyright (C) 2010 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection? 1
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
Requested keysize is 2048 bits
Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0) 0
Key does not expire at all
Is this correct? (y/N) y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

Real name: YASUDA Takatsugu
Email address: yasu@yasudanetwork.com
Comment: yasudanetwork's works
You selected this USER-ID:
    "YASUDA Takatsugu (yasudanetwork's works) <yasu@yasudanetwork.com>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
.+++++
...+++++
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
.........+++++
...+++++
gpg: C:/Users/Takatsugu/AppData/Roaming/gnupg\trustdb.gpg: trustdb created
gpg: key 6120BAFA marked as ultimately trusted
public and secret key created and signed.

gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
pub   2048R/6120BAFA 2013-02-22
      Key fingerprint = 8672 7575 727E AF3B 8DCD  1A22 477E D7D4 6120 BAFA
uid                  YASUDA Takatsugu (yasudanetwork's works) <yasu@yasudanetwor
k.com>
sub   2048R/2A34BDDA 2013-02-22




以上で鍵の生成が完了。鍵が作られていれば以下の操作で公開鍵の一覧が出てきます。公開鍵はC:/Users/(ユーザ名)/AppData/Roaming/gnupg\pubring.gpgに作られるようです。6120BAFAの部分が生成された鍵のIDです。
C:\Users\Takatsugu>gpg --list-keys
C:/Users/Takatsugu/AppData/Roaming/gnupg\pubring.gpg
----------------------------------------------------
pub   2048R/6120BAFA 2013-02-22
uid                  YASUDA Takatsugu (yasudanetwork's works) <yasu@yasudanetwor
k.com>
sub   2048R/2A34BDDA 2013-02-22

秘密鍵の一覧取得は以下の操作。
C:\Users\Takatsugu>gpg --list-secret-keys
C:/Users/Takatsugu/AppData/Roaming/gnupg\secring.gpg
----------------------------------------------------
sec   2048R/6120BAFA 2013-02-22
uid                  YASUDA Takatsugu (yasudanetwork's works) <yasu@yasudanetwor
k.com>
ssb   2048R/2A34BDDA 2013-02-22

先ほど作った公開鍵をhkp://pool.sks-keyservers.net/に公開して、Sonatypeから参照できるようにします。
e:\wtp_workspace\struts2\flush>gpg --keyserver hkp://pool.sks-keyservers.net --s
end-keys 6120BAFA
gpg: sending key 6120BAFA to hkp server pool.sks-keyservers.net

e:\wtp_workspace\struts2\flush>gpg --keyserver hkp://pool.sks-keyservers.net --r
ecv-keys 6120BAFA
gpg: requesting key 6120BAFA from hkp server pool.sks-keyservers.net
gpg: key 6120BAFA: "YASUDA Takatsugu (yasudanetwork's works) <yasu@yasudanetwork
.com>" not changed
gpg: Total number processed: 1
gpg:              unchanged: 1

Step3.セントラルリポジトリへのアップロード

"mvn deploy"でSonatypeのリポジトリにアップロードできるようにpom.xml, settings.xmlを設定します。
deployするときは、鍵のパスフレーズの入力が求められます。以下のようにコマンドの引数を指定すると自動でデプロイできます。
mvn clean deploy -Dgpg.passphrase=yourpassphrase

deployのために必要な情報をpom.xmlとsettings.xmlに記述します。
distributionManagement要素内に、アップロード先のリポジトリの情報を定義します。

pom.xml
<?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>
<version>0.1</version>
<url>http://www.yasudanetwork.com/struts2-flush</url>
<organization>
<url>http://www.yasudanetwork.com</url>
<name>YASUDA Network.</name>
</organization>
<scm>
<url>git://scm.yasudanetwork.com:/struts2/flush.git</url>
</scm>
<distributionManagement>
<repository>
<id>sonatype-nexus-staging</id>
<name>Maven Central Repository</name>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
<groupId>com.yasudanetwork.struts2</groupId>
<artifactId>flush-scope-plugin</artifactId>
<name>Struts 2 Flush Scope Plugin</name>
<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>
・・・
<build>
<plugins>
<plugin>
<!-- pgp -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

oss.sonatype.orgのアカウント情報をpom.xmlに書くわけにいかないので、settings.xmlに以下のように記述します。
ちなみにsettings.xmlファイルは、C:\Users\(ユーザ名)\.m2以下に置いておくと設定内容が反映されます。".m2"という名前のフォルダはエクスプローラからは作れないけど、コマンドラインからなら作れます。また、eclipseからmavenを利用している場合は[Window]-[Preferences]を開き、[Maven]-[User Settings]で指定できます。
settings.xml
<settings>
<servers>
<server>
<id>sonatype-nexus-staging</id>
<username>yasuda</username>
<password>yourpassphrase</password>
</server>
</servers>
</settings>

settings.xmlはmavenの起動オプション"-s"で明示的に指定できます。
mvn clean deploy -s path_to\settings.xml -Dgpg.passphrase=yourpassphrase

oss.sonatype.orgへのアップロードが成功すると以下のようなログが出ます。
...
[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ flush-scope-plugin ---
[INFO] Installing E:\wtp_workspace\struts2\flush\target\flush-scope-plugin-0.1.jar to E:\.m2\repository\com\yasudanetwork\struts2\flush-scope-plugin\0.1\flush-scope-plugin-0.1.jar
[INFO] Installing E:\wtp_workspace\struts2\flush\pom.xml to E:\.m2\repository\com\yasudanetwork\struts2\flush-scope-plugin\0.1\flush-scope-plugin-0.1.pom
[INFO] Installing E:\wtp_workspace\struts2\flush\target\flush-scope-plugin-0.1.jar.asc to E:\.m2\repository\com\yasudanetwork\struts2\flush-scope-plugin\0.1\flush-scope-plugin-0.1.jar.asc
[INFO] Installing E:\wtp_workspace\struts2\flush\target\flush-scope-plugin-0.1.pom.asc to E:\.m2\repository\com\yasudanetwork\struts2\flush-scope-plugin\0.1\flush-scope-plugin-0.1.pom.asc
[INFO] Installing E:\wtp_workspace\struts2\flush\target\flush-scope-plugin-0.1-sources.jar to E:\.m2\repository\com\yasudanetwork\struts2\flush-scope-plugin\0.1\flush-scope-plugin-0.1-sources.jar
[INFO] 
[INFO] --- maven-deploy-plugin:2.7:deploy (default-deploy) @ flush-scope-plugin ---
Uploading: http://oss.sonatype.org/service/local/staging/deploy/maven2/com/yasudanetwork/struts2/flush-scope-plugin/0.1/flush-scope-plugin-0.1.jar
Uploading: http://oss.sonatype.org/service/local/staging/deploy/maven2/com/yasudanetwork/struts2/flush-scope-plugin/0.1/flush-scope-plugin-0.1.pom
Uploaded: http://oss.sonatype.org/service/local/staging/deploy/maven2/com/yasudanetwork/struts2/flush-scope-plugin/0.1/flush-scope-plugin-0.1.pom (6 KB at 4.0 KB/sec)
Uploaded: http://oss.sonatype.org/service/local/staging/deploy/maven2/com/yasudanetwork/struts2/flush-scope-plugin/0.1/flush-scope-plugin-0.1.jar (23 KB at 11.6 KB/sec)
Downloading: http://oss.sonatype.org/service/local/staging/deploy/maven2/com/yasudanetwork/struts2/flush-scope-plugin/maven-metadata.xml
Downloaded: http://oss.sonatype.org/service/local/staging/deploy/maven2/com/yasudanetwork/struts2/flush-scope-plugin/maven-metadata.xml (319 B at 0.5 KB/sec)
Uploading: http://oss.sonatype.org/service/local/staging/deploy/maven2/com/yasudanetwork/struts2/flush-scope-plugin/maven-metadata.xml
Uploaded: http://oss.sonatype.org/service/local/staging/deploy/maven2/com/yasudanetwork/struts2/flush-scope-plugin/maven-metadata.xml (319 B at 0.3 KB/sec)
Uploading: http://oss.sonatype.org/service/local/staging/deploy/maven2/com/yasudanetwork/struts2/flush-scope-plugin/0.1/flush-scope-plugin-0.1.jar.asc
Uploaded: http://oss.sonatype.org/service/local/staging/deploy/maven2/com/yasudanetwork/struts2/flush-scope-plugin/0.1/flush-scope-plugin-0.1.jar.asc (499 B at 0.4 KB/sec)
Uploading: http://oss.sonatype.org/service/local/staging/deploy/maven2/com/yasudanetwork/struts2/flush-scope-plugin/0.1/flush-scope-plugin-0.1.pom.asc
Uploaded: http://oss.sonatype.org/service/local/staging/deploy/maven2/com/yasudanetwork/struts2/flush-scope-plugin/0.1/flush-scope-plugin-0.1.pom.asc (499 B at 0.4 KB/sec)
Uploading: http://oss.sonatype.org/service/local/staging/deploy/maven2/com/yasudanetwork/struts2/flush-scope-plugin/0.1/flush-scope-plugin-0.1-sources.jar
Uploaded: http://oss.sonatype.org/service/local/staging/deploy/maven2/com/yasudanetwork/struts2/flush-scope-plugin/0.1/flush-scope-plugin-0.1-sources.jar (16 KB at 8.7 KB/sec)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 18.778s
[INFO] Finished at: Sat Feb 23 21:01:12 JST 2013
[INFO] Final Memory: 15M/224M
[INFO] ------------------------------------------------------------------------

ここから、更にアップロードした成果物の内容を検証し、正式にセントラルリポジトリに公開します。

その前に、pomの内容を見直しましょう。セントラルリポジトリに公開するには、公開するものがどのようなものなのか、だれが作ったものなのか、どのようなライセンスなのかなど多岐にわたる情報を書いてある必要があります。

最低限以下の項目をpomに定義する必要があるようです。
  • <modelVersion>
  • <groupId>
  • <artifactId>
  • <version>
  • <packaging>
  • <name>
  • <description>
  • <url>
  • <licenses>
  • <scm><url>
  • <scm><connection>
  • <developers>
必要な内容を記述したら、再度deployして、oss.sonatype.orgにアクセスしてアップロードされた成果物のチェックをします。

実際にセントラルリポジトリにアップロードするのはとっても簡単でした。仕事帰りにちょこっと数時間の作業。これで、どこにいてもpomに依存関係を書けば勝手にダウンロードされるライブラリが作れるのですから、どんどん日本からもいろんなライブラリやらフレームワークが生まれてほしいものです。

トラブルシュート


問題1a:deployが失敗する!
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7.792s
[INFO] Finished at: Sat Feb 23 02:16:43 JST 2013
[INFO] Final Memory: 14M/223M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:
deploy (default-deploy) on project flush-scope-plugin: Failed to deploy artifact
s: Could not transfer artifact com.yasudanetwork.struts2:flush-scope-plugin:jar:
0.1-20130222.171641-1 from/to sonatype-nexus-staging (http://oss.sonatype.org/se
rvice/local/staging/deploy/maven2/): Failed to transfer file: http://oss.sonatyp
e.org/service/local/staging/deploy/maven2/com/yasudanetwork/struts2/flush-scope-
plugin/0.1-SNAPSHOT/flush-scope-plugin-0.1-20130222.171641-1.jar. Return code is
: 400, ReasonPhrase:Bad Request. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e swit
ch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please rea
d the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionE
xception
原因:pom.xmlに書かれているveresionがSNAPSHOT。
対策:versionからSNAPSHOTを取ってDeploy。もしくはmvn release pluginを使って、deployではなくmvn release:prepare -> mvn release:performでsonatypeのリポジトリにアップロードする。

問題b:deployが失敗する!
[INFO] [deploy:deploy {execution: default-deploy}]
[INFO] Retrieving previous build number from sonatype-nexus-snapshots
[INFO] repository metadata for: 'snapshot com.yasudanetwork.struts2:flush-scope-plugin:0.1-SNAPSHOT' could not be found on repository: sonatype-nexus-snapshots, so will be created
Uploading: https://oss.sonatype.org/content/repositories/snapshots/com/yasudanetwork/struts2/flush-scope-plugin/0.1-SNAPSHOT/flush-scope-plugin-0.1-20130224.122350-1.jar
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error deploying artifact: Authorization failed: Access denied to: https://oss.sonatype.org/content/repositories/snapshots/com/yasudanetwork/struts2/flush-scope-plugin/0.1-SNAPSHOT/flush-scope-plugin-0.1-20130224.122350-1.jar
原因:https://oss.sonatype.org/content/repositories/snapshotsに成果物をアップロードするには、プロジェクトのチケットを作成して、Sonatypeからの承認を得る必要があるようです。

対策:Sonatypeからの承認OKのメールが来るまで待つ。

問題2:mvn release:prepareで設定ミスでこけたら、設定直しても失敗し続ける!
対策:mvn release:prepareでこけると、いろいろ面倒ですよね。pomのVersionのSNAPSHOTが消えてたり。設定見直して、pomを変更して再度release:prepareすると、今度はpom.xmlが変更されてるから処理を続けれません。とか言われたりすることもあります。

scmにgitを使っている場合、prepare再挑戦に必要な最低限のフローは以下の通りです。
1. mvn release:prepare失敗
2. pom.xmlの設定内容を見直し。&versionに-SNAPSHOT付ける。
3. git add pom.xml
4. git commit -m "xxx" 
5. git push origin master
6. mvn release:prepare -Dresume=false

問題3:mvn release:perform時にgitがこける。
対策:Windows8+Cygwin+Git環境はまだまだ安定稼働には遠いようだ。Cygwinの環境設定やら追加ライブラリのインストールで問題が回避できるかもしれない。

問題4:oss.sonatype.orgへのアップロードはできたけど、Close&releaseができない!
原因:oss.sonatype.orgはオープンソース専用のリポジトリです。アップロードされた成果物の中にソースコードが含まれていないと公開することができません。また、公開しようとしているプログラムの概要やjavadocといった成果物がそろっているかも確認されます。
対策:pom.xmlの内容を見直してソースコードやjavadocが成果物に含まれるようにしましょう。
pom.xmlの設定例
<?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>
<parent>
    <groupId>org.sonatype.oss</groupId>
    <artifactId>oss-parent</artifactId>
    <version>7</version>
  </parent>
<version>0.1</version>
<groupId>com.yasudanetwork.struts2</groupId>
<artifactId>flush-scope-plugin</artifactId>
<name>Struts 2 Flush Scope Plugin</name>
<url>http://www.yasudanetwork.com/struts2-flush</url>
<organization>
<url>http://www.yasudanetwork.com</url>
<name>YASUDA Network.</name>
</organization>
<scm>
<url>git://scm.yasudanetwork.com:/struts2/flush.git</url>
    <developerConnection>scm:git:ssh://192.168.100.30:8022/home/scm/struts2/flush.git</developerConnection>
</scm>
<description>The Flush Scope Plugin provides a "flush scope" into your struts2 web applications.</description>
<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>
<developers>
<developer>
<id>yasuda</id>
<name>YASUDA Takatsugu</name>
<email>yasu@yasudanetwork.com</email>
<url>http://www.yasudanetwork.com/</url>
</developer>
</developers>
<properties>
<struts2.version>2.1.8.1</struts2.version>
</properties>
<distributionManagement>
   <site>
      <id>www.yasudanetwork.com</id>
      <url>scp://www.yasudanetwork.com/home/public/html/struts2-flush/</url>
    </site>
<repository>
<id>sonatype-nexus-staging</id>
<name>Maven Central Repository</name>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
   <profiles>
        <profile>
            <id>release-sign-artifacts</id>
            <activation>
                <property>
                    <name>performRelease</name>
                    <value>true</value>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-gpg-plugin</artifactId>
                        <version>1.0-alpha-4</version>
                        <executions>
                            <execution>
                                <id>sign-artifacts</id>
                                <phase>verify</phase>
                                <goals>
                                    <goal>sign</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
<!-- 依存関係 -->
<dependencies>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>${struts2.version}</version>
<exclusions>
<exclusion>
<artifactId>tools</artifactId>
<groupId>com.sun</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.8.3</version>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<!-- scmへsshで接続するために wagon-sshの定義をする -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.2</version>
<dependencies>
<dependency><!-- add support for ssh/scp -->
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
<!-- site -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<configuration>
<locales>en,ja</locales>
</configuration>
</plugin>
<!-- カバレッジ -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<configuration>
<formats>
<format>html</format>
<format>xml</format>
</formats>
<instrumentation>
<excludes>
<exclude>**/*Test.class</exclude>
</excludes>
</instrumentation>
</configuration>
<executions>
<execution>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- jarを作るときにjavadocのjarも作る -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
            <id>attach-sources</id>
            <phase>package</phase>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
</executions>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
<version>2.13</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.9.1</version>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>2.7.1</version>
<configuration>
<linkXref>true</linkXref>
<sourceEncoding>utf-8</sourceEncoding>
<minimumTokens>100</minimumTokens>
<targetJdk>1.5</targetJdk>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>2.5.2</version>
</plugin>
</plugins>
</reporting>
</project>






















Comments