2009-10-13 6 views
7

ローカルのリポジトリの場所を取得するために、${settings.localRepository}などのプロパティを使用して、settings.xmlのパラメータを取得できます。settings.xmlで定義されたサーバーの値をpom.xmlで使用するにはどうすればよいですか?

<servers> 
    <server> 
     <id>server-dev</id> 
     <username>devuser</username> 
     <password>devpass</password> 
    </server> 
    <server> 
     <id>server-hom</id> 
     <username>homuser</username> 
     <password>hompass</password> 
    </server> 
</servers> 

方法はあり、任意のパラメータの値を取得するには、サーバーのid与えられた:

今私ののsettings.xmlは、以下のサーバーの定義が含まれています想像?たとえば、${settings.servers.server.server-dev.username}のようなものはdevuserを返します。私はすでに次のことを試してみた

${settings.servers.server.server-dev.username} 
${settings.servers.server-dev.username} 
${settings.servers.server[server-dev].username} 
${settings.servers[server-dev].username} 

をそれらのどれが働いていない...


をこのpageに関しては、これは不可能です。しかし、それが正確に文書化されていない機能であるため、私はまだこのようにしていくつかの希望を持っています...

答えて

4

を見て、それらを設定する私はそれが可能だと思うし、それは次のようになり信じていません。これらのプロパティの値を公開するのは悪い考えです

としては settings.xml<servers>を有する点が pom.xmlと一緒にそのような username又は passwordなどの値を分配しないことであり、 Settings Referenceで説明しました。だからどこからでもそれらを読むためにプロパティを公開することは、この原則を破るだけでセキュリティの問題になるかもしれません。

編集:私はこれについてもう一度考えており、私が言ったことは真実ではありません。

AFAIKでは、Mavenは、設定で定義されたサーバのプロパティと、OPの説明と同様のメカニズムを提供しません。 pom.xmlからアクセスできるのは間違いありません。

Maven APIは、設定されたサーバー(org.apache.maven.settings.Settings#getServer(String serverId)を参照)にアクセスできるように、Richが指摘したように、Mojo(つまりカスタムプラグイン)からプロパティを設定できる必要があります。

しかし、私は実際にあなたがしようとしていること、実際には<properties>を使用していて、プロファイルがより良いアプローチになるとは思っていません。一般的な環境プロパティ(ただし特定の値)を扱うことは、プロファイルの良い使用例です。 MavenのThe Definitive Guide11.5.1. Common Environments11.5.2 Protecting Secretsの本をご覧ください。

+0

nexus-によって示されるように、私は同意するが、ビルド内でそれらにアクセスするための使用例がありますmaven-plugin –

1

私はこれを行う簡単な方法がわかりません。しかし、小さなプラグインを作成して初期段階にバインドしてから、プラグイン内の設定値にアクセスしてプラグインで直接使用するか、プロパティとして公開することができます。

あなたはnexus-maven-pluginのソースを見て、設定から値を読み取る方法を見ることができ、そしてどのようにproperties-maven-plugin

0

可能性1GMaven pluginを使用します。あなたは簡単のようなサーバーの設定にアクセスすることができます

<source> 
    def server = settings.servers.find{ it.id.equals('server-hom') } 

し、次のフェーズでは、共通のプロパティに

project.properties.srvuser = server.username 
</source> 

をそれを置くあなたキャンアクセスいつものようにPOMからプロパティ:

${srvuser} 

可能性2は、hereのようにsettings.xmlにプロパティを定義します。サーバー設定ではなく、一部のプロファイルベースのプロパティから取得されます。

とにかく私はMavenがデフォルトですべてのサーバー設定を取得するはずです。

9

Maven 3以降の場合、これはservers-maven-extensionで実現できます。登録すると、settings.xml/serversの内容は$ {settings.servers.serverを使用して参照できます。 <サーバーID >。 <プロパティ>}(例:$ {settings.servers.server.server-dev.username})。

公開:私はプロジェクトのメンテナーです。

+0

パーフェクト!すごい仕事! –

+0

合意。あなたは揺れる。あなたの仕事に感謝します。 –

0

で説明したように:

Sonatype: Complete Reference 5.5.2

最良の方法は次のとおりです。一般的には

<settings> 
    <profiles> 
     <profile> 
      <activeByDefault>true</activeByDefault> 
      <properties> 
       <environment.type>prod</environment.type> 
       <database.password>m1ss10nimp0ss1bl3</database.password> 
      </properties> 
     </profile> 
    </profiles> 
</settings> 
関連する問題