1. ホーム
  2. メイヴン

[解決済み】githubでMavenリポジトリをホスティングする

2022-03-27 21:39:48

質問

私はgithubで作業している小さなオープンソースライブラリをフォークしています。 私はそれをmaven経由で他の開発者が利用できるようにしたいのですが、私は自分のNexusサーバーを実行したくないし、それがフォークであるため、私はそれをoss.sonatype.orgに簡単にデプロイすることができないのです。

githubにデプロイして、他の人がmavenを使ってアクセスできるようにしたいのですが、どうすればいいですか? これを行うための最良の方法は何でしょうか?

どのように解決するのですか?

私が見つけた最良の解決策は、以下のステップで構成されています。

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

この方法を使用すると、いくつかの利点があります。

  • Mavenのアーティファクトは、ソースとは別に mvn-repo という別のブランチに保存されるのと同じです。 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.xml のように、githubの site-maven-plugin は、GitHub にプッシュすることができます。

<!-- 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にパスワードを要求させる方法を知っていたら、教えてください(笑)。

次に、GitHubの site-maven-plugin を pom に追加することで、先ほど設定した新しいサーバーについて説明します。

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

最後に site-maven-plugin にアップロードし、一時的なステージングリポジトリから mvn-repo ブランチをGithub上に作成します。

<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 がターゲットディレクトリのローカルステージングリポジトリにファイルを "upload" し、次に 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 .

それは、あなたの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リポジトリからダウンロードするようになります。

編集:コメントにある問題を回避するために(「Error creating commit: 無効なリクエストです。For 'properties/name', nil is not a string.') を避けるため、githubのプロフィールに名前を記述するようにしてください。