web-dev-qa-db-ja.com

Mavenで正しいリポジトリを使用するにはどうすればよいですか?

私はちょうどいくつかのプロジェクトをチェックアウトしてビルドする必要がありますが、かなり前に(6か月か?)Mavenをインストールし、実際に使用していません-私が持っているプロジェクトのpom.xmlには「 http://repo1.maven.org/myurlhere "どこでも-プロジェクトのMavenリポジトリがある絶対URLがありますが、Mavenはまだ一般的なMavenリポジトリからダウンロードしようとしています:

Macintosh:trunk$ mvn clean install
[INFO] Scanning for projects...
Downloading: http://repo1.maven.org/url/project/project/x.x/project-x.x.pom
[INFO] Unable to find resource 'url.project:project:pom:x.x' in repository central (http://repo1.maven.org/)
[INFO] ------------------------------------------------------------------------
[ERROR] FATAL ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.

GroupId: url.project
ArtifactId: project
Version: x.x

Reason: Unable to download the artifact from any repository

  url.project:project:pom:x.x

from the specified remote repositories:
  central (http://repo1.maven.org/)

誰かが私が正しくしていないことで私を助けることができますか?基本的には、コマンドラインからプロジェクトをチェックアウトし、ディレクトリにcdして「mvn clean install」を実行しました-他には何もありません。どんな助けも大歓迎です。

60
user284163

私が持っているプロジェクトのpom.xmlには、この「 http://repo1.maven.org/myurlhere 」はありません。

Allプロジェクトには、 http://repo1.maven.org/<repository>(および<pluginRepository>)デフォルトで。 centralリポジトリと呼ばれるこのリポジトリは、「Super POM」から他のデフォルト設定と同様に継承されます(すべてのプロジェクトはSuper POMから継承します)。したがって、POMは実際にはスーパーPOM、親POM、および現在のPOMの組み合わせです。この組み合わせは「効果的なPOM」と呼ばれ、Mavenヘルププラグインのeffective-pomゴールを使用して印刷できます(デバッグに役立ちます)。

そして確かに、あなたが実行した場合:

mvn help:effective-pom

少なくとも次のものが表示されます。

  <repositories>
    <repository>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>Maven Repository Switchboard</name>
      <url>http://repo1.maven.org/maven2</url>
    </repository>
  </repositories>
  <pluginRepositories>
    <pluginRepository>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>Maven Plugin Repository</name>
      <url>http://repo1.maven.org/maven2</url>
    </pluginRepository>
  </pluginRepositories>

mavenリポジトリがプロジェクト用の絶対URLを持っていますが、Mavenはまだ一般的なMavenリポジトリからダウンロードしようとしています

Mavenは、centralを含め、宣言されたすべてのリポジトリで依存関係を見つけようとします。ただし、表示しているトレースによると、oneリポジトリー(中央リポジトリー)のみが定義されているか、mavenは次のように出力します。

Reason: Unable to download the artifact from any repository

  url.project:project:pom:x.x

from the specified remote repositories:
  central (http://repo1.maven.org/),
  another-repository (http://another/repository)

そのため、基本的に、mavenはurl.project:project:pom:x.xを見つけることができません。中央で使用できないためです。

しかし、どのプロジェクトをチェックアウトしたか(特定の指示がある場合があります)またはどの依存関係が欠落しているのか(別のリポジトリで見つかる場合があります)がわからなければ、さらに支援することはできません。

64
Pascal Thivent

デフォルトでは、Mavenは常に公式のMavenリポジトリである http://repo1.maven.org を検索します。

Mavenはプロジェクトをビルドしようとすると、ローカルリポジトリを検索し(デフォルトでは~/.m2/repositoryですが、<localRepository>~/.m2/settings.xml値を変更して依存関係を見つけることができます)、 pom.xmlで定義されたプラグインまたはレポート。適切なアーティファクトがローカルリポジトリで見つからない場合、デフォルトの http://repo1.maven.org で始まる構成されたすべての外部リポジトリを検索します。

settings.xmlファイルにミラーを設定することにより、このデフォルトのリポジトリを回避するようにMavenを設定できます。

<mirrors>
    <mirror>
        <id>repoMirror</id>
        <name>Our mirror for Maven repository</name>
        <url>http://the/server/</url>
        <mirrorOf>*</mirrorOf>
    </mirror>
</mirrors>

この方法では、Mavenはhttp://repo1.maven.orgに連絡する代わりに、エンタープライズレポジトリ(この例ではhttp://the/server)に連絡します。

別のリポジトリを追加する場合は、settings.xmlファイルで新しいリポジトリを定義できます。

<profiles>
    <profile>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <repositories>
            <repository>
                <id>foo.bar</id>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
                <url>http://new/repository/server</url>
            </repository>
        </repositories>

完全なsettings.xmlモデルを見ることができます こちら

cleanプロセスに関しては、Mavenに実行を依頼することができますoffline。この場合、Mavenは外部リポジトリにアクセスしようとしません。

mvn -o clean 
30
Romain Linsolas

基本的に、すべてのMavenは、プロジェクトの特定の依存関係が中央のMavenリポジトリで利用できないことを示しています。デフォルトでは、ローカルの.m2フォルダー(ローカルリポジトリー)、POMの構成済みリポジトリー、中央のMavenリポジトリーの順に表示されます。 Mavenリファレンスのリポジトリ セクション を見てください。

問題は、チェックインされたプロジェクトが、すべての依存関係を見つけてプロジェクトを最初からビルドできるような方法でPOMを構成しなかったことです。

4
Taylor Leese

あなたがここで見逃しているのはこれだと思います:

https://maven.Apache.org/settings.html#Servers

ダウンロードおよび展開用のリポジトリは、POMのリポジトリおよびdistributionManagement要素によって定義されます。ただし、ユーザー名やパスワードなどの特定の設定は、pom.xmlとともに配布しないでください。このタイプの情報は、ビルドサーバーのsettings.xmlに存在する必要があります。

これは、カスタムリポジトリを使用する好ましい方法です。おそらく、このリポジトリのURLがビルドサーバーのsettings.xmlにあるのでしょう。

URLと資格情報を取得したら、次の場所にマシンに配置できます:~/.m2/settings.xml このような:

<settings ...> 

        .
        .
        .
        <servers>
            <server>
              <id>internal-repository-group</id>
              <username>YOUR-USERNAME-HERE</username>
              <password>YOUR-PASSWORD-HERE</password>
            </server>
        </servers>
</settings>
0
shabby