Maven reactor builds in order that doesn't satisfy all dependencies -


i having trouble build ordering in snapshot build using maven. reactor building of jars in invalid order.

the following example structure recreate issue (the project i'm having issues larger, >100 jars):

pom.xml        [reactor] parent/pom.xml [parent] jar1/pom.xml jar2/pom.xml jar3/pom.xml 

pom.xml [reactor]

<project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">   <modelversion>4.0.0</modelversion>   <packaging>pom</packaging>   <groupid>com.test.buildorder</groupid>   <artifactid>reactor</artifactid>   <version>1.0</version>   <modules>     <module>jar3</module>     <module>jar2</module>     <module>jar1</module>   </modules> </project> 

parent/pom.xml

<project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">   <modelversion>4.0.0</modelversion>   <groupid>com.test.buildorder</groupid>   <artifactid>parent</artifactid>   <version>1.1</version>   <packaging>pom</packaging>    <dependencymanagement>   <dependencies>       <dependency>         <groupid>com.test.buildorder</groupid>         <artifactid>jar1</artifactid>         <version>1.1</version>       </dependency>       <dependency>         <groupid>com.test.buildorder</groupid>         <artifactid>jar2</artifactid>         <version>1.0</version>       </dependency>       <dependency>         <groupid>com.test.buildorder</groupid>         <artifactid>jar3</artifactid>         <version>1.1</version>       </dependency>     </dependencies>   </dependencymanagement> </project> 

jar1/pom.xml

<project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">   <modelversion>4.0.0</modelversion>   <groupid>com.test.buildorder</groupid>   <artifactid>jar1</artifactid>   <version>1.1</version>   <parent>     <groupid>com.test.buildorder</groupid>     <artifactid>parent</artifactid>     <version>1.1</version>   </parent> </project> 

jar2/pom.xml

<project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">   <modelversion>4.0.0</modelversion>   <groupid>com.test.buildorder</groupid>   <artifactid>jar2</artifactid>   <version>1.1</version>   <parent>     <groupid>com.test.buildorder</groupid>     <artifactid>parent</artifactid>     <version>1.0</version>   </parent>    <dependencies>     <dependency>       <groupid>com.test.buildorder</groupid>       <artifactid>jar1</artifactid>     </dependency>   </dependencies> </project> 

jar3/pom.xml

<project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">   <modelversion>4.0.0</modelversion>   <groupid>com.test.buildorder</groupid>   <artifactid>jar3</artifactid>   <version>1.1</version>   <parent>     <groupid>com.test.buildorder</groupid>     <artifactid>parent</artifactid>     <version>1.1</version>   </parent>    <dependencies>     <dependency>       <groupid>com.test.buildorder</groupid>       <artifactid>jar2</artifactid>     </dependency>   </dependencies> </project> 

my repository (local in case) has released 1.0 versions of each jar , jar3-1.0 depended on jar2-1.0, , jar2-1.0 depended on jar1-1.0 , each had parent-1.0 (i can post code if needed, question long i'll hold off unless asked).

i install 1.1 parent pom above, , attempt run install on reactor , following result.

[info] scanning projects... [warning] [warning] problems encountered while building effective model com.test.buildorder:jar3:jar:1.1 [warning] 'parent.relativepath' points @ com.test.buildorder:reactor instead of com.test.buildorder:parent, please verify project structure @ line 6, column 11 [warning] [warning] problems encountered while building effective model com.test.buildorder:jar2:jar:1.1 [warning] 'parent.relativepath' points @ com.test.buildorder:reactor instead of com.test.buildorder:parent, please verify project structure @ line 6, column 11 [warning] [warning] problems encountered while building effective model com.test.buildorder:jar1:jar:1.1 [warning] 'parent.relativepath' points @ com.test.buildorder:reactor instead of com.test.buildorder:parent, please verify project structure @ line 6, column 11 [warning] [warning] highly recommended fix these problems because threaten stability of build. [warning] [warning] reason, future maven versions might no longer support building such malformed projects. [warning] [info] ------------------------------------------------------------------------ [info] reactor build order: [info] [info] jar3 [info] jar2 [info] jar1 [info] reactor [info] [info] ------------------------------------------------------------------------ [info] building jar3 1.1 [info] ------------------------------------------------------------------------ downloading: https://repo.maven.apache.org/maven2/com/test/buildorder/jar1/1.1/jar1-1.1.jar [info] ------------------------------------------------------------------------ [info] reactor summary: [info] [info] jar3 ............................................... failure [  0.645 s] [info] jar2 ............................................... skipped [info] jar1 ............................................... skipped [info] reactor ............................................ skipped [info] ------------------------------------------------------------------------ [info] build failure [info] ------------------------------------------------------------------------ [info] total time: 0.775 s [info] finished at: 2015-06-03t16:56:04-05:00 [info] final memory: 4m/15m [info] ------------------------------------------------------------------------ [error] failed execute goal on project jar3: not resolve dependencies project com.test.buildorder:jar3:jar:1.1: not find artifact com.test.buildorder:jar1:jar:1.1 in central (https://repo.maven.apache.org/maven2) -> [help 1] [error] [error] see full stack trace of errors, re-run maven -e switch. [error] re-run maven using -x switch enable full debug logging. [error] [error] more information errors , possible solutions, please read following articles: [error] [help 1] http://cwiki.apache.org/confluence/display/maven/dependencyresolutionexception 

when built 1.0 versions reactor smart enough realize dependency tree jar3-1.0 -> jar2-1.0 -> jar1-1.0 , build in order jar1, jar2, jar3 satisfy dependencies.

now though because jar3-1.1 depends on jar2-1.0 (which in repo) reactor not assume jar1 needs built first debug (using -x argument) shows dependency tree be:

[debug] com.test.buildorder:jar3:jar:1.1 [debug]    com.test.buildorder:jar2:jar:1.0:compile [debug]       com.test.buildorder:jar1:jar:1.1:compile (version managed 1.0 com.test.buildorder:parent:1.1) 

so have few questions scenario:
1. why maven think jar3-1.1 has transitive dependency jar1-1.1?
2. why reactor not realize transitive dependency , build in required order satisfy it?
3. can prevent issue occurring? (preferrably without rewriting on 100 poms.)

edit: found answer question one, , 1 solution question three. still hear question two.

1. because never defined scope dependencies maven determines assigned default scope of compile. because of dependency jar2 jar1 appear transitive dependency jars depend on jar2 (such jar3). (version managed 1.0 com.test.buildorder:parent:1.1) informs me dependency jar2-1.0 jar1-1.0 because parent specifies version jar 1 (1.1) takes that.

3. if change scope of dependency jar2 jar1 provided dependency no longer becomes transitive. this assumes @ runtime required jars present, may not solution comes across issue. here guide scopes available in maven

i installed projects versions set 1.0 here. changed versions stated , got same error.

after changing reactor pom to:

 <modules>     <module>jar1</module>     <module>jar2</module>     <module>jar3</module> </modules> 

... build succeeded.

i looked @ guide working multiple modules, reactor sorting , last option there is:

  • the order declared in <modules> element (if no other rule applies)

after reading next sentence "note "instantiated" references used - dependencymanagement , pluginmanagement elements not cause change reactor sort order":

  • i restored reactor pom
  • i commented <dependencymanagement> section in parent pom , added <version> jar2 , jar3 poms explicitly → build succeeded with:

 

[info] reactor build order [info] [info] jar3 [info] jar1 [info] jar2 [info] reactor 

Comments

Popular posts from this blog

javascript - Bootstrap Popover: iOS Safari strange behaviour -

Magento/PHP - Get phones on all members in a customer group -

session - Logging Out Using PHP -