web-dev-qa-db-ja.com

Mavenにスナップショットバージョンを自動的にダウンロードさせる方法はありますか?

そのため、別のプロジェクトのスナップショットバージョンに依存するプロジェクトがあります。依存関係は次のとおりです。

<dependency>
  <groupId>org.oop</groupId>
  <artifactId>oop</artifactId>
  <version>0.9.9-SNAPSHOT</version>
</dependency>

Oopプロジェクトでは、「mvn clean deploy」を実行したので、スナップショットバージョンはMavenセントラルリポジトリのどこかにあるはずです。しかし、mvnクリーンインストールを実行すると、上記のスナップショットの依存関係を解決できず、次のようになります。

欠落:

1)org.oop:oop:jar:0.9.9-SNAPSHOT

プロジェクトのWebサイトからファイルを手動でダウンロードしてみてください。

次に、次のコマンドを使用してインストールします:mvn install:install-file -DgroupId = org.oop -DartifactId = oop -Dversion = 0.9.9-SNAPSHOT -Dpackaging = jar -Dfile =/path/to/file

または、独自のリポジトリをホストしている場合は、そこにファイルをデプロイできます。mvn deploy:deploy-file -DgroupId = org.oop -DartifactId = oop -Dversion = 0.9.9-SNAPSHOT -Dpackaging = jar -Dfile =/path/to/file -Durl = [url] -DrepositoryId = [id]

mavenにスナップショットを自動的にダウンロードさせる方法はありますか?ここに何か不足している必要があります。

EDIT1:私のsettings.xmlで:

   <server>
      <id>sonatype-nexus-snapshots</id>
      <username>XXXXXX</username>
      <password>XXXXXX</password>
    </server>

    <server>
      <id>sonatype-nexus-staging</id>
      <username>XXXXXX</username>
      <password>XXXXXX</password>
    </server>

EDIT2: enter image description here

18
chrisapotek

これを〜/ .m2/settings.xmlに追加するだけです:

<profiles>
  <profile>
     <id>allow-snapshots</id>
        <activation><activeByDefault>true</activeByDefault></activation>
     <repositories>
       <repository>
         <id>snapshots-repo</id>
         <url>https://oss.sonatype.org/content/repositories/snapshots</url>
         <releases><enabled>false</enabled></releases>
         <snapshots><enabled>true</enabled></snapshots>
       </repository>
     </repositories>
   </profile>
</profiles>
19
JohnPristine

Mavenはスナップショットを自動的にダウンロードしようとしますが、実際には(エラーが示すように)スナップショットをダウンロードします。デフォルトでは、Mavenは新しいスナップショットバージョンを1日に1回検索しますが、その間隔はスナップショットリポジトリ構成(たとえば、settings.xml)で変更できます。

<updatePolicy>interval:5</updatePolicy>

これにより、Mavenは5分ごとにチェックされます(頻繁にビルドする場合)。または、-Uまたは--update-snapshotsオプション。手動でチェックを強制します。

ただし、依存関係を見つけることができません。スナップショット依存関係のリポジトリ設定とアーティファクト構成を投稿できますか?

それは org.oop:oop:jar:0.9.9-SNAPSHOTリポジトリ内のアーティファクト?

...スナップショットのバージョンは、Mavenの中央リポジトリのどこかにあるはずです。

いいえ、そうではありません。調べてみたが見つからなかった。 Afaik、ステージングメカニズムがあるため、設定が間違っている可能性があります。しかし、通常、他の人がすでに言ったように、ArtifactoryやNexusなどの独自のリポジトリマネージャーを使用します。

19
Thomas

スナップショットを更新するには、-Uオプションを試してください

-U,--update-snapshots                  Forces a check for updated
                                       releases and snapshots on remote
                                       repositories

しかし、あなたは言った:

私は「mvn clean deploy」を実行したので、スナップショットバージョンはMavenセントラルリポジトリのどこかにあるはずです。

これは不可能です。スナップショットは別の場所に移動しています。もし私がmvn clean deploy個人用リポジトリを設定せずに、以下を取得します。

デプロイメントが失敗しました:repositoryManagementエレメント内のPOMまたは-DaltDeploymentRepository = id :: layout :: urlパラメーターでリポジトリエレメントが指定されていませんでした

デプロイを有効にするには、たとえば、pom.xmlに追加するいくつかの設定があります。

<distributionManagement>

    <!-- Publish versioned releases here -->
    <repository>
        <id>myrepo</id>
        <name>My releases</name>
        <url>http://nexus.mycompany.com/nexus/content/repositories/releases</url>
    </repository>

    <!-- Publish snapshots here -->
    <snapshotRepository>
        <id>myrepo</id>
        <name>my snapshots</name>
        <url>http://nexus.mycompany.com/nexus/content/repositories/snapshots</url>
    </snapshotRepository>

</distributionManagement>

<repositories>
    <repository>
        <id>myrepo</id>
        <name>My Public Repository</name>
        <url>http://nexus.mycompany.com/nexus/content/groups/public</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>
18
stivlo

その依存関係はリポジトリに存在しますか? (pom.xmlまたはsettings.xml内)?

ないように見えます。ちなみに、あなたの設定を見てください、あなたは-o(オフライン)。また、-Uスナップショットを更新します。

1
ssedano

誤解がないことを確認するために、用語を少し明確にしましょう。

"Maven Central"( http://search.maven.org/ )は、リリースのみを検索するグローバルサイトです。 Centralはスナップショットを受け入れないため、そこにデプロイするとエラーが発生します。

おそらく、ローカル/会社全体のMavenプロキシ/キャッシュを意味します。これらは、スナップショットバージョンを拒否するように構成することもできます。 Nexusの場合は、より複雑なルールを定義することもできます。私の場合、mvn deploy中にエラーが発生しない問題がありましたが、サーバーのログにエラーが表示されました。

データの追跡を試みます。デバッグを有効にして(mvn -X)、Mavenがデータをアップロードした場所を確認します。次に、サーバーをチェックして、成果物が実際にアップロードされたかどうかを確認します。サーバーのログでエラーを確認してください。

また、スナップショットの依存関係は1日に1回のみ更新されることに注意してください。だからこれは動作しません:

PC#1:mvn install->依存関係が欠落しているエラーPC#2:mvn deploy PC#1:mvn install->「1日に1回更新する」ポリシーのため、依存関係がまだありません

mvn install -Uを試して、Mavenにキャッシュされたメタデータを強制的に更新させます。

0
Aaron Digulla

コマンドラインで-Uを設定しても、スナップショットが更新されない問題に遭遇しました。私にとっての問題は、クライアントがMaven 3でサーバーがMaven 2であり、Maven 3では一意のスナップショットがサポートされなくなったことです。 3.xxクライアントをサポートするには、タイムスタンプ付きのスナップショットを含む新しいリポジトリを作成する必要がありました。

0
Ags1

あなたはどちらか

  • すべてのスナップショットを構築する親プロジェクトを使用する、または
  • mvn:deployなどを使用して、スナップショットをMavenビルドサーバー(nexus/archiva/..)にデプロイします
0
Johan Sjöberg