私はmavenとjenkinsを使用するのが初めてです。私は親ポンから子ポンに依存関係を継承しようとしていますが、次のエラーが表示されます:
[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に配置すると、完全に機能します。 jenkinsを使用してclean install
をインストールし、deploy
をnexusにデプロイします。私はmaven-3.3.9を使用しています。ジェンキンスでは、Gitから2つの異なるMavenプロジェクトの親と子のpomsを読みました。親POMからすべての依存関係とプラグインを継承したい。出来ますか?
これを実現するには、<dependencies>
セクションで継承する依存関係を宣言する必要があります。 <dependencyManagement>
は、有効になるために特定の子の<dependencies>
内で必要に応じて後で参照する必要がある定義に使用されます。
UPDATE:すべての子pomが継承する依存関係を宣言するときは注意してください。非常に迅速に、親で宣言されているという理由だけで、本当に必要のない依存関係を持つことになります。他のコメンターが言ったように、<dependencyManagement>
はより良い選択かもしれませんが、それはあなたが当初望んでいたものではありません。
実際、この問題に対処するには2つの方法があります。
<dependencyManagement />
ノードの下の親pomで依存関係をファクタリングし、それを必要とする各子で、<dependencies />
ノードに依存関係を追加します。依存関係のバージョンを設定しないことを選択できます。<dependencies />
ノードの親pomで依存関係を宣言すると、各子は依存関係の恩恵を受けます。したがって、たとえば、親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
はすべての子の依存関係になります。ただし、必要に応じて、子のPOMにslf4j-simple
への依存関係を追加する必要があります。
<dependencies>
<dependency>
<group>org.slf4j</group>
<artifactId>slf4j-simple</artifactId>
</dependency>
</dependencies>
プラグインの場合、同じ動作をしますが、<pluginManagement />
および<plugins />
ノードを使用します。すべての設定は、プラグインの親pomの定義に入れることができ、子pomの<build />
セクションでプラグインを宣言するだけです。
以下は、親と子のpomの使用方法の例です。
親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>
// add more childs here
</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を子pomで使用可能にすることを意味するになります。 ではなくこの時点で実際にjarをダウンロードします。子pomは、groupId
とartifactId
を提供する必要があります。明示的にをダウンロードして、jarを使用してクラスをコンパイルします。 注:子pomsに依存関係のバージョンを含める必要はありません。
子ポンムは次のようになります。
.....
<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>
.......
すべての子に共通の依存関係を親pomのdependencyManagement
タグに配置することをお勧めします。これにより、これらの依存関係のバージョンを1か所から管理できます。