2016-08-10 55 views
17

私はmavenとjenkinsの使い方が新しいです。私はそれが次のエラーを示しPOM子供に親のポンポンからの依存関係を継承しようとしています:ここで親pomから子pomへの依存を継承する方法

[ERROR] COMPILATION ERROR : 
[INFO] ------------------------------------------------------------- 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/XMLConverters.java:[10,26] package com.rpmtec.current does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/XMLConverters.java:[11,26] package com.rpmtec.current does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/XMLConverters.java:[15,38] cannot find symbol 
    symbol: class AbstractRequestMessageData_Type 
    location: class com.td.inv.wss.util.XMLConverters 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/XMLConverters.java:[26,23] cannot find symbol 
    symbol: class AbstractResponseMessageData_Type 
    location: class com.td.inv.wss.util.XMLConverters 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/UsTermRateItemComparator.java:[5,42] package com.rpmtec.current.UsTermRate_Type does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/UsTermRateItemComparator.java:[7,61] cannot find symbol 
    symbol: class UsTermRateItems 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/UsTermRateItemComparator.java:[9,28] cannot find symbol 
    symbol: class UsTermRateItems 
    location: class com.td.inv.wss.util.UsTermRateItemComparator 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/UsTermRateItemComparator.java:[9,48] cannot find symbol 
    symbol: class UsTermRateItems 
    location: class com.td.inv.wss.util.UsTermRateItemComparator 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/model/COIRQ.java:[9,40] package com.fasterxml.jackson.annotation does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/model/COIRQ.java:[10,26] package com.rpmtec.current does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/model/COIRQ.java:[11,26] package com.rpmtec.current does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/model/COIRQ.java:[12,26] package com.rpmtec.current does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/model/COIRQ.java:[13,26] package com.rpmtec.current does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/model/COIRQ.java:[14,42] package com.rpmtec.current.UsTermRate_Type does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/model/COIRQ.java:[19,2] cannot find symbol 
    symbol: class JsonIgnoreProperties 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/model/COIRQ.java:[69,22] cannot find symbol 
    symbol: class ORCA_GETTERMHOLDINGRS_Type 
    location: class com.td.inv.model.COIRQ 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/model/COIRQ.java:[69,66] cannot find symbol 
    symbol: class RPM_GETPLANACCOUNTOVERVIEWRS_Type 
    location: class com.td.inv.model.COIRQ 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/model/COIRQ.java:[70,25] cannot find symbol 
    symbol: class ORCA_GETTERMINSTRUCTIONRS_Type 
    location: class com.td.inv.model.COIRQ 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/RPMInvoker.java:[5,26] package javax.ws.rs.client does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/RPMInvoker.java:[6,26] package javax.ws.rs.client does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/RPMInvoker.java:[7,26] package javax.ws.rs.client does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/RPMInvoker.java:[8,26] package javax.ws.rs.client does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/RPMInvoker.java:[9,24] package javax.ws.rs.core does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/RPMInvoker.java:[15,26] package com.rpmtec.current does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/RPMInvoker.java:[16,26] package com.rpmtec.current does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/RPMInvoker.java:[23,57] cannot find symbol 
    symbol: class AbstractRequestMessageData_Type 
    location: class com.td.inv.wss.util.RPMInvoker 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/RPMInvoker.java:[24,41] cannot find symbol 
    symbol: class AbstractResponseMessageData_Type 
    location: class com.td.inv.wss.util.RPMInvoker 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/application/InvestmentAPI.java:[4,19] package javax.ws.rs does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/application/InvestmentAPI.java:[5,24] package javax.ws.rs.core does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/application/InvestmentAPI.java:[9,36] cannot find symbol 
    symbol: class Application 

を私の親POMさ:

..... 
<modelVersion>4.0.0</modelVersion> 
<groupId>group1</groupId> 
<artifactId>group1-artifact</artifactId> 
<version>1.0.1</version> 
<packaging>pom</packaging> 

<modules> 
    <module>child1</module> 
</modules> 
....... 

ここでは、私の子供のPOMです:

..... 
<modelVersion>4.0.0</modelVersion> 
<parent> 
    <groupId>group1</groupId> 
    <artifactId>group1-artifact</artifactId> 
    <version>1.0.1</version> 
    <relativePath>(full url.....)/jenkins-parent-pom//pom.xml</relativePath> 
</parent> 
<groupId>group1</groupId> 
<artifactId>child1</artifactId> 
<version>0.0.1</version> 
<packaging>war</packaging> 
...... 

親POMからの子POMの依存関係を継承しようとしました。

<dependencyManagement> 
    <dependencies> 
    <dependency> 
     <groupId>group1</groupId> 
     <artifactId>group1-artifact</artifactId> 
     <version>1.0.1</version> 
     <type>pom</type> 
     <scope>import</scope> 
    </dependency> 
    </dependencies> 
</dependencyManagement> 

これらの依存関係を子POMに入れると、完全に機能します。インストールするにはclean install、ゲンキンを使ってネクサスに展開する場合はdeployを実行します。私はmaven-3.3.9を使用しています。ジーンズでは、私はgitから2つの異なるmavenプロジェクトで親子を読みました。親POMからすべての依存関係とプラグインを継承したい出来ますか?

答えて

19

これを達成するには、継承する依存関係を<dependencies>セクションに宣言する必要があります。 <dependencyManagement>は、特定の子供の<dependencies>の中で、いつでも後で参照する必要がある定義を有効にするために使用されます。

UPDATE:すべての子pomが継承する依存関係を宣言するときは注意してください。非常に素早く、親に宣言されているだけなので、必要のない依存関係を持つことができます。他のコメント作成者が述べたように、<dependencyManagement>は、あなたが元々望んでいたものではありませんが、より良い選択かもしれません。

+0

あなたは、親のpomで、タグ内のすべての依存関係を宣言し、またはchild pom内ではないことを意味するでしょうか?私はすべての依存関係を親のpomのタグ内に入れました。問題ありますか? – Cherry

+0

あなたが目標とするのは、すべての子ポームに依存関係を継承することです。子どものそれぞれでデクリルする必要はありません。そうすれば、それを 'ではなく' 内で宣言する必要があります。一方、 ' 'で宣言された依存関係は、子プロセスで必要な場合にのみ使用できます。グループと成果物をその子の' 'に書き込むだけです。他のプロパティ(バージョン)が親で一度だけ宣言されるという利点があります。 – vempo

+0

ありがとうございます。はい、私の目標は、特定の依存関係を子ポムに継承することです。あなたの回答によれば、私はそれらの特定の依存関係を親のpomのタグ(タグではない)に入れますか? – Cherry

8

実際、問題に対処する2つの方法があります。

  1. はどちらかあなたは<dependencyManagement />ノードの下に親POMで依存関係を考慮して、それを必要とし、それぞれの子に、<dependencies />ノードに依存関係を追加します。依存関係のバージョンを設定しないことを選択できます。
  2. または、<dependencies />ノードの親のpomに依存関係を宣言すると、各子が依存関係の恩恵を受けます。

あなたは親のポンポンでこれを宣言するのであれば、たとえば、:

<dependencies> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.7.21</version> 
    </dependency> 
</dependencies> 
<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-simple</artifactId> 
      <version>1.7.21</version> 
      <scope>runtime</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

その後slf4j-apiは、すべての子供のための依存関係になります。プラグインの

<dependencies> 
    <dependency> 
     <group>org.slf4j</group> 
     <artifactId>slf4j-simple</artifactId> 
    </dependency> 
</dependencies> 

を、それは同じように動作しますが、<pluginManagement /><plugins />ノードと:しかし、あなたはそれを必要とする必要があり、子供のポンポンでslf4j-simpleに依存関係を追加する必要があります。すべての設定は、親pomのプラグインの定義に入ることができ、子プラグインの<build />セクションにプラグインを宣言するだけです。

+0

感謝。しかし、依存関係のバージョンを設定せずに、ノードの子pomに依存関係を追加することなく、親pomから依存関係を継承する方法はありません。 – Cherry

+0

私の答えは正確ではないので、私はそれを更新しました。親pomの ''ノードに子ノードを追加すると、子ノードのpomに依存関係を追加する必要はありません。君の選択。 –

+1

確かにそれを行うことはできますが、 ''の外にある親のpomに ''を置くことはまれです。あなたのすべての子モジュールは、これらすべての依存関係を常に継承します。あなたのモジュールの1つを消費するかもしれない他のプロジェクトも一時的にすべてのこれらのdepsを取得し、特にこの子モジュールがそれらのすべてを使用しない場合、競合または悪化する可能性があります。 @ArthurNosedaによるオリジナルのソリューションが最高です。 –

3

以下は、親と子のポムをどのように使うべきかの例です。

次のように親のポンポンがある:

..... 
<modelVersion>4.0.0</modelVersion> 
<groupId>group1</groupId> 
<artifactId>group1-artifact</artifactId> 
<version>1.0.1</version> 
<packaging>pom</packaging> 

<modules> 
    <module>child1</module> 
</modules> 

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-simple</artifactId> 
      <version>1.7.21</version> 
     </dependency> 
     <dependency> 
      <groupId>org.abc</groupId> 
      <artifactId>xyz</artifactId> 
      <version>1.0.0</version> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 
....... 

あなたはdependencyManagementタグに依存関係を指定した場合、それは単にあなたが子ポンポンため、このjarファイルを利用可能にするされていることを意味NOTは実際にこの時点でjarをダウンロードします。子のpomはgroupIdとartifactId を明示的にとし、そのクラスをコンパイルするためにjarをダウンロードして使用する必要があります。

次のように子ポンポンは次のようになります。

..... 
<modelVersion>4.0.0</modelVersion> 

<parent>   // this is how you will inherit from parent pom 
    <groupId>group1</groupId> 
    <artifactId>group1-artifact</artifactId> 
    <version>1.0.1</version> 
</parent> 

<groupId>child1</groupId> 

    <dependencies> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-simple</artifactId> 
      <scope>runtime</scope> 
      // no version needed as it would inherit from the parent pom 
     </dependency> 
     <dependency> 
      <groupId>org.abc</groupId> 
      <artifactId>xyz</artifactId> 
      // no version needed as it would inherit from the parent pom 
     </dependency> 
    </dependencies> 

....... 
関連する問題