githubでMavenリポジトリをホストする 質問する

githubでMavenリポジトリをホストする 質問する

私は github で作業している小さなオープンソース ライブラリのフォークを持っています。これを Maven 経由で他の開発者に公開したいのですが、独自の Nexus サーバーを実行したくありません。また、フォークであるため、oss.sonatype.org に簡単にデプロイできません。

私がやりたいのは、他の人が Maven を使用してアクセスできるように、これを github にデプロイすることです。これを行う最善の方法は何ですか?

ベストアンサー1

私が見つけた最善の解決策は、次の手順で構成されています。

  1. mvn-repoMaven アーティファクトをホストするためにというブランチを作成します。
  2. githubを使うサイト-Maven-プラグイン成果物を github にプッシュします。
  3. リモートをmvn-repoMaven リポジトリとして使用するように Maven を構成します。

このアプローチを使用すると、いくつかの利点があります。

  • Maven アーティファクトは、ソースとは別の と呼ばれる別のブランチに保存されますmvn-repo。これは、github ページが と呼ばれる別のブランチに保存されるのと同じですgh-pages(github ページを使用する場合)。
  • 他の提案されたソリューションとは異なり、gh-pagesそれらを使用している場合でも競合することはありません。
  • デプロイターゲットと自然に結びついているので、新しいMavenコマンドを覚える必要はありません。mvn deploy通常どおりに使用してください。

リモート Maven リポジトリに成果物をデプロイする一般的な方法は を使用することですmvn deploy。このソリューションではそのメカニズムにパッチを適用しましょう。

まず、Maven に、ターゲット ディレクトリ内の一時的なステージング場所に成果物をデプロイするように指示します。以下を に追加しますpom.xml

<distributionManagement>
    <repository>
        <id>internal.repo</id>
        <name>Temporary Staging Repository</name>
        <url>file://${project.build.directory}/mvn-repo</url>
    </repository>
</distributionManagement>

<plugins>
    <plugin>
        <artifactId>maven-deploy-plugin</artifactId>
        <version>2.8.1</version>
        <configuration>
            <altDeploymentRepository>internal.repo::default::file://${project.build.directory}/mvn-repo</altDeploymentRepository>
        </configuration>
    </plugin>
</plugins>

ここで を実行してみてくださいmvn clean deploy。Maven リポジトリが にデプロイされたことがわかりますtarget/mvn-repo。次の手順では、そのディレクトリを GitHub にアップロードします。

~/.m2/settings.xmlgithub がsite-maven-pluginGitHub にプッシュできるように認証情報を追加します。

<!-- NOTE: MAKE SURE THAT settings.xml IS NOT WORLD READABLE! -->
<settings>
  <servers>
    <server>
      <id>github</id>
      <username>YOUR-USERNAME</username>
      <password>YOUR-PASSWORD</password>
    </server>
  </servers>
</settings>

(前述のとおり、chmod 700 settings.xmlファイル内のパスワードを誰も読み取れないようにしてください。設定ファイルでパスワードを要求するのではなく、site-maven-plugin にパスワードの入力を求めるようにする方法を知っている方がいらっしゃいましたら、お知らせください。)

site-maven-plugin次に、 pom に次のコードを追加して、構成した新しいサーバーについてGitHub に通知します。

<properties>
    <!-- github server corresponds to entry in ~/.m2/settings.xml -->
    <github.global.server>github</github.global.server>
</properties>

最後に、site-maven-plugin一時的なステージング リポジトリからmvn-repoGithub のブランチにアップロードするように設定します。

<build>
    <plugins>
        <plugin>
            <groupId>com.github.github</groupId>
            <artifactId>site-maven-plugin</artifactId>
            <version>0.11</version>
            <configuration>
                <message>Maven artifacts for ${project.version}</message>  <!-- git commit message -->
                <noJekyll>true</noJekyll>                                  <!-- disable webpage processing -->
                <outputDirectory>${project.build.directory}/mvn-repo</outputDirectory> <!-- matches distribution management repository url above -->
                <branch>refs/heads/mvn-repo</branch>                       <!-- remote branch name -->
                <includes><include>**/*</include></includes>
                <repositoryName>YOUR-REPOSITORY-NAME</repositoryName>      <!-- github repo name -->
                <repositoryOwner>YOUR-GITHUB-USERNAME</repositoryOwner>    <!-- github username  -->
            </configuration>
            <executions>
              <!-- run site-maven-plugin's 'site' target as part of the build's normal 'deploy' phase -->
              <execution>
                <goals>
                  <goal>site</goal>
                </goals>
                <phase>deploy</phase>
              </execution>
            </executions>
        </plugin>
    </plugins>
</build>

ブランチmvn-repoが存在する必要はありません。自動的に作成されます。

ここでもう一度実行しますmvn clean deploy。maven-deploy-plugin がファイルをターゲット ディレクトリのローカル ステージング リポジトリに「アップロード」し、site-maven-plugin がそれらのファイルをコミットしてサーバーにプッシュしているのがわかるはずです。

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building DaoCore 1.3-SNAPSHOT
[INFO] ------------------------------------------------------------------------
...
[INFO] --- maven-deploy-plugin:2.5:deploy (default-deploy) @ greendao ---
Uploaded: file:///Users/mike/Projects/greendao-emmby/DaoCore/target/mvn-repo/com/greendao-orm/greendao/1.3-SNAPSHOT/greendao-1.3-20121223.182256-3.jar (77 KB at 2936.9 KB/sec)
Uploaded: file:///Users/mike/Projects/greendao-emmby/DaoCore/target/mvn-repo/com/greendao-orm/greendao/1.3-SNAPSHOT/greendao-1.3-20121223.182256-3.pom (3 KB at 1402.3 KB/sec)
Uploaded: file:///Users/mike/Projects/greendao-emmby/DaoCore/target/mvn-repo/com/greendao-orm/greendao/1.3-SNAPSHOT/maven-metadata.xml (768 B at 150.0 KB/sec)
Uploaded: file:///Users/mike/Projects/greendao-emmby/DaoCore/target/mvn-repo/com/greendao-orm/greendao/maven-metadata.xml (282 B at 91.8 KB/sec)
[INFO] 
[INFO] --- site-maven-plugin:0.7:site (default) @ greendao ---
[INFO] Creating 24 blobs
[INFO] Creating tree with 25 blob entries
[INFO] Creating commit with SHA-1: 0b8444e487a8acf9caabe7ec18a4e9cff4964809
[INFO] Updating reference refs/heads/mvn-repo from ab7afb9a228bf33d9e04db39d178f96a7a225593 to 0b8444e487a8acf9caabe7ec18a4e9cff4964809
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.595s
[INFO] Finished at: Sun Dec 23 11:23:03 MST 2012
[INFO] Final Memory: 9M/81M
[INFO] ------------------------------------------------------------------------

ブラウザで github.com にアクセスし、mvn-repoブランチを選択して、すべてのバイナリがそこにあることを確認します。

ここに画像の説明を入力してください

おめでとう!

を実行するだけで、Maven アーティファクトを貧乏人のパブリック リポジトリにデプロイできるようになりましたmvn clean deploy

もう 1 つ必要な手順があります。それは、自分の POM に依存するすべての POM がリポジトリの場所を認識するように構成することです。自分のプロジェクトに依存するすべてのプロジェクトの POM に次のスニペットを追加します。

<repositories>
    <repository>
        <id>YOUR-PROJECT-NAME-mvn-repo</id>
        <url>https://github.com/YOUR-USERNAME/YOUR-PROJECT-NAME/raw/mvn-repo/</url>
        <snapshots>
            <enabled>true</enabled>
            <updatePolicy>always</updatePolicy>
        </snapshots>
    </repository>
</repositories>

これで、jar ファイルを必要とするすべてのプロジェクトは、それらを github Maven リポジトリから自動的にダウンロードするようになります。

編集: コメントに記載されている問題 (「コミットの作成エラー: 無効なリクエスト。 'properties/name' の場合、nil は文字列ではありません。」) を回避するには、github のプロフィールに名前を必ず記載してください。

おすすめ記事