14
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AWS S3でMavenリポジトリを構築する

Posted at

Mavenリポジトリが必要な場合

社内などプライベートな環境でJavaライブラリを管理したい場合は多いと思います。
ある程度の規模になるとNexusを導入したりしますが、もう少し手軽に実現したい時もあります。
このエントリは、AWS S3を利用してMavenリポジトリを構築する方法です。

手順

以下の順でMavenリポジトリを作成、使用します。

  1. S3にMavenリポジトリ用のBucketを作成
  2. S3のMavenリポジトリにアクセスするためのユーザ作成
  3. Gradleのpluginでライブラリの登録設定
  4. ライブラリを利用するためのクライアント設定

1. Mavenリポジトリ用のBucketを作成

特筆すべきことはなく通常通り、S3のBucketを作成します。
ここではmy-mavenというBucketを作成したとします。

2. Mavenリポジトリにアクセスするためのユーザ作成

必須ではないですが、適切なアクセス制御のために、Mavenリポジトリ用のユーザを作成し、S3のアクセス権限を追加します。
また、このタイミングでAWSのAccess key IDSecret access keyを取得します。

アクセスポリシー
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::my-maven",
                "arn:aws:s3:::my-maven/*"
            ]
        }
    ]
}

3. Gradleのpluginでライブラリの登録設定

maven-publishプラグインを適用し、ライブラリを登録するための設定を行います。

build.gradle
apply plugin: 'maven-publish'

def tag = System.getenv('CIRCLE_TAG') // git tagのプッシュを検知 (CircleCIの場合の例)
def buildVersion = "1.0.0"
group = 'com.example'
version = tag ? "${tag}-RELEASE" : "${buildVersion}-SNAPSHOT" // tagプッシュの場合RELEASE、それ以外はSNAPSHOTとする (このあたりは実際の運用に合わせて指定)

// リポジトリ登録するライブラリにソースも含めるため
task sourceJar(type: Jar) {
    from sourceSets.main.allJava
}

publishing {
    repositories {
        maven {
            url "s3://my-maven"
            credentials(AwsCredentials) {
                accessKey System.getenv('AWS_ACCESS_KEY_ID')
                secretKey System.getenv('AWS_SECRET_ACCESS_KEY')
            }
        }
    }
    publications {
        mavenJava(MavenPublication) {
            from components.java
            artifact sourceJar {
                classifier "sources"
            }
        }
    }
}

以下のコマンドで、ソースのビルドと、リポジトリ登録を行います。
通常はCIなどを経由して利用することになると思います。

$ gradle publish

4. ライブラリを利用するためのクライアント設定

作成したMavenリポジトリをクライアント側で追加すれば、他のリポジトリと同様に利用できるようになります。

build.gradle
repositories {
	mavenCentral()
	// 以下を追加
	maven {
		url "s3://my-maven"
		credentials(AwsCredentials) {
			accessKey System.getenv('AWS_ACCESS_KEY_ID')
			secretKey System.getenv('AWS_SECRET_ACCESS_KEY')
		}
	}
}

まとめ

構築も簡単なので、ライブラリ管理が必要になったときの手段の1つとして有効です。
また、今回の例はGradleでしたが、Mavenでも同様のことができます。

14
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?