2017-04-05 11 views
3

これまで遭遇したことのない奇妙なMaven設定の問題が発生しました。私の解決策としては混乱しています。settings.xmlファイルにリポジトリを指定する必要があるのはなぜですか?

私はすべてのミラーとして使用するローカルNexusサーバーを持っています。今まで、私は私のsettings.xmlファイルで、次のミラーを持っていた:

<mirrors> 
      <mirror> 
        <id>nexus</id> 
        <mirrorOf>*</mirrorOf> 
        <name>WADA Nexus</name> 
        <url>https://nexus.domain.org/repository/Public/</url>                        
      </mirror> 
    </mirrors> 

しかし、私は最近、私は私のネクサスレポに展開している私自身のカスタム親ポンポンを作りたかったのです。私は今、私のビルドを実行しようとすると

<parent> 
      <groupId>org.domain</groupId> 
      <artifactId>root-pom</artifactId> 
      <version>1.0.0-SNAPSHOT</version> 
    </parent> 

はしかし、それは次のように失敗します:何らかの理由で

ERROR: Failed to parse POMs 
org.apache.maven.project.ProjectBuildingException: Some problems were encountered while processing the POMs: 
[FATAL] Non-resolvable parent POM: Could not find artifact org.domain:root-pom:pom:1.0.0-SNAPSHOT and 'parent.relativePath' points at wrong local POM @ line 9, column 10 

、Mavenのがしようとしていない私のプロジェクトでは、私は私の親ポンポンを指摘しています私のNexusのレポで親のpomを調べる。

私の唯一の回避策は、私のsettings.xmlファイルにランダムなリポジトリ値を定義することでした

:私はすべてのリポジトリの/のURLを反映してきたので、私は任意の値にそのURLを設定することができますとMavenが今意志

<repositories> 
    <repository> 
     <id>nexus</id> 
     <releases> 
     <enabled>true</enabled> 
     <updatePolicy>always</updatePolicy> 
     <checksumPolicy>warn</checksumPolicy> 
     </releases> 
     <snapshots> 
     <enabled>true</enabled> 
     <updatePolicy>never</updatePolicy> 
     <checksumPolicy>fail</checksumPolicy> 
     </snapshots> 
     <url>https://www.google.com/anythingCanGoHere</url> 
     <layout>default</layout> 
    </repository> 
    </repositories> 

親のポンを拾う。

なぜ、リポジトリを指定する必要があるのでしょうか? mavenは自動的に親pomをMaven中央リポジトリまたは他のデフォルトリポジトリに対して解決しようとするべきではありませんか?

+0

あなたのpomファイルを表示してください...あなたが正しく内部リポジトリマネージャへのすべてのエントリをmirrorOfするように設定したため、Maven Centralを解決できません。 – khmarbaise

+0

@khmarbaise私はそれが実際に中心に来ることはないが、私はそれがミラー設定のために私のネクサスにリダイレクトされることを期待していたことを知っています。 pomファイルは非常に基本的です - 親定義とは別に、いくつかのプロパティー、依存関係定義、およびいくつかのプラグイン定義があります。リポジトリまたはdistributionManagementエントリはありません。 –

+0

@khmarbaise私がこれをもう少し考えていたら、SNAPSHOTリポジトリを明示的に指定しないと、mavenはどこにSNAPSHOTアーチファクトを探すべきか分からないと結論づけました。これは設計によるものですか?スナップショット成果物のデフォルトのリポジトリ(maven centralなど)はありませんか? –

答えて

1

これは奇妙な構成の問題ではなく、あなたの側からの誤解です。あなたがしたことは、親POMに<distributionManagement/>を入力して、settings.xmlのキャッチオールミラーをローカルのNexusインスタンスに追加して動作させることです。

あなたは実際にミラーリングしていることを知っていますか?いいえ! Mavenのデフォルトのハードコーディングされたレポは、Maven Centralです。スナップショットが含まれていないリリースレポです。したがって、ERRORが表示されます。 MavenがNexusインスタンスからスナップショットを要求できるようにするには、偽のリポジトリが必要です。それ以外の場合は、リリースをリクエストするだけです。 Nexusには、Centralとあなたのホストされたリリースとスナップショットreposを持つRepoグループがあります。

POMにスナップショットレポジトリを定義しない限り、Mavenは決してスナップショットをダウンロードできません。

+0

それは私が予想したものです。定義されたスナップショットのデフォルトリポジトリがあるかどうかはわかりませんでした。 –

関連する問題